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 5 kB image not shown  

Quelle  big_tcp.sh   Sprache: Shell

 
#!/bin/bash
# SPDX-License-Identifier: GPL-2.0
#
# Testing For IPv4 and IPv6 BIG TCP.
# TOPO: CLIENT_NS (link0)<--->(link1) ROUTER_NS (link2)<--->(link3) SERVER_NS

CLIENT_NS=$(mktemp -u client-XXXXXXXX)
CLIENT_IP4="198.51.100.1"
CLIENT_IP6="2001:db8:1::1"

SERVER_NS=$(mktemp -u server-XXXXXXXX)
SERVER_IP4="203.0.113.1"
SERVER_IP6="2001:db8:2::1"

ROUTER_NS=$(mktemp -u router-XXXXXXXX)
SERVER_GW4="203.0.113.2"
CLIENT_GW4="198.51.100.2"
SERVER_GW6="2001:db8:2::2"
CLIENT_GW6="2001:db8:1::2"

MAX_SIZE=128000
CHK_SIZE=65535

# Kselftest framework requirement - SKIP code is 4.
ksft_skip=4

setup() {
 ip netns add $CLIENT_NS
 ip netns add $SERVER_NS
 ip netns add $ROUTER_NS
 ip -net $ROUTER_NS link add link1 type veth peer name link0 netns $CLIENT_NS
 ip -net $ROUTER_NS link add link2 type veth peer name link3 netns $SERVER_NS

 ip -net $CLIENT_NS link set link0 up
 ip -net $CLIENT_NS link set link0 mtu 1442
 ip -net $CLIENT_NS addr add $CLIENT_IP4/24 dev link0
 ip -net $CLIENT_NS addr add $CLIENT_IP6/64 dev link0 nodad
 ip -net $CLIENT_NS route add $SERVER_IP4 dev link0 via $CLIENT_GW4
 ip -net $CLIENT_NS route add $SERVER_IP6 dev link0 via $CLIENT_GW6
 ip -net $CLIENT_NS link set dev link0 \
  gro_ipv4_max_size $MAX_SIZE gso_ipv4_max_size $MAX_SIZE
 ip -net $CLIENT_NS link set dev link0 \
  gro_max_size $MAX_SIZE gso_max_size $MAX_SIZE
 ip net exec $CLIENT_NS sysctl -wq net.ipv4.tcp_window_scaling=10

 ip -net $ROUTER_NS link set link1 up
 ip -net $ROUTER_NS link set link2 up
 ip -net $ROUTER_NS addr add $CLIENT_GW4/24 dev link1
 ip -net $ROUTER_NS addr add $CLIENT_GW6/64 dev link1 nodad
 ip -net $ROUTER_NS addr add $SERVER_GW4/24 dev link2
 ip -net $ROUTER_NS addr add $SERVER_GW6/64 dev link2 nodad
 ip -net $ROUTER_NS link set dev link1 \
  gro_ipv4_max_size $MAX_SIZE gso_ipv4_max_size $MAX_SIZE
 ip -net $ROUTER_NS link set dev link2 \
  gro_ipv4_max_size $MAX_SIZE gso_ipv4_max_size $MAX_SIZE
 ip -net $ROUTER_NS link set dev link1 \
  gro_max_size $MAX_SIZE gso_max_size $MAX_SIZE
 ip -net $ROUTER_NS link set dev link2 \
  gro_max_size $MAX_SIZE gso_max_size $MAX_SIZE
 # test for nf_ct_skb_network_trim in nf_conntrack_ovs used by TC ct action.
 ip net exec $ROUTER_NS tc qdisc add dev link1 ingress
 ip net exec $ROUTER_NS tc filter add dev link1 ingress \
  proto ip flower ip_proto tcp action ct
 ip net exec $ROUTER_NS tc filter add dev link1 ingress \
  proto ipv6 flower ip_proto tcp action ct
 ip net exec $ROUTER_NS sysctl -wq net.ipv4.ip_forward=1
 ip net exec $ROUTER_NS sysctl -wq net.ipv6.conf.all.forwarding=1

 ip -net $SERVER_NS link set link3 up
 ip -net $SERVER_NS addr add $SERVER_IP4/24 dev link3
 ip -net $SERVER_NS addr add $SERVER_IP6/64 dev link3 nodad
 ip -net $SERVER_NS route add $CLIENT_IP4 dev link3 via $SERVER_GW4
 ip -net $SERVER_NS route add $CLIENT_IP6 dev link3 via $SERVER_GW6
 ip -net $SERVER_NS link set dev link3 \
  gro_ipv4_max_size $MAX_SIZE gso_ipv4_max_size $MAX_SIZE
 ip -net $SERVER_NS link set dev link3 \
  gro_max_size $MAX_SIZE gso_max_size $MAX_SIZE
 ip net exec $SERVER_NS sysctl -wq net.ipv4.tcp_window_scaling=10
 ip net exec $SERVER_NS netserver 2>&1 >/dev/null
}

cleanup() {
 ip net exec $SERVER_NS pkill netserver
 ip -net $ROUTER_NS link del link1
 ip -net $ROUTER_NS link del link2
 ip netns del "$CLIENT_NS"
 ip netns del "$SERVER_NS"
 ip netns del "$ROUTER_NS"
}

start_counter() {
 local ipt="iptables"
 local iface=$1
 local netns=$2

 [ "$NF" = "6" ] && ipt="ip6tables"
 ip net exec $netns $ipt -t raw -A PREROUTING -i $iface \
  -m length ! --length 0:$CHK_SIZE -j ACCEPT
}

check_counter() {
 local ipt="iptables"
 local iface=$1
 local netns=$2

 [ "$NF" = "6" ] && ipt="ip6tables"
 test `ip net exec $netns $ipt -t raw -L -v |grep $iface | awk '{print $1}'` != "0"
}

stop_counter() {
 local ipt="iptables"
 local iface=$1
 local netns=$2

 [ "$NF" = "6" ] && ipt="ip6tables"
 ip net exec $netns $ipt -t raw -D PREROUTING -i $iface \
  -m length ! --length 0:$CHK_SIZE -j ACCEPT
}

do_netperf() {
 local serip=$SERVER_IP4
 local netns=$1

 [ "$NF" = "6" ] && serip=$SERVER_IP6

 # use large write to be sure to generate big tcp packets
 ip net exec $netns netperf -$NF -t TCP_STREAM -l 1 -H $serip -- -m 262144 2>&1 >/dev/null
}

do_test() {
 local cli_tso=$1
 local gw_gro=$2
 local gw_tso=$3
 local ser_gro=$4
 local ret="PASS"

 ip net exec $CLIENT_NS ethtool -K link0 tso $cli_tso
 ip net exec $ROUTER_NS ethtool -K link1 gro $gw_gro
 ip net exec $ROUTER_NS ethtool -K link2 tso $gw_tso
 ip net exec $SERVER_NS ethtool -K link3 gro $ser_gro

 start_counter link1 $ROUTER_NS
 start_counter link3 $SERVER_NS
 do_netperf $CLIENT_NS

 if check_counter link1 $ROUTER_NS; then
  check_counter link3 $SERVER_NS || ret="FAIL_on_link3"
 else
  ret="FAIL_on_link1"
 fi

 stop_counter link1 $ROUTER_NS
 stop_counter link3 $SERVER_NS
 printf "%-9s %-8s %-8s %-8s: [%s]\n" \
  $cli_tso $gw_gro $gw_tso $ser_gro $ret
 test $ret = "PASS"
}

testup() {
 echo "CLI GSO | GW GRO | GW GSO | SER GRO" && \
 do_test "on"  "on"  "on"  "on"  && \
 do_test "on"  "off" "on"  "off" && \
 do_test "off" "on"  "on"  "on"  && \
 do_test "on"  "on"  "off" "on"  && \
 do_test "off" "on"  "off" "on"
}

if ! netperf -V &> /dev/null; then
 echo "SKIP: Could not run test without netperf tool"
 exit $ksft_skip
fi

if ! ip link help 2>&1 | grep gso_ipv4_max_size &> /dev/null; then
 echo "SKIP: Could not run test without gso/gro_ipv4_max_size supported in ip-link"
 exit $ksft_skip
fi

trap cleanup EXIT
setup && echo "Testing for BIG TCP:" && \
NF=4 testup && echo "***v4 Tests Done***" && \
NF=6 testup && echo "***v6 Tests Done***"
exit $?

Messung V0.5
C=97 H=99 G=97

¤ Dauer der Verarbeitung: 0.4 Sekunden  ¤

*© 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.