File Index
Files and directories
Sign in
FILE

cmsg_so_priority.sh

File preview with syntax highlighting.

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