selftests: net: mscc: ocelot: add a test for egress VLAN modification
authorVladimir Oltean <vladimir.oltean@nxp.com>
Fri, 1 Oct 2021 15:15:31 +0000 (18:15 +0300)
committerDavid S. Miller <davem@davemloft.net>
Sat, 2 Oct 2021 13:15:57 +0000 (14:15 +0100)
For this test we are exercising the VCAP ES0 block's ability to match on
a packet with a given VLAN ID, and push an ES0 TAG A with a VID derived
from VID_A_VAL plus the classified VLAN.

$eth3.200 is the generator port
$eth0 is the bridged DUT port that receives
$eth1 is the bridged DUT port that forwards and rewrites VID 200 to 300
      on egress via VCAP ES0
$eth2 is the port that receives from the DUT port $eth1

Since the egress rewriting happens outside the bridging service, VID 300
does not need to be in the bridge VLAN table of $eth1.

Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
tools/testing/selftests/drivers/net/ocelot/tc_flower_chains.sh

index 4711313a92a3fe62450c58155ece695415160f30..eaf8a04a7ca5f18633871b79eed97e9b3d9f3f40 100755 (executable)
@@ -285,6 +285,44 @@ test_vlan_ingress_modify()
        ip link set br0 type bridge vlan_filtering 0
 }
 
+test_vlan_egress_modify()
+{
+       printf "Testing egress VLAN modification..              "
+
+       tc qdisc add dev $eth1 clsact
+
+       ip link set br0 type bridge vlan_filtering 1
+       bridge vlan add dev $eth0 vid 200
+       bridge vlan add dev $eth1 vid 200
+
+       tc filter add dev $eth1 egress chain $(ES0) pref 3 \
+               protocol 802.1Q flower skip_sw vlan_id 200 vlan_prio 0 \
+               action vlan modify id 300 priority 7
+
+       tcpdump_start $eth2
+
+       $MZ $eth3.200 -q -c 1 -p 64 -a $eth3_mac -b $eth2_mac -t ip
+
+       sleep 1
+
+       tcpdump_stop
+
+       if tcpdump_show | grep -q "$eth3_mac > $eth2_mac, .* vlan 300"; then
+               echo "OK"
+       else
+               echo "FAIL"
+       fi
+
+       tcpdump_cleanup
+
+       tc filter del dev $eth1 egress chain $(ES0) pref 3
+       tc qdisc del dev $eth1 clsact
+
+       bridge vlan del dev $eth0 vid 200
+       bridge vlan del dev $eth1 vid 200
+       ip link set br0 type bridge vlan_filtering 0
+}
+
 test_skbedit_priority()
 {
        local num_pkts=100
@@ -310,6 +348,7 @@ ALL_TESTS="
        test_vlan_pop
        test_vlan_push
        test_vlan_ingress_modify
+       test_vlan_egress_modify
        test_skbedit_priority
 "