Quellcodebibliothek Statistik Leitseite products/sources/formale Sprachen/C/Linux/tools/testing/selftests/net/   (Open Source Betriebssystem Version 6.17.9©)  Datei vom 24.10.2025 mit Größe 3 kB image not shown  

Quelle  cmsg_so_priority.sh   Sprache: Shell

 
#!/bin/bash
# SPDX-License-Identifier: GPL-2.0

source lib.sh

readonly KSFT_SKIP=4

IP4=192.0.2.1/24
TGT4=192.0.2.2
TGT4_RAW=192.0.2.3
IP6=2001:db8::1/64
TGT6=2001:db8::2
TGT6_RAW=2001:db8::3
PORT=1234
TOTAL_TESTS=0
FAILED_TESTS=0

if ! command -v jq &> /dev/null; then
    echo "SKIP cmsg_so_priroity.sh test: jq is not installed." >&2
    exit "$KSFT_SKIP"
fi

check_result() {
    ((TOTAL_TESTS++))
    if [ "$1" -ne 0 ]; then
        ((FAILED_TESTS++))
    fi
}

cleanup()
{
    cleanup_ns $NS
}

trap cleanup EXIT

setup_ns NS

create_filter() {
    local handle=$1
    local vlan_prio=$2
    local ip_type=$3
    local proto=$4
    local dst_ip=$5
    local ip_proto

    if [[ "$proto" == "u" ]]; then
        ip_proto="udp"
    elif [[ "$ip_type" == "ipv4" && "$proto" == "i" ]]; then
        ip_proto="icmp"
    elif [[ "$ip_type" == "ipv6" && "$proto" == "i" ]]; then
        ip_proto="icmpv6"
    fi

    tc -n $NS filter add dev dummy1 \
        egress pref 1 handle "$handle" proto 802.1q \
        flower vlan_prio "$vlan_prio" vlan_ethtype "$ip_type" \
        dst_ip "$dst_ip" ${ip_proto:+ip_proto $ip_proto} \
        action pass
}

ip -n $NS link set dev lo up
ip -n $NS link add name dummy1 up type dummy

ip -n $NS link add link dummy1 name dummy1.10 up type vlan id 10 \
    egress-qos-map 0:0 1:1 2:2 3:3 4:4 5:5 6:6 7:7

ip -n $NS address add $IP4 dev dummy1.10
ip -n $NS address add $IP6 dev dummy1.10 nodad

ip netns exec $NS sysctl -wq net.ipv4.ping_group_range='0 2147483647'

ip -n $NS neigh add $TGT4 lladdr 00:11:22:33:44:55 nud permanent \
    dev dummy1.10
ip -n $NS neigh add $TGT6 lladdr 00:11:22:33:44:55 nud permanent \
    dev dummy1.10
ip -n $NS neigh add $TGT4_RAW lladdr 00:11:22:33:44:66 nud permanent \
    dev dummy1.10
ip -n $NS neigh add $TGT6_RAW lladdr 00:11:22:33:44:66 nud permanent \
    dev dummy1.10

tc -n $NS qdisc add dev dummy1 clsact

FILTER_COUNTER=10

for i in 4 6; do
    for proto in u i r; do
        echo "Test IPV$i, prot: $proto"
        for priority in {0..7}; do
            if [[ $i == 4 && $proto == "r" ]]; then
                TGT=$TGT4_RAW
            elif [[ $i == 6 && $proto == "r" ]]; then
                TGT=$TGT6_RAW
            elif [ $i == 4 ]; then
                TGT=$TGT4
            else
                TGT=$TGT6
            fi

            handle="${FILTER_COUNTER}${priority}"

            create_filter $handle $priority ipv$i $proto $TGT

            pkts=$(tc -n $NS -j -s filter show dev dummy1 egress \
                | jq ".[] | select(.options.handle == ${handle}) | \
                .options.actions[0].stats.packets")

            if [[ $pkts == 0 ]]; then
                check_result 0
            else
                echo "prio $priority: expected 0, got $pkts"
                check_result 1
            fi

            ip netns exec $NS ./cmsg_sender -$i -Q $priority \
             -p $proto $TGT $PORT

            pkts=$(tc -n $NS -j -s filter show dev dummy1 egress \
                | jq ".[] | select(.options.handle == ${handle}) | \
                .options.actions[0].stats.packets")
            if [[ $pkts == 1 ]]; then
                check_result 0
            else
                echo "prio $priority -Q: expected 1, got $pkts"
                check_result 1
            fi

            ip netns exec $NS ./cmsg_sender -$i -P $priority \
             -p $proto $TGT $PORT

            pkts=$(tc -n $NS -j -s filter show dev dummy1 egress \
                | jq ".[] | select(.options.handle == ${handle}) | \
                .options.actions[0].stats.packets")
            if [[ $pkts == 2 ]]; then
                check_result 0
            else
                echo "prio $priority -P: expected 2, got $pkts"
                check_result 1
            fi
        done
        FILTER_COUNTER=$((FILTER_COUNTER + 10))
    done
done

if [ $FAILED_TESTS -ne 0 ]; then
    echo "FAIL - $FAILED_TESTS/$TOTAL_TESTS tests failed"
    exit 1
else
    echo "OK - All $TOTAL_TESTS tests passed"
    exit 0
fi

Messung V0.5
C=99 H=89 G=94

¤ Dauer der Verarbeitung: 0.10 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.