xref: /linux/tools/testing/selftests/net/cmsg_so_priority.sh (revision 1260ed77798502de9c98020040d2995008de10cc)
1*cda7d5abSAnna Emese Nyiri#!/bin/bash
2*cda7d5abSAnna Emese Nyiri# SPDX-License-Identifier: GPL-2.0
3*cda7d5abSAnna Emese Nyiri
4*cda7d5abSAnna Emese Nyirisource lib.sh
5*cda7d5abSAnna Emese Nyiri
6*cda7d5abSAnna Emese Nyirireadonly KSFT_SKIP=4
7*cda7d5abSAnna Emese Nyiri
8*cda7d5abSAnna Emese NyiriIP4=192.0.2.1/24
9*cda7d5abSAnna Emese NyiriTGT4=192.0.2.2
10*cda7d5abSAnna Emese NyiriTGT4_RAW=192.0.2.3
11*cda7d5abSAnna Emese NyiriIP6=2001:db8::1/64
12*cda7d5abSAnna Emese NyiriTGT6=2001:db8::2
13*cda7d5abSAnna Emese NyiriTGT6_RAW=2001:db8::3
14*cda7d5abSAnna Emese NyiriPORT=1234
15*cda7d5abSAnna Emese NyiriTOTAL_TESTS=0
16*cda7d5abSAnna Emese NyiriFAILED_TESTS=0
17*cda7d5abSAnna Emese Nyiri
18*cda7d5abSAnna Emese Nyiriif ! command -v jq &> /dev/null; then
19*cda7d5abSAnna Emese Nyiri    echo "SKIP cmsg_so_priroity.sh test: jq is not installed." >&2
20*cda7d5abSAnna Emese Nyiri    exit "$KSFT_SKIP"
21*cda7d5abSAnna Emese Nyirifi
22*cda7d5abSAnna Emese Nyiri
23*cda7d5abSAnna Emese Nyiricheck_result() {
24*cda7d5abSAnna Emese Nyiri    ((TOTAL_TESTS++))
25*cda7d5abSAnna Emese Nyiri    if [ "$1" -ne 0 ]; then
26*cda7d5abSAnna Emese Nyiri        ((FAILED_TESTS++))
27*cda7d5abSAnna Emese Nyiri    fi
28*cda7d5abSAnna Emese Nyiri}
29*cda7d5abSAnna Emese Nyiri
30*cda7d5abSAnna Emese Nyiricleanup()
31*cda7d5abSAnna Emese Nyiri{
32*cda7d5abSAnna Emese Nyiri    cleanup_ns $NS
33*cda7d5abSAnna Emese Nyiri}
34*cda7d5abSAnna Emese Nyiri
35*cda7d5abSAnna Emese Nyiritrap cleanup EXIT
36*cda7d5abSAnna Emese Nyiri
37*cda7d5abSAnna Emese Nyirisetup_ns NS
38*cda7d5abSAnna Emese Nyiri
39*cda7d5abSAnna Emese Nyiricreate_filter() {
40*cda7d5abSAnna Emese Nyiri    local handle=$1
41*cda7d5abSAnna Emese Nyiri    local vlan_prio=$2
42*cda7d5abSAnna Emese Nyiri    local ip_type=$3
43*cda7d5abSAnna Emese Nyiri    local proto=$4
44*cda7d5abSAnna Emese Nyiri    local dst_ip=$5
45*cda7d5abSAnna Emese Nyiri    local ip_proto
46*cda7d5abSAnna Emese Nyiri
47*cda7d5abSAnna Emese Nyiri    if [[ "$proto" == "u" ]]; then
48*cda7d5abSAnna Emese Nyiri        ip_proto="udp"
49*cda7d5abSAnna Emese Nyiri    elif [[ "$ip_type" == "ipv4" && "$proto" == "i" ]]; then
50*cda7d5abSAnna Emese Nyiri        ip_proto="icmp"
51*cda7d5abSAnna Emese Nyiri    elif [[ "$ip_type" == "ipv6" && "$proto" == "i" ]]; then
52*cda7d5abSAnna Emese Nyiri        ip_proto="icmpv6"
53*cda7d5abSAnna Emese Nyiri    fi
54*cda7d5abSAnna Emese Nyiri
55*cda7d5abSAnna Emese Nyiri    tc -n $NS filter add dev dummy1 \
56*cda7d5abSAnna Emese Nyiri        egress pref 1 handle "$handle" proto 802.1q \
57*cda7d5abSAnna Emese Nyiri        flower vlan_prio "$vlan_prio" vlan_ethtype "$ip_type" \
58*cda7d5abSAnna Emese Nyiri        dst_ip "$dst_ip" ${ip_proto:+ip_proto $ip_proto} \
59*cda7d5abSAnna Emese Nyiri        action pass
60*cda7d5abSAnna Emese Nyiri}
61*cda7d5abSAnna Emese Nyiri
62*cda7d5abSAnna Emese Nyiriip -n $NS link set dev lo up
63*cda7d5abSAnna Emese Nyiriip -n $NS link add name dummy1 up type dummy
64*cda7d5abSAnna Emese Nyiri
65*cda7d5abSAnna Emese Nyiriip -n $NS link add link dummy1 name dummy1.10 up type vlan id 10 \
66*cda7d5abSAnna Emese Nyiri    egress-qos-map 0:0 1:1 2:2 3:3 4:4 5:5 6:6 7:7
67*cda7d5abSAnna Emese Nyiri
68*cda7d5abSAnna Emese Nyiriip -n $NS address add $IP4 dev dummy1.10
69*cda7d5abSAnna Emese Nyiriip -n $NS address add $IP6 dev dummy1.10 nodad
70*cda7d5abSAnna Emese Nyiri
71*cda7d5abSAnna Emese Nyiriip netns exec $NS sysctl -wq net.ipv4.ping_group_range='0 2147483647'
72*cda7d5abSAnna Emese Nyiri
73*cda7d5abSAnna Emese Nyiriip -n $NS neigh add $TGT4 lladdr 00:11:22:33:44:55 nud permanent \
74*cda7d5abSAnna Emese Nyiri    dev dummy1.10
75*cda7d5abSAnna Emese Nyiriip -n $NS neigh add $TGT6 lladdr 00:11:22:33:44:55 nud permanent \
76*cda7d5abSAnna Emese Nyiri    dev dummy1.10
77*cda7d5abSAnna Emese Nyiriip -n $NS neigh add $TGT4_RAW lladdr 00:11:22:33:44:66 nud permanent \
78*cda7d5abSAnna Emese Nyiri    dev dummy1.10
79*cda7d5abSAnna Emese Nyiriip -n $NS neigh add $TGT6_RAW lladdr 00:11:22:33:44:66 nud permanent \
80*cda7d5abSAnna Emese Nyiri    dev dummy1.10
81*cda7d5abSAnna Emese Nyiri
82*cda7d5abSAnna Emese Nyiritc -n $NS qdisc add dev dummy1 clsact
83*cda7d5abSAnna Emese Nyiri
84*cda7d5abSAnna Emese NyiriFILTER_COUNTER=10
85*cda7d5abSAnna Emese Nyiri
86*cda7d5abSAnna Emese Nyirifor i in 4 6; do
87*cda7d5abSAnna Emese Nyiri    for proto in u i r; do
88*cda7d5abSAnna Emese Nyiri        echo "Test IPV$i, prot: $proto"
89*cda7d5abSAnna Emese Nyiri        for priority in {0..7}; do
90*cda7d5abSAnna Emese Nyiri            if [[ $i == 4 && $proto == "r" ]]; then
91*cda7d5abSAnna Emese Nyiri                TGT=$TGT4_RAW
92*cda7d5abSAnna Emese Nyiri            elif [[ $i == 6 && $proto == "r" ]]; then
93*cda7d5abSAnna Emese Nyiri                TGT=$TGT6_RAW
94*cda7d5abSAnna Emese Nyiri            elif [ $i == 4 ]; then
95*cda7d5abSAnna Emese Nyiri                TGT=$TGT4
96*cda7d5abSAnna Emese Nyiri            else
97*cda7d5abSAnna Emese Nyiri                TGT=$TGT6
98*cda7d5abSAnna Emese Nyiri            fi
99*cda7d5abSAnna Emese Nyiri
100*cda7d5abSAnna Emese Nyiri            handle="${FILTER_COUNTER}${priority}"
101*cda7d5abSAnna Emese Nyiri
102*cda7d5abSAnna Emese Nyiri            create_filter $handle $priority ipv$i $proto $TGT
103*cda7d5abSAnna Emese Nyiri
104*cda7d5abSAnna Emese Nyiri            pkts=$(tc -n $NS -j -s filter show dev dummy1 egress \
105*cda7d5abSAnna Emese Nyiri                | jq ".[] | select(.options.handle == ${handle}) | \
106*cda7d5abSAnna Emese Nyiri                .options.actions[0].stats.packets")
107*cda7d5abSAnna Emese Nyiri
108*cda7d5abSAnna Emese Nyiri            if [[ $pkts == 0 ]]; then
109*cda7d5abSAnna Emese Nyiri                check_result 0
110*cda7d5abSAnna Emese Nyiri            else
111*cda7d5abSAnna Emese Nyiri                echo "prio $priority: expected 0, got $pkts"
112*cda7d5abSAnna Emese Nyiri                check_result 1
113*cda7d5abSAnna Emese Nyiri            fi
114*cda7d5abSAnna Emese Nyiri
115*cda7d5abSAnna Emese Nyiri            ip netns exec $NS ./cmsg_sender -$i -Q $priority \
116*cda7d5abSAnna Emese Nyiri	            -p $proto $TGT $PORT
117*cda7d5abSAnna Emese Nyiri
118*cda7d5abSAnna Emese Nyiri            pkts=$(tc -n $NS -j -s filter show dev dummy1 egress \
119*cda7d5abSAnna Emese Nyiri                | jq ".[] | select(.options.handle == ${handle}) | \
120*cda7d5abSAnna Emese Nyiri                .options.actions[0].stats.packets")
121*cda7d5abSAnna Emese Nyiri            if [[ $pkts == 1 ]]; then
122*cda7d5abSAnna Emese Nyiri                check_result 0
123*cda7d5abSAnna Emese Nyiri            else
124*cda7d5abSAnna Emese Nyiri                echo "prio $priority -Q: expected 1, got $pkts"
125*cda7d5abSAnna Emese Nyiri                check_result 1
126*cda7d5abSAnna Emese Nyiri            fi
127*cda7d5abSAnna Emese Nyiri
128*cda7d5abSAnna Emese Nyiri            ip netns exec $NS ./cmsg_sender -$i -P $priority \
129*cda7d5abSAnna Emese Nyiri	            -p $proto $TGT $PORT
130*cda7d5abSAnna Emese Nyiri
131*cda7d5abSAnna Emese Nyiri            pkts=$(tc -n $NS -j -s filter show dev dummy1 egress \
132*cda7d5abSAnna Emese Nyiri                | jq ".[] | select(.options.handle == ${handle}) | \
133*cda7d5abSAnna Emese Nyiri                .options.actions[0].stats.packets")
134*cda7d5abSAnna Emese Nyiri            if [[ $pkts == 2 ]]; then
135*cda7d5abSAnna Emese Nyiri                check_result 0
136*cda7d5abSAnna Emese Nyiri            else
137*cda7d5abSAnna Emese Nyiri                echo "prio $priority -P: expected 2, got $pkts"
138*cda7d5abSAnna Emese Nyiri                check_result 1
139*cda7d5abSAnna Emese Nyiri            fi
140*cda7d5abSAnna Emese Nyiri        done
141*cda7d5abSAnna Emese Nyiri        FILTER_COUNTER=$((FILTER_COUNTER + 10))
142*cda7d5abSAnna Emese Nyiri    done
143*cda7d5abSAnna Emese Nyiridone
144*cda7d5abSAnna Emese Nyiri
145*cda7d5abSAnna Emese Nyiriif [ $FAILED_TESTS -ne 0 ]; then
146*cda7d5abSAnna Emese Nyiri    echo "FAIL - $FAILED_TESTS/$TOTAL_TESTS tests failed"
147*cda7d5abSAnna Emese Nyiri    exit 1
148*cda7d5abSAnna Emese Nyirielse
149*cda7d5abSAnna Emese Nyiri    echo "OK - All $TOTAL_TESTS tests passed"
150*cda7d5abSAnna Emese Nyiri    exit 0
151*cda7d5abSAnna Emese Nyirifi
152