Merge https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next
[linux-2.6-microblaze.git] / tools / testing / selftests / net / forwarding / tc_police.sh
index 4f9f17c..0a51eef 100755 (executable)
@@ -37,6 +37,8 @@ ALL_TESTS="
        police_tx_mirror_test
        police_pps_rx_test
        police_pps_tx_test
+       police_mtu_rx_test
+       police_mtu_tx_test
 "
 NUM_NETIFS=6
 source tc_common.sh
@@ -346,6 +348,56 @@ police_pps_tx_test()
        tc filter del dev $rp2 egress protocol ip pref 1 handle 101 flower
 }
 
+police_mtu_common_test() {
+       RET=0
+
+       local test_name=$1; shift
+       local dev=$1; shift
+       local direction=$1; shift
+
+       tc filter add dev $dev $direction protocol ip pref 1 handle 101 flower \
+               dst_ip 198.51.100.1 ip_proto udp dst_port 54321 \
+               action police mtu 1042 conform-exceed drop/ok
+
+       # to count "conform" packets
+       tc filter add dev $h2 ingress protocol ip pref 1 handle 101 flower \
+               dst_ip 198.51.100.1 ip_proto udp dst_port 54321 \
+               action drop
+
+       mausezahn $h1 -a own -b $(mac_get $rp1) -A 192.0.2.1 -B 198.51.100.1 \
+               -t udp sp=12345,dp=54321 -p 1001 -c 10 -q
+
+       mausezahn $h1 -a own -b $(mac_get $rp1) -A 192.0.2.1 -B 198.51.100.1 \
+               -t udp sp=12345,dp=54321 -p 1000 -c 3 -q
+
+       tc_check_packets "dev $dev $direction" 101 13
+       check_err $? "wrong packet counter"
+
+       # "exceed" packets
+       local overlimits_t0=$(tc_rule_stats_get ${dev} 1 ${direction} .overlimits)
+       test ${overlimits_t0} = 10
+       check_err $? "wrong overlimits, expected 10 got ${overlimits_t0}"
+
+       # "conform" packets
+       tc_check_packets "dev $h2 ingress" 101 3
+       check_err $? "forwarding error"
+
+       tc filter del dev $h2 ingress protocol ip pref 1 handle 101 flower
+       tc filter del dev $dev $direction protocol ip pref 1 handle 101 flower
+
+       log_test "$test_name"
+}
+
+police_mtu_rx_test()
+{
+       police_mtu_common_test "police mtu (rx)" $rp1 ingress
+}
+
+police_mtu_tx_test()
+{
+       police_mtu_common_test "police mtu (tx)" $rp2 egress
+}
+
 setup_prepare()
 {
        h1=${NETIFS[p1]}