Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quelle  fib_rule_tests.sh   Sprache: Shell

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

# This test is for checking IPv4 and IPv6 FIB rules API

source lib.sh
ret=0
PAUSE_ON_FAIL=${PAUSE_ON_FAIL:=no}

RTABLE=100
RTABLE_PEER=101
RTABLE_VRF=102
GW_IP4=192.51.100.2
SRC_IP=192.51.100.3
GW_IP6=2001:db8:1::2
SRC_IP6=2001:db8:1::3

DEV_ADDR=192.51.100.1
DEV_ADDR6=2001:db8:1::1
DEV=dummy0
TESTS="
 fib_rule6
 fib_rule4
 fib_rule6_connect
 fib_rule4_connect
 fib_rule6_vrf
 fib_rule4_vrf
"

SELFTEST_PATH=""

log_test()
{
 local rc=$1
 local expected=$2
 local msg="$3"

 if [ ${rc} -eq ${expected} ]; then
  nsuccess=$((nsuccess+1))
  printf " TEST: %-60s [ OK ]\n" "${msg}"
 else
  ret=1
  nfail=$((nfail+1))
  printf " TEST: %-60s [FAIL]\n" "${msg}"
  if [ "${PAUSE_ON_FAIL}" = "yes" ]; then
   echo
   echo "hit enter to continue, 'q' to quit"
   read a
   [ "$a" = "q" ] && exit 1
  fi
 fi
}

setup()
{
 set -e
 setup_ns testns
 IP="ip -netns $testns"

 $IP link add dummy0 type dummy
 $IP link set dev dummy0 up
 $IP address add $DEV_ADDR/24 dev dummy0
 $IP -6 address add $DEV_ADDR6/64 dev dummy0

 set +e
}

cleanup()
{
 $IP link del dev dummy0 &> /dev/null
 cleanup_ns $testns
}

setup_peer()
{
 set -e

 setup_ns peerns
 IP_PEER="ip -netns $peerns"
 $IP_PEER link set dev lo up

 ip link add name veth0 netns $testns type veth \
  peer name veth1 netns $peerns
 $IP link set dev veth0 up
 $IP_PEER link set dev veth1 up

 $IP address add 192.0.2.10 peer 192.0.2.11/32 dev veth0
 $IP_PEER address add 192.0.2.11 peer 192.0.2.10/32 dev veth1

 $IP address add 2001:db8::10 peer 2001:db8::11/128 dev veth0 nodad
 $IP_PEER address add 2001:db8::11 peer 2001:db8::10/128 dev veth1 nodad

 $IP_PEER address add 198.51.100.11/32 dev lo
 $IP route add table $RTABLE_PEER 198.51.100.11/32 via 192.0.2.11

 $IP_PEER address add 2001:db8::1:11/128 dev lo
 $IP route add table $RTABLE_PEER 2001:db8::1:11/128 via 2001:db8::11

 set +e
}

cleanup_peer()
{
 $IP link del dev veth0
 ip netns del $peerns
}

setup_vrf()
{
 $IP link add name vrf0 up type vrf table $RTABLE_VRF
 $IP link set dev $DEV master vrf0
}

cleanup_vrf()
{
 $IP link del dev vrf0
}

fib_check_iproute_support()
{
 ip rule help 2>&1 | grep -q $1
 if [ $? -ne 0 ]; then
  echo "SKIP: iproute2 iprule too old, missing $1 match"
  return 1
 fi

 ip route get help 2>&1 | grep -q $2
 if [ $? -ne 0 ]; then
  echo "SKIP: iproute2 get route too old, missing $2 match"
  return 1
 fi

 return 0
}

fib_rule6_del()
{
 $IP -6 rule del $1
 log_test $? 0 "rule6 del $1"
}

fib_rule6_del_by_pref()
{
 pref=$($IP -6 rule show $1 table $RTABLE | cut -d ":" -f 1)
 $IP -6 rule del pref $pref
}

fib_rule6_test_match_n_redirect()
{
 local match="$1"
 local getmatch="$2"
 local getnomatch="$3"
 local description="$4"
 local nomatch_description="$5"

 $IP -6 rule add $match table $RTABLE
 $IP -6 route get $GW_IP6 $getmatch | grep -q "table $RTABLE"
 log_test $? 0 "rule6 check: $description"

 $IP -6 route get $GW_IP6 $getnomatch 2>&1 | grep -q "table $RTABLE"
 log_test $? 1 "rule6 check: $nomatch_description"

 fib_rule6_del_by_pref "$match"
 log_test $? 0 "rule6 del by pref: $description"
}

fib_rule6_test_reject()
{
 local match="$1"
 local rc

 $IP -6 rule add $match table $RTABLE 2>/dev/null
 rc=$?
 log_test $rc 2 "rule6 check: $match"

 if [ $rc -eq 0 ]; then
  $IP -6 rule del $match table $RTABLE
 fi
}

fib_rule6_test()
{
 local ext_name=$1; shift
 local getnomatch
 local getmatch
 local match
 local cnt

 echo
 echo "IPv6 FIB rule tests $ext_name"

 # setup the fib rule redirect route
 $IP -6 route add table $RTABLE default via $GW_IP6 dev $DEV onlink

 match="oif $DEV"
 getnomatch="oif lo"
 fib_rule6_test_match_n_redirect "$match" "$match" "$getnomatch" \
  "oif redirect to table" "oif no redirect to table"

 match="from $SRC_IP6 iif $DEV"
 getnomatch="from $SRC_IP6 iif lo"
 fib_rule6_test_match_n_redirect "$match" "$match" "$getnomatch" \
  "iif redirect to table" "iif no redirect to table"

 # Reject dsfield (tos) options which have ECN bits set
 for cnt in $(seq 1 3); do
  match="dsfield $cnt"
  fib_rule6_test_reject "$match"
 done

 # Don't take ECN bits into account when matching on dsfield
 match="tos 0x10"
 for cnt in "0x10" "0x11" "0x12" "0x13"; do
  # Using option 'tos' instead of 'dsfield' as old iproute2
  # versions don't support 'dsfield' in ip rule show.
  getmatch="tos $cnt"
  getnomatch="tos 0x20"
  fib_rule6_test_match_n_redirect "$match" "$getmatch" \
   "$getnomatch" "$getmatch redirect to table" \
   "$getnomatch no redirect to table"
 done

 # Re-test TOS matching, but with input routes since they are handled
 # differently from output routes.
 match="tos 0x10"
 for cnt in "0x10" "0x11" "0x12" "0x13"; do
  getmatch="tos $cnt"
  getnomatch="tos 0x20"
  fib_rule6_test_match_n_redirect "$match" \
   "from $SRC_IP6 iif $DEV $getmatch" \
   "from $SRC_IP6 iif $DEV $getnomatch" \
   "iif $getmatch redirect to table" \
   "iif $getnomatch no redirect to table"
 done

 match="fwmark 0x64"
 getmatch="mark 0x64"
 getnomatch="mark 0x63"
 fib_rule6_test_match_n_redirect "$match" "$getmatch" "$getnomatch" \
  "fwmark redirect to table" "fwmark no redirect to table"

 fib_check_iproute_support "uidrange" "uid"
 if [ $? -eq 0 ]; then
  match="uidrange 100-100"
  getmatch="uid 100"
  getnomatch="uid 101"
  fib_rule6_test_match_n_redirect "$match" "$getmatch" \
   "$getnomatch" "uid redirect to table" \
   "uid no redirect to table"
 fi

 fib_check_iproute_support "sport" "sport"
 if [ $? -eq 0 ]; then
  match="sport 666 dport 777"
  getnomatch="sport 667 dport 778"
  fib_rule6_test_match_n_redirect "$match" "$match" \
   "$getnomatch" "sport and dport redirect to table" \
   "sport and dport no redirect to table"

  match="sport 100-200 dport 300-400"
  getmatch="sport 100 dport 400"
  getnomatch="sport 100 dport 401"
  fib_rule6_test_match_n_redirect "$match" "$getmatch" \
   "$getnomatch" \
   "sport and dport range redirect to table" \
   "sport and dport range no redirect to table"
 fi

 ip rule help 2>&1 | grep sport | grep -q MASK
 if [ $? -eq 0 ]; then
  match="sport 0x0f00/0xff00 dport 0x000f/0x00ff"
  getmatch="sport 0x0f11 dport 0x220f"
  getnomatch="sport 0x1f11 dport 0x221f"
  fib_rule6_test_match_n_redirect "$match" "$getmatch" \
   "$getnomatch" "sport and dport masked redirect to table" \
   "sport and dport masked no redirect to table"
 fi

 fib_check_iproute_support "ipproto" "ipproto"
 if [ $? -eq 0 ]; then
  match="ipproto tcp"
  getnomatch="ipproto udp"
  fib_rule6_test_match_n_redirect "$match" "$match" \
   "$getnomatch" "ipproto tcp match" "ipproto udp no match"
 fi

 fib_check_iproute_support "ipproto" "ipproto"
 if [ $? -eq 0 ]; then
  match="ipproto ipv6-icmp"
  getnomatch="ipproto tcp"
  fib_rule6_test_match_n_redirect "$match" "$match" \
   "$getnomatch" "ipproto ipv6-icmp match" \
   "ipproto ipv6-tcp no match"
 fi

 fib_check_iproute_support "dscp" "tos"
 if [ $? -eq 0 ]; then
  match="dscp 0x3f"
  getmatch="tos 0xfc"
  getnomatch="tos 0xf4"
  fib_rule6_test_match_n_redirect "$match" "$getmatch" \
   "$getnomatch" "dscp redirect to table" \
   "dscp no redirect to table"

  match="dscp 0x3f"
  getmatch="from $SRC_IP6 iif $DEV tos 0xfc"
  getnomatch="from $SRC_IP6 iif $DEV tos 0xf4"
  fib_rule6_test_match_n_redirect "$match" "$getmatch" \
   "$getnomatch" "iif dscp redirect to table" \
   "iif dscp no redirect to table"
 fi

 ip rule help 2>&1 | grep -q "DSCP\[/MASK\]"
 if [ $? -eq 0 ]; then
  match="dscp 0x0f/0x0f"
  tosmatch=$(printf 0x"%x" $((0x1f << 2)))
  tosnomatch=$(printf 0x"%x" $((0x1e << 2)))
  getmatch="tos $tosmatch"
  getnomatch="tos $tosnomatch"
  fib_rule6_test_match_n_redirect "$match" "$getmatch" \
   "$getnomatch" "dscp masked redirect to table" \
   "dscp masked no redirect to table"

  match="dscp 0x0f/0x0f"
  getmatch="from $SRC_IP6 iif $DEV tos $tosmatch"
  getnomatch="from $SRC_IP6 iif $DEV tos $tosnomatch"
  fib_rule6_test_match_n_redirect "$match" "$getmatch" \
   "$getnomatch" "iif dscp masked redirect to table" \
   "iif dscp masked no redirect to table"
 fi

 fib_check_iproute_support "flowlabel" "flowlabel"
 if [ $? -eq 0 ]; then
  match="flowlabel 0xfffff"
  getmatch="flowlabel 0xfffff"
  getnomatch="flowlabel 0xf"
  fib_rule6_test_match_n_redirect "$match" "$getmatch" \
   "$getnomatch" "flowlabel redirect to table" \
   "flowlabel no redirect to table"

  match="flowlabel 0xfffff"
  getmatch="from $SRC_IP6 iif $DEV flowlabel 0xfffff"
  getnomatch="from $SRC_IP6 iif $DEV flowlabel 0xf"
  fib_rule6_test_match_n_redirect "$match" "$getmatch" \
   "$getnomatch" "iif flowlabel redirect to table" \
   "iif flowlabel no redirect to table"

  match="flowlabel 0x08000/0x08000"
  getmatch="flowlabel 0xfffff"
  getnomatch="flowlabel 0xf7fff"
  fib_rule6_test_match_n_redirect "$match" "$getmatch" \
   "$getnomatch" "flowlabel masked redirect to table" \
   "flowlabel masked no redirect to table"

  match="flowlabel 0x08000/0x08000"
  getmatch="from $SRC_IP6 iif $DEV flowlabel 0xfffff"
  getnomatch="from $SRC_IP6 iif $DEV flowlabel 0xf7fff"
  fib_rule6_test_match_n_redirect "$match" "$getmatch" \
   "$getnomatch" "iif flowlabel masked redirect to table" \
   "iif flowlabel masked no redirect to table"
 fi

 $IP link show dev $DEV | grep -q vrf0
 if [ $? -eq 0 ]; then
  match="oif vrf0"
  getmatch="oif $DEV"
  getnomatch="oif lo"
  fib_rule6_test_match_n_redirect "$match" "$getmatch" \
   "$getnomatch" "VRF oif redirect to table" \
   "VRF oif no redirect to table"

  match="from $SRC_IP6 iif vrf0"
  getmatch="from $SRC_IP6 iif $DEV"
  getnomatch="from $SRC_IP6 iif lo"
  fib_rule6_test_match_n_redirect "$match" "$getmatch" \
   "$getnomatch" "VRF iif redirect to table" \
   "VRF iif no redirect to table"
 fi
}

fib_rule6_vrf_test()
{
 setup_vrf
 fib_rule6_test "- with VRF"
 cleanup_vrf
}

# Verify that the IPV6_TCLASS option of UDPv6 and TCPv6 sockets is properly
# taken into account when connecting the socket and when sending packets.
fib_rule6_connect_test()
{
 local dsfield

 echo
 echo "IPv6 FIB rule connect tests"

 setup_peer
 $IP -6 rule add dsfield 0x04 table $RTABLE_PEER

 # Combine the base DS Field value (0x04) with all possible ECN values
 # (Not-ECT: 0, ECT(1): 1, ECT(0): 2, CE: 3).
 # The ECN bits shouldn't influence the result of the test.
 for dsfield in 0x04 0x05 0x06 0x07; do
  nettest -q -6 -B -t 5 -N $testns -O $peerns -U -D \
   -Q "${dsfield}" -l 2001:db8::1:11 -r 2001:db8::1:11
  log_test $? 0 "rule6 dsfield udp connect (dsfield ${dsfield})"

  nettest -q -6 -B -t 5 -N $testns -O $peerns -Q "${dsfield}" \
   -l 2001:db8::1:11 -r 2001:db8::1:11
  log_test $? 0 "rule6 dsfield tcp connect (dsfield ${dsfield})"
 done

 # Check that UDP and TCP connections fail when using a DS Field that
 # does not match the previously configured FIB rule.
 nettest -q -6 -B -t 5 -N $testns -O $peerns -U -D \
  -Q 0x20 -l 2001:db8::1:11 -r 2001:db8::1:11
 log_test $? 1 "rule6 dsfield udp no connect (dsfield 0x20)"

 nettest -q -6 -B -t 5 -N $testns -O $peerns -Q 0x20 \
  -l 2001:db8::1:11 -r 2001:db8::1:11
 log_test $? 1 "rule6 dsfield tcp no connect (dsfield 0x20)"

 $IP -6 rule del dsfield 0x04 table $RTABLE_PEER

 ip rule help 2>&1 | grep -q dscp
 if [ $? -ne 0 ]; then
  echo "SKIP: iproute2 iprule too old, missing dscp match"
  cleanup_peer
  return
 fi

 $IP -6 rule add dscp 0x3f table $RTABLE_PEER

 nettest -q -6 -B -t 5 -N $testns -O $peerns -U -D -Q 0xfc \
  -l 2001:db8::1:11 -r 2001:db8::1:11
 log_test $? 0 "rule6 dscp udp connect"

 nettest -q -6 -B -t 5 -N $testns -O $peerns -Q 0xfc \
  -l 2001:db8::1:11 -r 2001:db8::1:11
 log_test $? 0 "rule6 dscp tcp connect"

 nettest -q -6 -B -t 5 -N $testns -O $peerns -U -D -Q 0xf4 \
  -l 2001:db8::1:11 -r 2001:db8::1:11
 log_test $? 1 "rule6 dscp udp no connect"

 nettest -q -6 -B -t 5 -N $testns -O $peerns -Q 0xf4 \
  -l 2001:db8::1:11 -r 2001:db8::1:11
 log_test $? 1 "rule6 dscp tcp no connect"

 $IP -6 rule del dscp 0x3f table $RTABLE_PEER

 cleanup_peer
}

fib_rule4_del()
{
 $IP rule del $1
 log_test $? 0 "del $1"
}

fib_rule4_del_by_pref()
{
 pref=$($IP rule show $1 table $RTABLE | cut -d ":" -f 1)
 $IP rule del pref $pref
}

fib_rule4_test_match_n_redirect()
{
 local match="$1"
 local getmatch="$2"
 local getnomatch="$3"
 local description="$4"
 local nomatch_description="$5"

 $IP rule add $match table $RTABLE
 $IP route get $GW_IP4 $getmatch | grep -q "table $RTABLE"
 log_test $? 0 "rule4 check: $description"

 $IP route get $GW_IP4 $getnomatch 2>&1 | grep -q "table $RTABLE"
 log_test $? 1 "rule4 check: $nomatch_description"

 fib_rule4_del_by_pref "$match"
 log_test $? 0 "rule4 del by pref: $description"
}

fib_rule4_test_reject()
{
 local match="$1"
 local rc

 $IP rule add $match table $RTABLE 2>/dev/null
 rc=$?
 log_test $rc 2 "rule4 check: $match"

 if [ $rc -eq 0 ]; then
  $IP rule del $match table $RTABLE
 fi
}

fib_rule4_test()
{
 local ext_name=$1; shift
 local getnomatch
 local getmatch
 local match
 local cnt

 echo
 echo "IPv4 FIB rule tests $ext_name"

 # setup the fib rule redirect route
 $IP route add table $RTABLE default via $GW_IP4 dev $DEV onlink

 match="oif $DEV"
 getnomatch="oif lo"
 fib_rule4_test_match_n_redirect "$match" "$match" "$getnomatch" \
  "oif redirect to table" "oif no redirect to table"

 ip netns exec $testns sysctl -qw net.ipv4.ip_forward=1
 match="from $SRC_IP iif $DEV"
 getnomatch="from $SRC_IP iif lo"
 fib_rule4_test_match_n_redirect "$match" "$match" "$getnomatch" \
  "iif redirect to table" "iif no redirect to table"

 # Reject dsfield (tos) options which have ECN bits set
 for cnt in $(seq 1 3); do
  match="dsfield $cnt"
  fib_rule4_test_reject "$match"
 done

 # Don't take ECN bits into account when matching on dsfield
 match="tos 0x10"
 for cnt in "0x10" "0x11" "0x12" "0x13"; do
  # Using option 'tos' instead of 'dsfield' as old iproute2
  # versions don't support 'dsfield' in ip rule show.
  getmatch="tos $cnt"
  getnomatch="tos 0x20"
  fib_rule4_test_match_n_redirect "$match" "$getmatch" \
   "$getnomatch" "$getmatch redirect to table" \
   "$getnomatch no redirect to table"
 done

 # Re-test TOS matching, but with input routes since they are handled
 # differently from output routes.
 match="tos 0x10"
 for cnt in "0x10" "0x11" "0x12" "0x13"; do
  getmatch="tos $cnt"
  getnomatch="tos 0x20"
  fib_rule4_test_match_n_redirect "$match" \
   "from $SRC_IP iif $DEV $getmatch" \
   "from $SRC_IP iif $DEV $getnomatch" \
   "iif $getmatch redirect to table" \
   "iif $getnomatch no redirect to table"
 done

 match="fwmark 0x64"
 getmatch="mark 0x64"
 getnomatch="mark 0x63"
 fib_rule4_test_match_n_redirect "$match" "$getmatch" "$getnomatch" \
  "fwmark redirect to table" "fwmark no redirect to table"

 fib_check_iproute_support "uidrange" "uid"
 if [ $? -eq 0 ]; then
  match="uidrange 100-100"
  getmatch="uid 100"
  getnomatch="uid 101"
  fib_rule4_test_match_n_redirect "$match" "$getmatch" \
   "$getnomatch" "uid redirect to table" \
   "uid no redirect to table"
 fi

 fib_check_iproute_support "sport" "sport"
 if [ $? -eq 0 ]; then
  match="sport 666 dport 777"
  getnomatch="sport 667 dport 778"
  fib_rule4_test_match_n_redirect "$match" "$match" \
   "$getnomatch" "sport and dport redirect to table" \
   "sport and dport no redirect to table"

  match="sport 100-200 dport 300-400"
  getmatch="sport 100 dport 400"
  getnomatch="sport 100 dport 401"
  fib_rule4_test_match_n_redirect "$match" "$getmatch" \
   "$getnomatch" \
   "sport and dport range redirect to table" \
   "sport and dport range no redirect to table"
 fi

 ip rule help 2>&1 | grep sport | grep -q MASK
 if [ $? -eq 0 ]; then
  match="sport 0x0f00/0xff00 dport 0x000f/0x00ff"
  getmatch="sport 0x0f11 dport 0x220f"
  getnomatch="sport 0x1f11 dport 0x221f"
  fib_rule4_test_match_n_redirect "$match" "$getmatch" \
   "$getnomatch" "sport and dport masked redirect to table" \
   "sport and dport masked no redirect to table"
 fi

 fib_check_iproute_support "ipproto" "ipproto"
 if [ $? -eq 0 ]; then
  match="ipproto tcp"
  getnomatch="ipproto udp"
  fib_rule4_test_match_n_redirect "$match" "$match" \
   "$getnomatch" "ipproto tcp match" \
   "ipproto udp no match"
 fi

 fib_check_iproute_support "ipproto" "ipproto"
 if [ $? -eq 0 ]; then
  match="ipproto icmp"
  getnomatch="ipproto tcp"
  fib_rule4_test_match_n_redirect "$match" "$match" \
   "$getnomatch" "ipproto icmp match" \
   "ipproto tcp no match"
 fi

 fib_check_iproute_support "dscp" "tos"
 if [ $? -eq 0 ]; then
  match="dscp 0x3f"
  getmatch="tos 0xfc"
  getnomatch="tos 0xf4"
  fib_rule4_test_match_n_redirect "$match" "$getmatch" \
   "$getnomatch" "dscp redirect to table" \
   "dscp no redirect to table"

  match="dscp 0x3f"
  getmatch="from $SRC_IP iif $DEV tos 0xfc"
  getnomatch="from $SRC_IP iif $DEV tos 0xf4"
  fib_rule4_test_match_n_redirect "$match" "$getmatch" \
   "$getnomatch" "iif dscp redirect to table" \
   "iif dscp no redirect to table"
 fi

 ip rule help 2>&1 | grep -q "DSCP\[/MASK\]"
 if [ $? -eq 0 ]; then
  match="dscp 0x0f/0x0f"
  tosmatch=$(printf 0x"%x" $((0x1f << 2)))
  tosnomatch=$(printf 0x"%x" $((0x1e << 2)))
  getmatch="tos $tosmatch"
  getnomatch="tos $tosnomatch"
  fib_rule4_test_match_n_redirect "$match" "$getmatch" \
   "$getnomatch" "dscp masked redirect to table" \
   "dscp masked no redirect to table"

  match="dscp 0x0f/0x0f"
  getmatch="from $SRC_IP iif $DEV tos $tosmatch"
  getnomatch="from $SRC_IP iif $DEV tos $tosnomatch"
  fib_rule4_test_match_n_redirect "$match" "$getmatch" \
   "$getnomatch" "iif dscp masked redirect to table" \
   "iif dscp masked no redirect to table"
 fi

 $IP link show dev $DEV | grep -q vrf0
 if [ $? -eq 0 ]; then
  match="oif vrf0"
  getmatch="oif $DEV"
  getnomatch="oif lo"
  fib_rule4_test_match_n_redirect "$match" "$getmatch" \
   "$getnomatch" "VRF oif redirect to table" \
   "VRF oif no redirect to table"

  match="from $SRC_IP iif vrf0"
  getmatch="from $SRC_IP iif $DEV"
  getnomatch="from $SRC_IP iif lo"
  fib_rule4_test_match_n_redirect "$match" "$getmatch" \
   "$getnomatch" "VRF iif redirect to table" \
   "VRF iif no redirect to table"
 fi
}

fib_rule4_vrf_test()
{
 setup_vrf
 fib_rule4_test "- with VRF"
 cleanup_vrf
}

# Verify that the IP_TOS option of UDPv4 and TCPv4 sockets is properly taken
into account when connecting the socket and when sending packets.
fib_rule4_connect_test()
{
 local dsfield

 echo
 echo "IPv4 FIB rule connect tests"

 setup_peer
 $IP -4 rule add dsfield 0x04 table $RTABLE_PEER

 # Combine the base DS Field value (0x04) with all possible ECN values
 # (Not-ECT: 0, ECT(1): 1, ECT(0): 2, CE: 3).
 # The ECN bits shouldn't influence the result of the test.
 for dsfield in 0x04 0x05 0x06 0x07; do
  nettest -q -B -t 5 -N $testns -O $peerns -D -U -Q "${dsfield}" \
   -l 198.51.100.11 -r 198.51.100.11
  log_test $? 0 "rule4 dsfield udp connect (dsfield ${dsfield})"

  nettest -q -B -t 5 -N $testns -O $peerns -Q "${dsfield}" \
   -l 198.51.100.11 -r 198.51.100.11
  log_test $? 0 "rule4 dsfield tcp connect (dsfield ${dsfield})"
 done

 # Check that UDP and TCP connections fail when using a DS Field that
 # does not match the previously configured FIB rule.
 nettest -q -B -t 5 -N $testns -O $peerns -D -U -Q 0x20 \
  -l 198.51.100.11 -r 198.51.100.11
 log_test $? 1 "rule4 dsfield udp no connect (dsfield 0x20)"

 nettest -q -B -t 5 -N $testns -O $peerns -Q 0x20 \
  -l 198.51.100.11 -r 198.51.100.11
 log_test $? 1 "rule4 dsfield tcp no connect (dsfield 0x20)"

 $IP -4 rule del dsfield 0x04 table $RTABLE_PEER

 ip rule help 2>&1 | grep -q dscp
 if [ $? -ne 0 ]; then
  echo "SKIP: iproute2 iprule too old, missing dscp match"
  cleanup_peer
  return
 fi

 $IP -4 rule add dscp 0x3f table $RTABLE_PEER

 nettest -q -B -t 5 -N $testns -O $peerns -D -U -Q 0xfc \
  -l 198.51.100.11 -r 198.51.100.11
 log_test $? 0 "rule4 dscp udp connect"

 nettest -q -B -t 5 -N $testns -O $peerns -Q 0xfc \
  -l 198.51.100.11 -r 198.51.100.11
 log_test $? 0 "rule4 dscp tcp connect"

 nettest -q -B -t 5 -N $testns -O $peerns -D -U -Q 0xf4 \
  -l 198.51.100.11 -r 198.51.100.11
 log_test $? 1 "rule4 dscp udp no connect"

 nettest -q -B -t 5 -N $testns -O $peerns -Q 0xf4 \
  -l 198.51.100.11 -r 198.51.100.11
 log_test $? 1 "rule4 dscp tcp no connect"

 $IP -4 rule del dscp 0x3f table $RTABLE_PEER

 cleanup_peer
}
################################################################################
usage

usage()
{
 cat <<EOF
usage: ${0##*/} OPTS

        -t <test>   Test(s) to run (default: all)
                    (options: $TESTS)
EOF
}

################################################################################
# main

while getopts ":t:h" opt; do
 case $opt in
  t) TESTS=$OPTARG;;
  h) usageexit 0;;
  *) usageexit 1;;
 esac
done

if [ "$(id -u)" -ne 0 ];then
 echo "SKIP: Need root privileges"
 exit $ksft_skip
fi

if [ ! -x "$(command -v ip)" ]; then
 echo "SKIP: Could not run test without ip tool"
 exit $ksft_skip
fi

check_gen_prog "nettest"

start clean
cleanup &> /dev/null
setup
for t in $TESTS
do
 case $t in
 fib_rule6_test|fib_rule6)  fib_rule6_test;;
 fib_rule4_test|fib_rule4)  fib_rule4_test;;
 fib_rule6_connect_test|fib_rule6_connect) fib_rule6_connect_test;;
 fib_rule4_connect_test|fib_rule4_connect) fib_rule4_connect_test;;
 fib_rule6_vrf_test|fib_rule6_vrf) fib_rule6_vrf_test;;
 fib_rule4_vrf_test|fib_rule4_vrf) fib_rule4_vrf_test;;

 help) echo "Test names: $TESTS"exit 0;;

 esac
done
cleanup

if [ "$TESTS" != "none" ]; then
 printf "\nTests passed: %3d\n" ${nsuccess}
 printf "Tests failed: %3d\n"   ${nfail}
fi

exit $ret

Messung V0.5
C=100 H=90 G=95

¤ Dauer der Verarbeitung: 0.24 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.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge