selftests: tc_actions: test egress 2nd vlan push
authorBoris Sukholitko <boris.sukholitko@broadcom.com>
Thu, 22 Aug 2024 10:35:10 +0000 (13:35 +0300)
committerPaolo Abeni <pabeni@redhat.com>
Tue, 27 Aug 2024 09:37:43 +0000 (11:37 +0200)
Add new test checking the correctness of inner vlan flushing to the skb
data when outer vlan tag is added through act_vlan on egress.

Signed-off-by: Boris Sukholitko <boris.sukholitko@broadcom.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
tools/testing/selftests/net/forwarding/tc_actions.sh

index f2f1e99a90b22cfe97329968a884c63568c08097..ea89e558672db0af1e64c8761f7879c649642104 100755 (executable)
@@ -4,7 +4,8 @@
 ALL_TESTS="gact_drop_and_ok_test mirred_egress_redirect_test \
        mirred_egress_mirror_test matchall_mirred_egress_mirror_test \
        gact_trap_test mirred_egress_to_ingress_test \
-       mirred_egress_to_ingress_tcp_test ingress_2nd_vlan_push"
+       mirred_egress_to_ingress_tcp_test \
+       ingress_2nd_vlan_push egress_2nd_vlan_push"
 NUM_NETIFS=4
 source tc_common.sh
 source lib.sh
@@ -265,6 +266,28 @@ ingress_2nd_vlan_push()
        log_test "ingress_2nd_vlan_push ($tcflags)"
 }
 
+egress_2nd_vlan_push()
+{
+       tc filter add dev $h1 egress pref 20 chain 0 handle 20 flower \
+               $tcflags num_of_vlans 0 \
+               action vlan push id 10 protocol 0x8100 \
+               pipe action vlan push id 100 protocol 0x8100 action goto chain 5
+       tc filter add dev $h1 egress pref 30 chain 5 handle 30 flower \
+               $tcflags num_of_vlans 2 \
+               cvlan_ethtype 0x800 action pass
+
+       $MZ $h1 -c 1 -p 64 -a $h1mac -b $h2mac -A 192.0.2.1 -B 192.0.2.2 \
+               -t ip -q
+
+       tc_check_packets "dev $h1 egress" 30 1
+       check_err $? "No double-vlan packets received"
+
+       tc filter del dev $h1 egress pref 20 chain 0 handle 20 flower
+       tc filter del dev $h1 egress pref 30 chain 5 handle 30 flower
+
+       log_test "egress_2nd_vlan_push ($tcflags)"
+}
+
 setup_prepare()
 {
        h1=${NETIFS[p1]}