0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041 ksft_skip=4
0042
0043 VERBOSE=0
0044
0045 NSA_DEV=eth1
0046 NSA_DEV2=eth2
0047 NSB_DEV=eth1
0048 NSC_DEV=eth2
0049 VRF=red
0050 VRF_TABLE=1101
0051
0052
0053 NSA_IP=172.16.1.1
0054 NSB_IP=172.16.1.2
0055 VRF_IP=172.16.3.1
0056 NS_NET=172.16.1.0/24
0057
0058
0059 NSA_IP6=2001:db8:1::1
0060 NSB_IP6=2001:db8:1::2
0061 VRF_IP6=2001:db8:3::1
0062 NS_NET6=2001:db8:1::/120
0063
0064 NSA_LO_IP=172.16.2.1
0065 NSB_LO_IP=172.16.2.2
0066 NSA_LO_IP6=2001:db8:2::1
0067 NSB_LO_IP6=2001:db8:2::2
0068
0069
0070 NL_IP=172.17.1.1
0071 NL_IP6=2001:db8:4::1
0072
0073
0074 MCAST_IP=224.0.0.1
0075 BCAST_IP=255.255.255.255
0076
0077 MD5_PW=abc123
0078 MD5_WRONG_PW=abc1234
0079
0080 MCAST=ff02::1
0081
0082 NSA_LINKIP6=
0083 NSB_LINKIP6=
0084
0085 NSA=ns-A
0086 NSB=ns-B
0087 NSC=ns-C
0088
0089 NSA_CMD="ip netns exec ${NSA}"
0090 NSB_CMD="ip netns exec ${NSB}"
0091 NSC_CMD="ip netns exec ${NSC}"
0092
0093 which ping6 > /dev/null 2>&1 && ping6=$(which ping6) || ping6=$(which ping)
0094
0095
0096
0097
0098 log_test()
0099 {
0100 local rc=$1
0101 local expected=$2
0102 local msg="$3"
0103
0104 [ "${VERBOSE}" = "1" ] && echo
0105
0106 if [ ${rc} -eq ${expected} ]; then
0107 nsuccess=$((nsuccess+1))
0108 printf "TEST: %-70s [ OK ]\n" "${msg}"
0109 else
0110 nfail=$((nfail+1))
0111 printf "TEST: %-70s [FAIL]\n" "${msg}"
0112 if [ "${PAUSE_ON_FAIL}" = "yes" ]; then
0113 echo
0114 echo "hit enter to continue, 'q' to quit"
0115 read a
0116 [ "$a" = "q" ] && exit 1
0117 fi
0118 fi
0119
0120 if [ "${PAUSE}" = "yes" ]; then
0121 echo
0122 echo "hit enter to continue, 'q' to quit"
0123 read a
0124 [ "$a" = "q" ] && exit 1
0125 fi
0126
0127 kill_procs
0128 }
0129
0130 log_test_addr()
0131 {
0132 local addr=$1
0133 local rc=$2
0134 local expected=$3
0135 local msg="$4"
0136 local astr
0137
0138 astr=$(addr2str ${addr})
0139 log_test $rc $expected "$msg - ${astr}"
0140 }
0141
0142 log_section()
0143 {
0144 echo
0145 echo "###########################################################################"
0146 echo "$*"
0147 echo "###########################################################################"
0148 echo
0149 }
0150
0151 log_subsection()
0152 {
0153 echo
0154 echo "#################################################################"
0155 echo "$*"
0156 echo
0157 }
0158
0159 log_start()
0160 {
0161
0162 kill_procs
0163
0164 if [ "${VERBOSE}" = "1" ]; then
0165 echo
0166 echo "#######################################################"
0167 fi
0168 }
0169
0170 log_debug()
0171 {
0172 if [ "${VERBOSE}" = "1" ]; then
0173 echo
0174 echo "$*"
0175 echo
0176 fi
0177 }
0178
0179 show_hint()
0180 {
0181 if [ "${VERBOSE}" = "1" ]; then
0182 echo "HINT: $*"
0183 echo
0184 fi
0185 }
0186
0187 kill_procs()
0188 {
0189 killall nettest ping ping6 >/dev/null 2>&1
0190 sleep 1
0191 }
0192
0193 do_run_cmd()
0194 {
0195 local cmd="$*"
0196 local out
0197
0198 if [ "$VERBOSE" = "1" ]; then
0199 echo "COMMAND: ${cmd}"
0200 fi
0201
0202 out=$($cmd 2>&1)
0203 rc=$?
0204 if [ "$VERBOSE" = "1" -a -n "$out" ]; then
0205 echo "$out"
0206 fi
0207
0208 return $rc
0209 }
0210
0211 run_cmd()
0212 {
0213 do_run_cmd ${NSA_CMD} $*
0214 }
0215
0216 run_cmd_nsb()
0217 {
0218 do_run_cmd ${NSB_CMD} $*
0219 }
0220
0221 run_cmd_nsc()
0222 {
0223 do_run_cmd ${NSC_CMD} $*
0224 }
0225
0226 setup_cmd()
0227 {
0228 local cmd="$*"
0229 local rc
0230
0231 run_cmd ${cmd}
0232 rc=$?
0233 if [ $rc -ne 0 ]; then
0234
0235 if [ "$VERBOSE" = "0" ]; then
0236 echo "setup command: $cmd"
0237 fi
0238 echo "failed. stopping tests"
0239 if [ "${PAUSE_ON_FAIL}" = "yes" ]; then
0240 echo
0241 echo "hit enter to continue"
0242 read a
0243 fi
0244 exit $rc
0245 fi
0246 }
0247
0248 setup_cmd_nsb()
0249 {
0250 local cmd="$*"
0251 local rc
0252
0253 run_cmd_nsb ${cmd}
0254 rc=$?
0255 if [ $rc -ne 0 ]; then
0256
0257 if [ "$VERBOSE" = "0" ]; then
0258 echo "setup command: $cmd"
0259 fi
0260 echo "failed. stopping tests"
0261 if [ "${PAUSE_ON_FAIL}" = "yes" ]; then
0262 echo
0263 echo "hit enter to continue"
0264 read a
0265 fi
0266 exit $rc
0267 fi
0268 }
0269
0270 setup_cmd_nsc()
0271 {
0272 local cmd="$*"
0273 local rc
0274
0275 run_cmd_nsc ${cmd}
0276 rc=$?
0277 if [ $rc -ne 0 ]; then
0278
0279 if [ "$VERBOSE" = "0" ]; then
0280 echo "setup command: $cmd"
0281 fi
0282 echo "failed. stopping tests"
0283 if [ "${PAUSE_ON_FAIL}" = "yes" ]; then
0284 echo
0285 echo "hit enter to continue"
0286 read a
0287 fi
0288 exit $rc
0289 fi
0290 }
0291
0292
0293 set_sysctl()
0294 {
0295 echo "SYSCTL: $*"
0296 echo
0297 run_cmd sysctl -q -w $*
0298 }
0299
0300
0301 get_sysctl()
0302 {
0303 ${NSA_CMD} sysctl -n $*
0304 }
0305
0306
0307
0308
0309 addr2str()
0310 {
0311 case "$1" in
0312 127.0.0.1) echo "loopback";;
0313 ::1) echo "IPv6 loopback";;
0314
0315 ${BCAST_IP}) echo "broadcast";;
0316 ${MCAST_IP}) echo "multicast";;
0317
0318 ${NSA_IP}) echo "ns-A IP";;
0319 ${NSA_IP6}) echo "ns-A IPv6";;
0320 ${NSA_LO_IP}) echo "ns-A loopback IP";;
0321 ${NSA_LO_IP6}) echo "ns-A loopback IPv6";;
0322 ${NSA_LINKIP6}|${NSA_LINKIP6}%*) echo "ns-A IPv6 LLA";;
0323
0324 ${NSB_IP}) echo "ns-B IP";;
0325 ${NSB_IP6}) echo "ns-B IPv6";;
0326 ${NSB_LO_IP}) echo "ns-B loopback IP";;
0327 ${NSB_LO_IP6}) echo "ns-B loopback IPv6";;
0328 ${NSB_LINKIP6}|${NSB_LINKIP6}%*) echo "ns-B IPv6 LLA";;
0329
0330 ${NL_IP}) echo "nonlocal IP";;
0331 ${NL_IP6}) echo "nonlocal IPv6";;
0332
0333 ${VRF_IP}) echo "VRF IP";;
0334 ${VRF_IP6}) echo "VRF IPv6";;
0335
0336 ${MCAST}%*) echo "multicast IP";;
0337
0338 *) echo "unknown";;
0339 esac
0340 }
0341
0342 get_linklocal()
0343 {
0344 local ns=$1
0345 local dev=$2
0346 local addr
0347
0348 addr=$(ip -netns ${ns} -6 -br addr show dev ${dev} | \
0349 awk '{
0350 for (i = 3; i <= NF; ++i) {
0351 if ($i ~ /^fe80/)
0352 print $i
0353 }
0354 }'
0355 )
0356 addr=${addr/\/*}
0357
0358 [ -z "$addr" ] && return 1
0359
0360 echo $addr
0361
0362 return 0
0363 }
0364
0365
0366
0367
0368 create_vrf()
0369 {
0370 local ns=$1
0371 local vrf=$2
0372 local table=$3
0373 local addr=$4
0374 local addr6=$5
0375
0376 ip -netns ${ns} link add ${vrf} type vrf table ${table}
0377 ip -netns ${ns} link set ${vrf} up
0378 ip -netns ${ns} route add vrf ${vrf} unreachable default metric 8192
0379 ip -netns ${ns} -6 route add vrf ${vrf} unreachable default metric 8192
0380
0381 ip -netns ${ns} addr add 127.0.0.1/8 dev ${vrf}
0382 ip -netns ${ns} -6 addr add ::1 dev ${vrf} nodad
0383 if [ "${addr}" != "-" ]; then
0384 ip -netns ${ns} addr add dev ${vrf} ${addr}
0385 fi
0386 if [ "${addr6}" != "-" ]; then
0387 ip -netns ${ns} -6 addr add dev ${vrf} ${addr6}
0388 fi
0389
0390 ip -netns ${ns} ru del pref 0
0391 ip -netns ${ns} ru add pref 32765 from all lookup local
0392 ip -netns ${ns} -6 ru del pref 0
0393 ip -netns ${ns} -6 ru add pref 32765 from all lookup local
0394 }
0395
0396 create_ns()
0397 {
0398 local ns=$1
0399 local addr=$2
0400 local addr6=$3
0401
0402 ip netns add ${ns}
0403
0404 ip -netns ${ns} link set lo up
0405 if [ "${addr}" != "-" ]; then
0406 ip -netns ${ns} addr add dev lo ${addr}
0407 fi
0408 if [ "${addr6}" != "-" ]; then
0409 ip -netns ${ns} -6 addr add dev lo ${addr6}
0410 fi
0411
0412 ip -netns ${ns} ro add unreachable default metric 8192
0413 ip -netns ${ns} -6 ro add unreachable default metric 8192
0414
0415 ip netns exec ${ns} sysctl -qw net.ipv4.ip_forward=1
0416 ip netns exec ${ns} sysctl -qw net.ipv6.conf.all.keep_addr_on_down=1
0417 ip netns exec ${ns} sysctl -qw net.ipv6.conf.all.forwarding=1
0418 ip netns exec ${ns} sysctl -qw net.ipv6.conf.default.forwarding=1
0419 }
0420
0421
0422 connect_ns()
0423 {
0424 local ns1=$1
0425 local ns1_dev=$2
0426 local ns1_addr=$3
0427 local ns1_addr6=$4
0428 local ns2=$5
0429 local ns2_dev=$6
0430 local ns2_addr=$7
0431 local ns2_addr6=$8
0432
0433 ip -netns ${ns1} li add ${ns1_dev} type veth peer name tmp
0434 ip -netns ${ns1} li set ${ns1_dev} up
0435 ip -netns ${ns1} li set tmp netns ${ns2} name ${ns2_dev}
0436 ip -netns ${ns2} li set ${ns2_dev} up
0437
0438 if [ "${ns1_addr}" != "-" ]; then
0439 ip -netns ${ns1} addr add dev ${ns1_dev} ${ns1_addr}
0440 ip -netns ${ns2} addr add dev ${ns2_dev} ${ns2_addr}
0441 fi
0442
0443 if [ "${ns1_addr6}" != "-" ]; then
0444 ip -netns ${ns1} addr add dev ${ns1_dev} ${ns1_addr6}
0445 ip -netns ${ns2} addr add dev ${ns2_dev} ${ns2_addr6}
0446 fi
0447 }
0448
0449 cleanup()
0450 {
0451
0452 ip netns | grep -q ${NSA}
0453 if [ $? -eq 0 ]; then
0454 ip -netns ${NSA} link delete ${VRF}
0455 ip -netns ${NSA} ro flush table ${VRF_TABLE}
0456
0457 ip -netns ${NSA} addr flush dev ${NSA_DEV}
0458 ip -netns ${NSA} -6 addr flush dev ${NSA_DEV}
0459 ip -netns ${NSA} link set dev ${NSA_DEV} down
0460 ip -netns ${NSA} link del dev ${NSA_DEV}
0461
0462 ip netns pids ${NSA} | xargs kill 2>/dev/null
0463 ip netns del ${NSA}
0464 fi
0465
0466 ip netns pids ${NSB} | xargs kill 2>/dev/null
0467 ip netns del ${NSB}
0468 ip netns pids ${NSC} | xargs kill 2>/dev/null
0469 ip netns del ${NSC} >/dev/null 2>&1
0470 }
0471
0472 cleanup_vrf_dup()
0473 {
0474 ip link del ${NSA_DEV2} >/dev/null 2>&1
0475 ip netns pids ${NSC} | xargs kill 2>/dev/null
0476 ip netns del ${NSC} >/dev/null 2>&1
0477 }
0478
0479 setup_vrf_dup()
0480 {
0481
0482
0483 create_ns ${NSC} "-" "-"
0484 connect_ns ${NSA} ${NSA_DEV2} ${NSA_IP}/24 ${NSA_IP6}/64 \
0485 ${NSC} ${NSC_DEV} ${NSB_IP}/24 ${NSB_IP6}/64
0486 }
0487
0488 setup()
0489 {
0490 local with_vrf=${1}
0491
0492
0493 kill_procs
0494 cleanup 2>/dev/null
0495
0496 log_debug "Configuring network namespaces"
0497 set -e
0498
0499 create_ns ${NSA} ${NSA_LO_IP}/32 ${NSA_LO_IP6}/128
0500 create_ns ${NSB} ${NSB_LO_IP}/32 ${NSB_LO_IP6}/128
0501 connect_ns ${NSA} ${NSA_DEV} ${NSA_IP}/24 ${NSA_IP6}/64 \
0502 ${NSB} ${NSB_DEV} ${NSB_IP}/24 ${NSB_IP6}/64
0503
0504 NSA_LINKIP6=$(get_linklocal ${NSA} ${NSA_DEV})
0505 NSB_LINKIP6=$(get_linklocal ${NSB} ${NSB_DEV})
0506
0507
0508 if [ "${with_vrf}" = "yes" ]; then
0509 create_vrf ${NSA} ${VRF} ${VRF_TABLE} ${VRF_IP} ${VRF_IP6}
0510
0511 ip -netns ${NSA} link set dev ${NSA_DEV} vrf ${VRF}
0512 ip -netns ${NSA} ro add vrf ${VRF} ${NSB_LO_IP}/32 via ${NSB_IP} dev ${NSA_DEV}
0513 ip -netns ${NSA} -6 ro add vrf ${VRF} ${NSB_LO_IP6}/128 via ${NSB_IP6} dev ${NSA_DEV}
0514
0515 ip -netns ${NSB} ro add ${VRF_IP}/32 via ${NSA_IP} dev ${NSB_DEV}
0516 ip -netns ${NSB} -6 ro add ${VRF_IP6}/128 via ${NSA_IP6} dev ${NSB_DEV}
0517 else
0518 ip -netns ${NSA} ro add ${NSB_LO_IP}/32 via ${NSB_IP} dev ${NSA_DEV}
0519 ip -netns ${NSA} ro add ${NSB_LO_IP6}/128 via ${NSB_IP6} dev ${NSA_DEV}
0520 fi
0521
0522
0523
0524 ip -netns ${NSB} ro add ${NSA_LO_IP}/32 via ${NSA_IP} dev ${NSB_DEV}
0525 ip -netns ${NSB} ro add ${NSA_LO_IP6}/128 via ${NSA_IP6} dev ${NSB_DEV}
0526
0527 set +e
0528
0529 sleep 1
0530 }
0531
0532 setup_lla_only()
0533 {
0534
0535 kill_procs
0536 cleanup 2>/dev/null
0537
0538 log_debug "Configuring network namespaces"
0539 set -e
0540
0541 create_ns ${NSA} "-" "-"
0542 create_ns ${NSB} "-" "-"
0543 create_ns ${NSC} "-" "-"
0544 connect_ns ${NSA} ${NSA_DEV} "-" "-" \
0545 ${NSB} ${NSB_DEV} "-" "-"
0546 connect_ns ${NSA} ${NSA_DEV2} "-" "-" \
0547 ${NSC} ${NSC_DEV} "-" "-"
0548
0549 NSA_LINKIP6=$(get_linklocal ${NSA} ${NSA_DEV})
0550 NSB_LINKIP6=$(get_linklocal ${NSB} ${NSB_DEV})
0551 NSC_LINKIP6=$(get_linklocal ${NSC} ${NSC_DEV})
0552
0553 create_vrf ${NSA} ${VRF} ${VRF_TABLE} "-" "-"
0554 ip -netns ${NSA} link set dev ${NSA_DEV} vrf ${VRF}
0555 ip -netns ${NSA} link set dev ${NSA_DEV2} vrf ${VRF}
0556
0557 set +e
0558
0559 sleep 1
0560 }
0561
0562
0563
0564
0565 ipv4_ping_novrf()
0566 {
0567 local a
0568
0569
0570
0571
0572 for a in ${NSB_IP} ${NSB_LO_IP}
0573 do
0574 log_start
0575 run_cmd ping -c1 -w1 ${a}
0576 log_test_addr ${a} $? 0 "ping out"
0577
0578 log_start
0579 run_cmd ping -c1 -w1 -I ${NSA_DEV} ${a}
0580 log_test_addr ${a} $? 0 "ping out, device bind"
0581
0582 log_start
0583 run_cmd ping -c1 -w1 -I ${NSA_LO_IP} ${a}
0584 log_test_addr ${a} $? 0 "ping out, address bind"
0585 done
0586
0587
0588
0589
0590 for a in ${NSA_IP} ${NSA_LO_IP}
0591 do
0592 log_start
0593 run_cmd_nsb ping -c1 -w1 ${a}
0594 log_test_addr ${a} $? 0 "ping in"
0595 done
0596
0597
0598
0599
0600 for a in ${NSA_IP} ${NSA_LO_IP} 127.0.0.1
0601 do
0602 log_start
0603 run_cmd ping -c1 -w1 ${a}
0604 log_test_addr ${a} $? 0 "ping local"
0605 done
0606
0607
0608
0609
0610
0611 a=${NSA_IP}
0612 log_start
0613 run_cmd ping -c1 -w1 -I ${NSA_DEV} ${a}
0614 log_test_addr ${a} $? 0 "ping local, device bind"
0615
0616
0617
0618
0619 for a in ${NSA_LO_IP} 127.0.0.1
0620 do
0621 log_start
0622 show_hint "Fails since address on loopback device is out of device scope"
0623 run_cmd ping -c1 -w1 -I ${NSA_DEV} ${a}
0624 log_test_addr ${a} $? 1 "ping local, device bind"
0625 done
0626
0627
0628
0629
0630 log_start
0631 setup_cmd ip rule add pref 32765 from all lookup local
0632 setup_cmd ip rule del pref 0 from all lookup local
0633 setup_cmd ip rule add pref 50 to ${NSB_LO_IP} prohibit
0634 setup_cmd ip rule add pref 51 from ${NSB_IP} prohibit
0635
0636 a=${NSB_LO_IP}
0637 run_cmd ping -c1 -w1 ${a}
0638 log_test_addr ${a} $? 2 "ping out, blocked by rule"
0639
0640
0641
0642
0643
0644
0645 a=${NSA_LO_IP}
0646 log_start
0647 show_hint "Response generates ICMP (or arp request is ignored) due to ip rule"
0648 run_cmd_nsb ping -c1 -w1 ${a}
0649 log_test_addr ${a} $? 1 "ping in, blocked by rule"
0650
0651 [ "$VERBOSE" = "1" ] && echo
0652 setup_cmd ip rule del pref 32765 from all lookup local
0653 setup_cmd ip rule add pref 0 from all lookup local
0654 setup_cmd ip rule del pref 50 to ${NSB_LO_IP} prohibit
0655 setup_cmd ip rule del pref 51 from ${NSB_IP} prohibit
0656
0657
0658
0659
0660 log_start
0661 setup_cmd ip route replace unreachable ${NSB_LO_IP}
0662 setup_cmd ip route replace unreachable ${NSB_IP}
0663
0664 a=${NSB_LO_IP}
0665 run_cmd ping -c1 -w1 ${a}
0666 log_test_addr ${a} $? 2 "ping out, blocked by route"
0667
0668
0669
0670
0671
0672
0673 a=${NSA_LO_IP}
0674 log_start
0675 show_hint "Response is dropped (or arp request is ignored) due to ip route"
0676 run_cmd_nsb ping -c1 -w1 ${a}
0677 log_test_addr ${a} $? 1 "ping in, blocked by route"
0678
0679
0680
0681
0682 log_start
0683 setup_cmd ip ro del ${NSB_LO_IP}
0684
0685 a=${NSB_LO_IP}
0686 run_cmd ping -c1 -w1 ${a}
0687 log_test_addr ${a} $? 2 "ping out, unreachable default route"
0688
0689
0690
0691
0692
0693 }
0694
0695 ipv4_ping_vrf()
0696 {
0697 local a
0698
0699
0700 set_sysctl net.ipv4.raw_l3mdev_accept=1 2>/dev/null
0701
0702
0703
0704
0705 for a in ${NSB_IP} ${NSB_LO_IP}
0706 do
0707 log_start
0708 run_cmd ping -c1 -w1 -I ${VRF} ${a}
0709 log_test_addr ${a} $? 0 "ping out, VRF bind"
0710
0711 log_start
0712 run_cmd ping -c1 -w1 -I ${NSA_DEV} ${a}
0713 log_test_addr ${a} $? 0 "ping out, device bind"
0714
0715 log_start
0716 run_cmd ip vrf exec ${VRF} ping -c1 -w1 -I ${NSA_IP} ${a}
0717 log_test_addr ${a} $? 0 "ping out, vrf device + dev address bind"
0718
0719 log_start
0720 run_cmd ip vrf exec ${VRF} ping -c1 -w1 -I ${VRF_IP} ${a}
0721 log_test_addr ${a} $? 0 "ping out, vrf device + vrf address bind"
0722 done
0723
0724
0725
0726
0727 for a in ${NSA_IP} ${VRF_IP}
0728 do
0729 log_start
0730 run_cmd_nsb ping -c1 -w1 ${a}
0731 log_test_addr ${a} $? 0 "ping in"
0732 done
0733
0734
0735
0736
0737 for a in ${NSA_IP} ${VRF_IP} 127.0.0.1
0738 do
0739 log_start
0740 show_hint "Source address should be ${a}"
0741 run_cmd ping -c1 -w1 -I ${VRF} ${a}
0742 log_test_addr ${a} $? 0 "ping local, VRF bind"
0743 done
0744
0745
0746
0747
0748
0749 a=${NSA_IP}
0750 log_start
0751 run_cmd ping -c1 -w1 -I ${NSA_DEV} ${a}
0752 log_test_addr ${a} $? 0 "ping local, device bind"
0753
0754
0755 for a in ${VRF_IP} 127.0.0.1
0756 do
0757 log_start
0758 show_hint "Fails since address on vrf device is out of device scope"
0759 run_cmd ping -c1 -w1 -I ${NSA_DEV} ${a}
0760 log_test_addr ${a} $? 2 "ping local, device bind"
0761 done
0762
0763
0764
0765
0766 log_start
0767 setup_cmd ip rule add pref 50 to ${NSB_LO_IP} prohibit
0768 setup_cmd ip rule add pref 51 from ${NSB_IP} prohibit
0769
0770 a=${NSB_LO_IP}
0771 run_cmd ping -c1 -w1 -I ${VRF} ${a}
0772 log_test_addr ${a} $? 2 "ping out, vrf bind, blocked by rule"
0773
0774 log_start
0775 run_cmd ping -c1 -w1 -I ${NSA_DEV} ${a}
0776 log_test_addr ${a} $? 2 "ping out, device bind, blocked by rule"
0777
0778 a=${NSA_LO_IP}
0779 log_start
0780 show_hint "Response lost due to ip rule"
0781 run_cmd_nsb ping -c1 -w1 ${a}
0782 log_test_addr ${a} $? 1 "ping in, blocked by rule"
0783
0784 [ "$VERBOSE" = "1" ] && echo
0785 setup_cmd ip rule del pref 50 to ${NSB_LO_IP} prohibit
0786 setup_cmd ip rule del pref 51 from ${NSB_IP} prohibit
0787
0788
0789
0790
0791 log_start
0792 setup_cmd ip ro del vrf ${VRF} ${NSB_LO_IP}
0793
0794 a=${NSB_LO_IP}
0795 run_cmd ping -c1 -w1 -I ${VRF} ${a}
0796 log_test_addr ${a} $? 2 "ping out, vrf bind, unreachable route"
0797
0798 log_start
0799 run_cmd ping -c1 -w1 -I ${NSA_DEV} ${a}
0800 log_test_addr ${a} $? 2 "ping out, device bind, unreachable route"
0801
0802 a=${NSA_LO_IP}
0803 log_start
0804 show_hint "Response lost by unreachable route"
0805 run_cmd_nsb ping -c1 -w1 ${a}
0806 log_test_addr ${a} $? 1 "ping in, unreachable route"
0807 }
0808
0809 ipv4_ping()
0810 {
0811 log_section "IPv4 ping"
0812
0813 log_subsection "No VRF"
0814 setup
0815 set_sysctl net.ipv4.raw_l3mdev_accept=0 2>/dev/null
0816 ipv4_ping_novrf
0817 setup
0818 set_sysctl net.ipv4.raw_l3mdev_accept=1 2>/dev/null
0819 ipv4_ping_novrf
0820 setup
0821 set_sysctl net.ipv4.ping_group_range='0 2147483647' 2>/dev/null
0822 ipv4_ping_novrf
0823
0824 log_subsection "With VRF"
0825 setup "yes"
0826 ipv4_ping_vrf
0827 setup "yes"
0828 set_sysctl net.ipv4.ping_group_range='0 2147483647' 2>/dev/null
0829 ipv4_ping_vrf
0830 }
0831
0832
0833
0834
0835
0836
0837
0838 ipv4_tcp_md5_novrf()
0839 {
0840
0841
0842
0843
0844
0845 log_start
0846 run_cmd nettest -s -M ${MD5_PW} -m ${NSB_IP} &
0847 sleep 1
0848 run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW}
0849 log_test $? 0 "MD5: Single address config"
0850
0851
0852 log_start
0853 show_hint "Should timeout due to MD5 mismatch"
0854 run_cmd nettest -s &
0855 sleep 1
0856 run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW}
0857 log_test $? 2 "MD5: Server no config, client uses password"
0858
0859
0860 log_start
0861 show_hint "Should timeout since client uses wrong password"
0862 run_cmd nettest -s -M ${MD5_PW} -m ${NSB_IP} &
0863 sleep 1
0864 run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_WRONG_PW}
0865 log_test $? 2 "MD5: Client uses wrong password"
0866
0867
0868 log_start
0869 show_hint "Should timeout due to MD5 mismatch"
0870 run_cmd nettest -s -M ${MD5_PW} -m ${NSB_LO_IP} &
0871 sleep 1
0872 run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW}
0873 log_test $? 2 "MD5: Client address does not match address configured with password"
0874
0875
0876
0877
0878
0879
0880 log_start
0881 run_cmd nettest -s -M ${MD5_PW} -m ${NS_NET} &
0882 sleep 1
0883 run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW}
0884 log_test $? 0 "MD5: Prefix config"
0885
0886
0887 log_start
0888 show_hint "Should timeout since client uses wrong password"
0889 run_cmd nettest -s -M ${MD5_PW} -m ${NS_NET} &
0890 sleep 1
0891 run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_WRONG_PW}
0892 log_test $? 2 "MD5: Prefix config, client uses wrong password"
0893
0894
0895 log_start
0896 show_hint "Should timeout due to MD5 mismatch"
0897 run_cmd nettest -s -M ${MD5_PW} -m ${NS_NET} &
0898 sleep 1
0899 run_cmd_nsb nettest -c ${NSB_LO_IP} -r ${NSA_IP} -X ${MD5_PW}
0900 log_test $? 2 "MD5: Prefix config, client address not in configured prefix"
0901 }
0902
0903
0904
0905
0906 ipv4_tcp_md5()
0907 {
0908
0909
0910
0911
0912
0913 log_start
0914 run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP} &
0915 sleep 1
0916 run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW}
0917 log_test $? 0 "MD5: VRF: Single address config"
0918
0919
0920 log_start
0921 show_hint "Should timeout since server does not have MD5 auth"
0922 run_cmd nettest -s -I ${VRF} &
0923 sleep 1
0924 run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW}
0925 log_test $? 2 "MD5: VRF: Server no config, client uses password"
0926
0927
0928 log_start
0929 show_hint "Should timeout since client uses wrong password"
0930 run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP} &
0931 sleep 1
0932 run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_WRONG_PW}
0933 log_test $? 2 "MD5: VRF: Client uses wrong password"
0934
0935
0936 log_start
0937 show_hint "Should timeout since server config differs from client"
0938 run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NSB_LO_IP} &
0939 sleep 1
0940 run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW}
0941 log_test $? 2 "MD5: VRF: Client address does not match address configured with password"
0942
0943
0944
0945
0946
0947
0948 log_start
0949 run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET} &
0950 sleep 1
0951 run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW}
0952 log_test $? 0 "MD5: VRF: Prefix config"
0953
0954
0955 log_start
0956 show_hint "Should timeout since client uses wrong password"
0957 run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET} &
0958 sleep 1
0959 run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_WRONG_PW}
0960 log_test $? 2 "MD5: VRF: Prefix config, client uses wrong password"
0961
0962
0963 log_start
0964 show_hint "Should timeout since client address is outside of prefix"
0965 run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET} &
0966 sleep 1
0967 run_cmd_nsb nettest -c ${NSB_LO_IP} -r ${NSA_IP} -X ${MD5_PW}
0968 log_test $? 2 "MD5: VRF: Prefix config, client address not in configured prefix"
0969
0970
0971
0972
0973
0974 log_start
0975 run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP} &
0976 run_cmd nettest -s -M ${MD5_WRONG_PW} -m ${NSB_IP} &
0977 sleep 1
0978 run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW}
0979 log_test $? 0 "MD5: VRF: Single address config in default VRF and VRF, conn in VRF"
0980
0981 log_start
0982 run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP} &
0983 run_cmd nettest -s -M ${MD5_WRONG_PW} -m ${NSB_IP} &
0984 sleep 1
0985 run_cmd_nsc nettest -r ${NSA_IP} -X ${MD5_WRONG_PW}
0986 log_test $? 0 "MD5: VRF: Single address config in default VRF and VRF, conn in default VRF"
0987
0988 log_start
0989 show_hint "Should timeout since client in default VRF uses VRF password"
0990 run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP} &
0991 run_cmd nettest -s -M ${MD5_WRONG_PW} -m ${NSB_IP} &
0992 sleep 1
0993 run_cmd_nsc nettest -r ${NSA_IP} -X ${MD5_PW}
0994 log_test $? 2 "MD5: VRF: Single address config in default VRF and VRF, conn in default VRF with VRF pw"
0995
0996 log_start
0997 show_hint "Should timeout since client in VRF uses default VRF password"
0998 run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP} &
0999 run_cmd nettest -s -M ${MD5_WRONG_PW} -m ${NSB_IP} &
1000 sleep 1
1001 run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_WRONG_PW}
1002 log_test $? 2 "MD5: VRF: Single address config in default VRF and VRF, conn in VRF with default VRF pw"
1003
1004 log_start
1005 run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET} &
1006 run_cmd nettest -s -M ${MD5_WRONG_PW} -m ${NS_NET} &
1007 sleep 1
1008 run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW}
1009 log_test $? 0 "MD5: VRF: Prefix config in default VRF and VRF, conn in VRF"
1010
1011 log_start
1012 run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET} &
1013 run_cmd nettest -s -M ${MD5_WRONG_PW} -m ${NS_NET} &
1014 sleep 1
1015 run_cmd_nsc nettest -r ${NSA_IP} -X ${MD5_WRONG_PW}
1016 log_test $? 0 "MD5: VRF: Prefix config in default VRF and VRF, conn in default VRF"
1017
1018 log_start
1019 show_hint "Should timeout since client in default VRF uses VRF password"
1020 run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET} &
1021 run_cmd nettest -s -M ${MD5_WRONG_PW} -m ${NS_NET} &
1022 sleep 1
1023 run_cmd_nsc nettest -r ${NSA_IP} -X ${MD5_PW}
1024 log_test $? 2 "MD5: VRF: Prefix config in default VRF and VRF, conn in default VRF with VRF pw"
1025
1026 log_start
1027 show_hint "Should timeout since client in VRF uses default VRF password"
1028 run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET} &
1029 run_cmd nettest -s -M ${MD5_WRONG_PW} -m ${NS_NET} &
1030 sleep 1
1031 run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_WRONG_PW}
1032 log_test $? 2 "MD5: VRF: Prefix config in default VRF and VRF, conn in VRF with default VRF pw"
1033
1034
1035
1036
1037 log_start
1038 run_cmd nettest -s -I ${NSA_DEV} -M ${MD5_PW} -m ${NSB_IP}
1039 log_test $? 1 "MD5: VRF: Device must be a VRF - single address"
1040
1041 log_start
1042 run_cmd nettest -s -I ${NSA_DEV} -M ${MD5_PW} -m ${NS_NET}
1043 log_test $? 1 "MD5: VRF: Device must be a VRF - prefix"
1044
1045 test_ipv4_md5_vrf__vrf_server__no_bind_ifindex
1046 test_ipv4_md5_vrf__global_server__bind_ifindex0
1047 }
1048
1049 test_ipv4_md5_vrf__vrf_server__no_bind_ifindex()
1050 {
1051 log_start
1052 show_hint "Simulates applications using VRF without TCP_MD5SIG_FLAG_IFINDEX"
1053 run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET} --no-bind-key-ifindex &
1054 sleep 1
1055 run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW}
1056 log_test $? 0 "MD5: VRF: VRF-bound server, unbound key accepts connection"
1057
1058 log_start
1059 show_hint "Binding both the socket and the key is not required but it works"
1060 run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET} --force-bind-key-ifindex &
1061 sleep 1
1062 run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW}
1063 log_test $? 0 "MD5: VRF: VRF-bound server, bound key accepts connection"
1064 }
1065
1066 test_ipv4_md5_vrf__global_server__bind_ifindex0()
1067 {
1068
1069 local old_tcp_l3mdev_accept
1070 old_tcp_l3mdev_accept=$(get_sysctl net.ipv4.tcp_l3mdev_accept)
1071 set_sysctl net.ipv4.tcp_l3mdev_accept=1
1072
1073 log_start
1074 run_cmd nettest -s -M ${MD5_PW} -m ${NS_NET} --force-bind-key-ifindex &
1075 sleep 1
1076 run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW}
1077 log_test $? 2 "MD5: VRF: Global server, Key bound to ifindex=0 rejects VRF connection"
1078
1079 log_start
1080 run_cmd nettest -s -M ${MD5_PW} -m ${NS_NET} --force-bind-key-ifindex &
1081 sleep 1
1082 run_cmd_nsc nettest -r ${NSA_IP} -X ${MD5_PW}
1083 log_test $? 0 "MD5: VRF: Global server, key bound to ifindex=0 accepts non-VRF connection"
1084 log_start
1085
1086 run_cmd nettest -s -M ${MD5_PW} -m ${NS_NET} --no-bind-key-ifindex &
1087 sleep 1
1088 run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW}
1089 log_test $? 0 "MD5: VRF: Global server, key not bound to ifindex accepts VRF connection"
1090
1091 log_start
1092 run_cmd nettest -s -M ${MD5_PW} -m ${NS_NET} --no-bind-key-ifindex &
1093 sleep 1
1094 run_cmd_nsc nettest -r ${NSA_IP} -X ${MD5_PW}
1095 log_test $? 0 "MD5: VRF: Global server, key not bound to ifindex accepts non-VRF connection"
1096
1097
1098 set_sysctl net.ipv4.tcp_l3mdev_accept="$old_tcp_l3mdev_accept"
1099 }
1100
1101 ipv4_tcp_novrf()
1102 {
1103 local a
1104
1105
1106
1107
1108 for a in ${NSA_IP} ${NSA_LO_IP}
1109 do
1110 log_start
1111 run_cmd nettest -s &
1112 sleep 1
1113 run_cmd_nsb nettest -r ${a}
1114 log_test_addr ${a} $? 0 "Global server"
1115 done
1116
1117 a=${NSA_IP}
1118 log_start
1119 run_cmd nettest -s -I ${NSA_DEV} &
1120 sleep 1
1121 run_cmd_nsb nettest -r ${a}
1122 log_test_addr ${a} $? 0 "Device server"
1123
1124
1125 for a in ${NSA_IP} ${NSA_LO_IP}
1126 do
1127 log_start
1128 show_hint "Should fail 'Connection refused' since there is no server"
1129 run_cmd_nsb nettest -r ${a}
1130 log_test_addr ${a} $? 1 "No server"
1131 done
1132
1133
1134
1135
1136 for a in ${NSB_IP} ${NSB_LO_IP}
1137 do
1138 log_start
1139 run_cmd_nsb nettest -s &
1140 sleep 1
1141 run_cmd nettest -r ${a} -0 ${NSA_IP}
1142 log_test_addr ${a} $? 0 "Client"
1143
1144 log_start
1145 run_cmd_nsb nettest -s &
1146 sleep 1
1147 run_cmd nettest -r ${a} -d ${NSA_DEV}
1148 log_test_addr ${a} $? 0 "Client, device bind"
1149
1150 log_start
1151 show_hint "Should fail 'Connection refused'"
1152 run_cmd nettest -r ${a}
1153 log_test_addr ${a} $? 1 "No server, unbound client"
1154
1155 log_start
1156 show_hint "Should fail 'Connection refused'"
1157 run_cmd nettest -r ${a} -d ${NSA_DEV}
1158 log_test_addr ${a} $? 1 "No server, device client"
1159 done
1160
1161
1162
1163
1164 for a in ${NSA_IP} ${NSA_LO_IP} 127.0.0.1
1165 do
1166 log_start
1167 run_cmd nettest -s &
1168 sleep 1
1169 run_cmd nettest -r ${a} -0 ${a} -1 ${a}
1170 log_test_addr ${a} $? 0 "Global server, local connection"
1171 done
1172
1173 a=${NSA_IP}
1174 log_start
1175 run_cmd nettest -s -I ${NSA_DEV} &
1176 sleep 1
1177 run_cmd nettest -r ${a} -0 ${a}
1178 log_test_addr ${a} $? 0 "Device server, unbound client, local connection"
1179
1180 for a in ${NSA_LO_IP} 127.0.0.1
1181 do
1182 log_start
1183 show_hint "Should fail 'Connection refused' since addresses on loopback are out of device scope"
1184 run_cmd nettest -s -I ${NSA_DEV} &
1185 sleep 1
1186 run_cmd nettest -r ${a}
1187 log_test_addr ${a} $? 1 "Device server, unbound client, local connection"
1188 done
1189
1190 a=${NSA_IP}
1191 log_start
1192 run_cmd nettest -s &
1193 sleep 1
1194 run_cmd nettest -r ${a} -0 ${a} -d ${NSA_DEV}
1195 log_test_addr ${a} $? 0 "Global server, device client, local connection"
1196
1197 for a in ${NSA_LO_IP} 127.0.0.1
1198 do
1199 log_start
1200 show_hint "Should fail 'No route to host' since addresses on loopback are out of device scope"
1201 run_cmd nettest -s &
1202 sleep 1
1203 run_cmd nettest -r ${a} -d ${NSA_DEV}
1204 log_test_addr ${a} $? 1 "Global server, device client, local connection"
1205 done
1206
1207 a=${NSA_IP}
1208 log_start
1209 run_cmd nettest -s -I ${NSA_DEV} -3 ${NSA_DEV} &
1210 sleep 1
1211 run_cmd nettest -d ${NSA_DEV} -r ${a} -0 ${a}
1212 log_test_addr ${a} $? 0 "Device server, device client, local connection"
1213
1214 log_start
1215 show_hint "Should fail 'Connection refused'"
1216 run_cmd nettest -d ${NSA_DEV} -r ${a}
1217 log_test_addr ${a} $? 1 "No server, device client, local conn"
1218
1219 ipv4_tcp_md5_novrf
1220 }
1221
1222 ipv4_tcp_vrf()
1223 {
1224 local a
1225
1226
1227 log_subsection "Global server disabled"
1228
1229 set_sysctl net.ipv4.tcp_l3mdev_accept=0
1230
1231
1232
1233
1234 for a in ${NSA_IP} ${VRF_IP}
1235 do
1236 log_start
1237 show_hint "Should fail 'Connection refused' since global server with VRF is disabled"
1238 run_cmd nettest -s &
1239 sleep 1
1240 run_cmd_nsb nettest -r ${a}
1241 log_test_addr ${a} $? 1 "Global server"
1242
1243 log_start
1244 run_cmd nettest -s -I ${VRF} -3 ${VRF} &
1245 sleep 1
1246 run_cmd_nsb nettest -r ${a}
1247 log_test_addr ${a} $? 0 "VRF server"
1248
1249 log_start
1250 run_cmd nettest -s -I ${NSA_DEV} -3 ${NSA_DEV} &
1251 sleep 1
1252 run_cmd_nsb nettest -r ${a}
1253 log_test_addr ${a} $? 0 "Device server"
1254
1255
1256 log_start
1257 show_hint "Should fail 'Connection refused' since there is no server"
1258 run_cmd_nsb nettest -r ${a}
1259 log_test_addr ${a} $? 1 "No server"
1260 done
1261
1262
1263
1264 a=${NSA_IP}
1265 log_start
1266 show_hint "Should fail 'Connection refused' since global server with VRF is disabled"
1267 run_cmd nettest -s &
1268 sleep 1
1269 run_cmd nettest -r ${a} -d ${NSA_DEV}
1270 log_test_addr ${a} $? 1 "Global server, local connection"
1271
1272
1273 setup_vrf_dup
1274 ipv4_tcp_md5
1275 cleanup_vrf_dup
1276
1277
1278
1279
1280 log_subsection "VRF Global server enabled"
1281 set_sysctl net.ipv4.tcp_l3mdev_accept=1
1282
1283 for a in ${NSA_IP} ${VRF_IP}
1284 do
1285 log_start
1286 show_hint "client socket should be bound to VRF"
1287 run_cmd nettest -s -3 ${VRF} &
1288 sleep 1
1289 run_cmd_nsb nettest -r ${a}
1290 log_test_addr ${a} $? 0 "Global server"
1291
1292 log_start
1293 show_hint "client socket should be bound to VRF"
1294 run_cmd nettest -s -I ${VRF} -3 ${VRF} &
1295 sleep 1
1296 run_cmd_nsb nettest -r ${a}
1297 log_test_addr ${a} $? 0 "VRF server"
1298
1299
1300 log_start
1301 show_hint "Should fail 'Connection refused'"
1302 run_cmd_nsb nettest -r ${a}
1303 log_test_addr ${a} $? 1 "No server"
1304 done
1305
1306 a=${NSA_IP}
1307 log_start
1308 show_hint "client socket should be bound to device"
1309 run_cmd nettest -s -I ${NSA_DEV} -3 ${NSA_DEV} &
1310 sleep 1
1311 run_cmd_nsb nettest -r ${a}
1312 log_test_addr ${a} $? 0 "Device server"
1313
1314
1315 for a in ${NSA_IP} ${VRF_IP}
1316 do
1317 log_start
1318 show_hint "Should fail 'Connection refused' since client is not bound to VRF"
1319 run_cmd nettest -s -I ${VRF} &
1320 sleep 1
1321 run_cmd nettest -r ${a}
1322 log_test_addr ${a} $? 1 "Global server, local connection"
1323 done
1324
1325
1326
1327
1328 for a in ${NSB_IP} ${NSB_LO_IP}
1329 do
1330 log_start
1331 run_cmd_nsb nettest -s &
1332 sleep 1
1333 run_cmd nettest -r ${a} -d ${VRF}
1334 log_test_addr ${a} $? 0 "Client, VRF bind"
1335
1336 log_start
1337 run_cmd_nsb nettest -s &
1338 sleep 1
1339 run_cmd nettest -r ${a} -d ${NSA_DEV}
1340 log_test_addr ${a} $? 0 "Client, device bind"
1341
1342 log_start
1343 show_hint "Should fail 'Connection refused'"
1344 run_cmd nettest -r ${a} -d ${VRF}
1345 log_test_addr ${a} $? 1 "No server, VRF client"
1346
1347 log_start
1348 show_hint "Should fail 'Connection refused'"
1349 run_cmd nettest -r ${a} -d ${NSA_DEV}
1350 log_test_addr ${a} $? 1 "No server, device client"
1351 done
1352
1353 for a in ${NSA_IP} ${VRF_IP} 127.0.0.1
1354 do
1355 log_start
1356 run_cmd nettest -s -I ${VRF} -3 ${VRF} &
1357 sleep 1
1358 run_cmd nettest -r ${a} -d ${VRF} -0 ${a}
1359 log_test_addr ${a} $? 0 "VRF server, VRF client, local connection"
1360 done
1361
1362 a=${NSA_IP}
1363 log_start
1364 run_cmd nettest -s -I ${VRF} -3 ${VRF} &
1365 sleep 1
1366 run_cmd nettest -r ${a} -d ${NSA_DEV} -0 ${a}
1367 log_test_addr ${a} $? 0 "VRF server, device client, local connection"
1368
1369 log_start
1370 show_hint "Should fail 'No route to host' since client is out of VRF scope"
1371 run_cmd nettest -s -I ${VRF} &
1372 sleep 1
1373 run_cmd nettest -r ${a}
1374 log_test_addr ${a} $? 1 "VRF server, unbound client, local connection"
1375
1376 log_start
1377 run_cmd nettest -s -I ${NSA_DEV} -3 ${NSA_DEV} &
1378 sleep 1
1379 run_cmd nettest -r ${a} -d ${VRF} -0 ${a}
1380 log_test_addr ${a} $? 0 "Device server, VRF client, local connection"
1381
1382 log_start
1383 run_cmd nettest -s -I ${NSA_DEV} -3 ${NSA_DEV} &
1384 sleep 1
1385 run_cmd nettest -r ${a} -d ${NSA_DEV} -0 ${a}
1386 log_test_addr ${a} $? 0 "Device server, device client, local connection"
1387 }
1388
1389 ipv4_tcp()
1390 {
1391 log_section "IPv4/TCP"
1392 log_subsection "No VRF"
1393 setup
1394
1395
1396
1397 log_subsection "tcp_l3mdev_accept disabled"
1398 set_sysctl net.ipv4.tcp_l3mdev_accept=0
1399 ipv4_tcp_novrf
1400 log_subsection "tcp_l3mdev_accept enabled"
1401 set_sysctl net.ipv4.tcp_l3mdev_accept=1
1402 ipv4_tcp_novrf
1403
1404 log_subsection "With VRF"
1405 setup "yes"
1406 ipv4_tcp_vrf
1407 }
1408
1409
1410
1411
1412 ipv4_udp_novrf()
1413 {
1414 local a
1415
1416
1417
1418
1419 for a in ${NSA_IP} ${NSA_LO_IP}
1420 do
1421 log_start
1422 run_cmd nettest -D -s -3 ${NSA_DEV} &
1423 sleep 1
1424 run_cmd_nsb nettest -D -r ${a}
1425 log_test_addr ${a} $? 0 "Global server"
1426
1427 log_start
1428 show_hint "Should fail 'Connection refused' since there is no server"
1429 run_cmd_nsb nettest -D -r ${a}
1430 log_test_addr ${a} $? 1 "No server"
1431 done
1432
1433 a=${NSA_IP}
1434 log_start
1435 run_cmd nettest -D -I ${NSA_DEV} -s -3 ${NSA_DEV} &
1436 sleep 1
1437 run_cmd_nsb nettest -D -r ${a}
1438 log_test_addr ${a} $? 0 "Device server"
1439
1440
1441
1442
1443 for a in ${NSB_IP} ${NSB_LO_IP}
1444 do
1445 log_start
1446 run_cmd_nsb nettest -D -s &
1447 sleep 1
1448 run_cmd nettest -D -r ${a} -0 ${NSA_IP}
1449 log_test_addr ${a} $? 0 "Client"
1450
1451 log_start
1452 run_cmd_nsb nettest -D -s &
1453 sleep 1
1454 run_cmd nettest -D -r ${a} -d ${NSA_DEV} -0 ${NSA_IP}
1455 log_test_addr ${a} $? 0 "Client, device bind"
1456
1457 log_start
1458 run_cmd_nsb nettest -D -s &
1459 sleep 1
1460 run_cmd nettest -D -r ${a} -d ${NSA_DEV} -C -0 ${NSA_IP}
1461 log_test_addr ${a} $? 0 "Client, device send via cmsg"
1462
1463 log_start
1464 run_cmd_nsb nettest -D -s &
1465 sleep 1
1466 run_cmd nettest -D -r ${a} -d ${NSA_DEV} -S -0 ${NSA_IP}
1467 log_test_addr ${a} $? 0 "Client, device bind via IP_UNICAST_IF"
1468
1469 log_start
1470 show_hint "Should fail 'Connection refused'"
1471 run_cmd nettest -D -r ${a}
1472 log_test_addr ${a} $? 1 "No server, unbound client"
1473
1474 log_start
1475 show_hint "Should fail 'Connection refused'"
1476 run_cmd nettest -D -r ${a} -d ${NSA_DEV}
1477 log_test_addr ${a} $? 1 "No server, device client"
1478 done
1479
1480
1481
1482
1483 for a in ${NSA_IP} ${NSA_LO_IP} 127.0.0.1
1484 do
1485 log_start
1486 run_cmd nettest -D -s &
1487 sleep 1
1488 run_cmd nettest -D -r ${a} -0 ${a} -1 ${a}
1489 log_test_addr ${a} $? 0 "Global server, local connection"
1490 done
1491
1492 a=${NSA_IP}
1493 log_start
1494 run_cmd nettest -s -D -I ${NSA_DEV} -3 ${NSA_DEV} &
1495 sleep 1
1496 run_cmd nettest -D -r ${a}
1497 log_test_addr ${a} $? 0 "Device server, unbound client, local connection"
1498
1499 for a in ${NSA_LO_IP} 127.0.0.1
1500 do
1501 log_start
1502 show_hint "Should fail 'Connection refused' since address is out of device scope"
1503 run_cmd nettest -s -D -I ${NSA_DEV} &
1504 sleep 1
1505 run_cmd nettest -D -r ${a}
1506 log_test_addr ${a} $? 1 "Device server, unbound client, local connection"
1507 done
1508
1509 a=${NSA_IP}
1510 log_start
1511 run_cmd nettest -s -D &
1512 sleep 1
1513 run_cmd nettest -D -d ${NSA_DEV} -r ${a}
1514 log_test_addr ${a} $? 0 "Global server, device client, local connection"
1515
1516 log_start
1517 run_cmd nettest -s -D &
1518 sleep 1
1519 run_cmd nettest -D -d ${NSA_DEV} -C -r ${a}
1520 log_test_addr ${a} $? 0 "Global server, device send via cmsg, local connection"
1521
1522 log_start
1523 run_cmd nettest -s -D &
1524 sleep 1
1525 run_cmd nettest -D -d ${NSA_DEV} -S -r ${a}
1526 log_test_addr ${a} $? 0 "Global server, device client via IP_UNICAST_IF, local connection"
1527
1528
1529
1530
1531 for a in ${NSA_LO_IP} 127.0.0.1
1532 do
1533 log_start
1534 show_hint "Should fail since addresses on loopback are out of device scope"
1535 run_cmd nettest -D -s &
1536 sleep 1
1537 run_cmd nettest -D -r ${a} -d ${NSA_DEV}
1538 log_test_addr ${a} $? 2 "Global server, device client, local connection"
1539
1540 log_start
1541 show_hint "Should fail since addresses on loopback are out of device scope"
1542 run_cmd nettest -D -s &
1543 sleep 1
1544 run_cmd nettest -D -r ${a} -d ${NSA_DEV} -C
1545 log_test_addr ${a} $? 1 "Global server, device send via cmsg, local connection"
1546
1547 log_start
1548 show_hint "Should fail since addresses on loopback are out of device scope"
1549 run_cmd nettest -D -s &
1550 sleep 1
1551 run_cmd nettest -D -r ${a} -d ${NSA_DEV} -S
1552 log_test_addr ${a} $? 1 "Global server, device client via IP_UNICAST_IF, local connection"
1553 done
1554
1555 a=${NSA_IP}
1556 log_start
1557 run_cmd nettest -D -s -I ${NSA_DEV} -3 ${NSA_DEV} &
1558 sleep 1
1559 run_cmd nettest -D -d ${NSA_DEV} -r ${a} -0 ${a}
1560 log_test_addr ${a} $? 0 "Device server, device client, local conn"
1561
1562 log_start
1563 run_cmd nettest -D -d ${NSA_DEV} -r ${a}
1564 log_test_addr ${a} $? 2 "No server, device client, local conn"
1565 }
1566
1567 ipv4_udp_vrf()
1568 {
1569 local a
1570
1571
1572 log_subsection "Global server disabled"
1573 set_sysctl net.ipv4.udp_l3mdev_accept=0
1574
1575
1576
1577
1578 for a in ${NSA_IP} ${VRF_IP}
1579 do
1580 log_start
1581 show_hint "Fails because ingress is in a VRF and global server is disabled"
1582 run_cmd nettest -D -s &
1583 sleep 1
1584 run_cmd_nsb nettest -D -r ${a}
1585 log_test_addr ${a} $? 1 "Global server"
1586
1587 log_start
1588 run_cmd nettest -D -I ${VRF} -s -3 ${NSA_DEV} &
1589 sleep 1
1590 run_cmd_nsb nettest -D -r ${a}
1591 log_test_addr ${a} $? 0 "VRF server"
1592
1593 log_start
1594 run_cmd nettest -D -I ${NSA_DEV} -s -3 ${NSA_DEV} &
1595 sleep 1
1596 run_cmd_nsb nettest -D -r ${a}
1597 log_test_addr ${a} $? 0 "Enslaved device server"
1598
1599 log_start
1600 show_hint "Should fail 'Connection refused' since there is no server"
1601 run_cmd_nsb nettest -D -r ${a}
1602 log_test_addr ${a} $? 1 "No server"
1603
1604 log_start
1605 show_hint "Should fail 'Connection refused' since global server is out of scope"
1606 run_cmd nettest -D -s &
1607 sleep 1
1608 run_cmd nettest -D -d ${VRF} -r ${a}
1609 log_test_addr ${a} $? 1 "Global server, VRF client, local connection"
1610 done
1611
1612 a=${NSA_IP}
1613 log_start
1614 run_cmd nettest -s -D -I ${VRF} -3 ${NSA_DEV} &
1615 sleep 1
1616 run_cmd nettest -D -d ${VRF} -r ${a}
1617 log_test_addr ${a} $? 0 "VRF server, VRF client, local conn"
1618
1619 log_start
1620 run_cmd nettest -s -D -I ${VRF} -3 ${NSA_DEV} &
1621 sleep 1
1622 run_cmd nettest -D -d ${NSA_DEV} -r ${a}
1623 log_test_addr ${a} $? 0 "VRF server, enslaved device client, local connection"
1624
1625 a=${NSA_IP}
1626 log_start
1627 run_cmd nettest -s -D -I ${NSA_DEV} -3 ${NSA_DEV} &
1628 sleep 1
1629 run_cmd nettest -D -d ${VRF} -r ${a}
1630 log_test_addr ${a} $? 0 "Enslaved device server, VRF client, local conn"
1631
1632 log_start
1633 run_cmd nettest -s -D -I ${NSA_DEV} -3 ${NSA_DEV} &
1634 sleep 1
1635 run_cmd nettest -D -d ${NSA_DEV} -r ${a}
1636 log_test_addr ${a} $? 0 "Enslaved device server, device client, local conn"
1637
1638
1639 log_subsection "Global server enabled"
1640 set_sysctl net.ipv4.udp_l3mdev_accept=1
1641
1642
1643
1644
1645 for a in ${NSA_IP} ${VRF_IP}
1646 do
1647 log_start
1648 run_cmd nettest -D -s -3 ${NSA_DEV} &
1649 sleep 1
1650 run_cmd_nsb nettest -D -r ${a}
1651 log_test_addr ${a} $? 0 "Global server"
1652
1653 log_start
1654 run_cmd nettest -D -I ${VRF} -s -3 ${NSA_DEV} &
1655 sleep 1
1656 run_cmd_nsb nettest -D -r ${a}
1657 log_test_addr ${a} $? 0 "VRF server"
1658
1659 log_start
1660 run_cmd nettest -D -I ${NSA_DEV} -s -3 ${NSA_DEV} &
1661 sleep 1
1662 run_cmd_nsb nettest -D -r ${a}
1663 log_test_addr ${a} $? 0 "Enslaved device server"
1664
1665 log_start
1666 show_hint "Should fail 'Connection refused'"
1667 run_cmd_nsb nettest -D -r ${a}
1668 log_test_addr ${a} $? 1 "No server"
1669 done
1670
1671
1672
1673
1674 log_start
1675 run_cmd_nsb nettest -D -s &
1676 sleep 1
1677 run_cmd nettest -d ${VRF} -D -r ${NSB_IP} -1 ${NSA_IP}
1678 log_test $? 0 "VRF client"
1679
1680 log_start
1681 run_cmd_nsb nettest -D -s &
1682 sleep 1
1683 run_cmd nettest -d ${NSA_DEV} -D -r ${NSB_IP} -1 ${NSA_IP}
1684 log_test $? 0 "Enslaved device client"
1685
1686
1687 log_start
1688 show_hint "Should fail 'Connection refused'"
1689 run_cmd nettest -D -d ${VRF} -r ${NSB_IP}
1690 log_test $? 1 "No server, VRF client"
1691
1692 log_start
1693 show_hint "Should fail 'Connection refused'"
1694 run_cmd nettest -D -d ${NSA_DEV} -r ${NSB_IP}
1695 log_test $? 1 "No server, enslaved device client"
1696
1697
1698
1699
1700 a=${NSA_IP}
1701 log_start
1702 run_cmd nettest -D -s -3 ${NSA_DEV} &
1703 sleep 1
1704 run_cmd nettest -D -d ${VRF} -r ${a}
1705 log_test_addr ${a} $? 0 "Global server, VRF client, local conn"
1706
1707 log_start
1708 run_cmd nettest -s -D -I ${VRF} -3 ${NSA_DEV} &
1709 sleep 1
1710 run_cmd nettest -D -d ${VRF} -r ${a}
1711 log_test_addr ${a} $? 0 "VRF server, VRF client, local conn"
1712
1713 log_start
1714 run_cmd nettest -s -D -I ${VRF} -3 ${NSA_DEV} &
1715 sleep 1
1716 run_cmd nettest -D -d ${NSA_DEV} -r ${a}
1717 log_test_addr ${a} $? 0 "VRF server, device client, local conn"
1718
1719 log_start
1720 run_cmd nettest -s -D -I ${NSA_DEV} -3 ${NSA_DEV} &
1721 sleep 1
1722 run_cmd nettest -D -d ${VRF} -r ${a}
1723 log_test_addr ${a} $? 0 "Enslaved device server, VRF client, local conn"
1724
1725 log_start
1726 run_cmd nettest -s -D -I ${NSA_DEV} -3 ${NSA_DEV} &
1727 sleep 1
1728 run_cmd nettest -D -d ${NSA_DEV} -r ${a}
1729 log_test_addr ${a} $? 0 "Enslaved device server, device client, local conn"
1730
1731 for a in ${VRF_IP} 127.0.0.1
1732 do
1733 log_start
1734 run_cmd nettest -D -s -3 ${VRF} &
1735 sleep 1
1736 run_cmd nettest -D -d ${VRF} -r ${a}
1737 log_test_addr ${a} $? 0 "Global server, VRF client, local conn"
1738 done
1739
1740 for a in ${VRF_IP} 127.0.0.1
1741 do
1742 log_start
1743 run_cmd nettest -s -D -I ${VRF} -3 ${VRF} &
1744 sleep 1
1745 run_cmd nettest -D -d ${VRF} -r ${a}
1746 log_test_addr ${a} $? 0 "VRF server, VRF client, local conn"
1747 done
1748
1749
1750
1751 for a in ${NSA_IP} ${VRF_IP} 127.0.0.1
1752 do
1753 log_start
1754 show_hint "Should fail 'Connection refused'"
1755 run_cmd nettest -D -d ${VRF} -r ${a}
1756 log_test_addr ${a} $? 1 "No server, VRF client, local conn"
1757 done
1758 }
1759
1760 ipv4_udp()
1761 {
1762 log_section "IPv4/UDP"
1763 log_subsection "No VRF"
1764
1765 setup
1766
1767
1768
1769 log_subsection "udp_l3mdev_accept disabled"
1770 set_sysctl net.ipv4.udp_l3mdev_accept=0
1771 ipv4_udp_novrf
1772 log_subsection "udp_l3mdev_accept enabled"
1773 set_sysctl net.ipv4.udp_l3mdev_accept=1
1774 ipv4_udp_novrf
1775
1776 log_subsection "With VRF"
1777 setup "yes"
1778 ipv4_udp_vrf
1779 }
1780
1781
1782
1783
1784
1785
1786 ipv4_addr_bind_novrf()
1787 {
1788
1789
1790
1791 for a in ${NSA_IP} ${NSA_LO_IP}
1792 do
1793 log_start
1794 run_cmd nettest -s -R -P icmp -l ${a} -b
1795 log_test_addr ${a} $? 0 "Raw socket bind to local address"
1796
1797 log_start
1798 run_cmd nettest -s -R -P icmp -l ${a} -I ${NSA_DEV} -b
1799 log_test_addr ${a} $? 0 "Raw socket bind to local address after device bind"
1800 done
1801
1802
1803
1804
1805 a=${NL_IP}
1806 log_start
1807 run_cmd nettest -s -R -f -l ${a} -b
1808 log_test_addr ${a} $? 0 "Raw socket bind to nonlocal address"
1809
1810 log_start
1811 run_cmd nettest -s -f -l ${a} -b
1812 log_test_addr ${a} $? 0 "TCP socket bind to nonlocal address"
1813
1814 log_start
1815 run_cmd nettest -s -D -P icmp -f -l ${a} -b
1816 log_test_addr ${a} $? 0 "ICMP socket bind to nonlocal address"
1817
1818
1819
1820
1821 a=${BCAST_IP}
1822 log_start
1823 run_cmd nettest -s -D -P icmp -l ${a} -b
1824 log_test_addr ${a} $? 1 "ICMP socket bind to broadcast address"
1825
1826 a=${MCAST_IP}
1827 log_start
1828 run_cmd nettest -s -D -P icmp -l ${a} -b
1829 log_test_addr ${a} $? 1 "ICMP socket bind to multicast address"
1830
1831
1832
1833
1834 a=${NSA_IP}
1835 log_start
1836 run_cmd nettest -c ${a} -r ${NSB_IP} -t1 -b
1837 log_test_addr ${a} $? 0 "TCP socket bind to local address"
1838
1839 log_start
1840 run_cmd nettest -c ${a} -r ${NSB_IP} -d ${NSA_DEV} -t1 -b
1841 log_test_addr ${a} $? 0 "TCP socket bind to local address after device bind"
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852 }
1853
1854 ipv4_addr_bind_vrf()
1855 {
1856
1857
1858
1859 for a in ${NSA_IP} ${VRF_IP}
1860 do
1861 log_start
1862 show_hint "Socket not bound to VRF, but address is in VRF"
1863 run_cmd nettest -s -R -P icmp -l ${a} -b
1864 log_test_addr ${a} $? 1 "Raw socket bind to local address"
1865
1866 log_start
1867 run_cmd nettest -s -R -P icmp -l ${a} -I ${NSA_DEV} -b
1868 log_test_addr ${a} $? 0 "Raw socket bind to local address after device bind"
1869 log_start
1870 run_cmd nettest -s -R -P icmp -l ${a} -I ${VRF} -b
1871 log_test_addr ${a} $? 0 "Raw socket bind to local address after VRF bind"
1872 done
1873
1874 a=${NSA_LO_IP}
1875 log_start
1876 show_hint "Address on loopback is out of VRF scope"
1877 run_cmd nettest -s -R -P icmp -l ${a} -I ${VRF} -b
1878 log_test_addr ${a} $? 1 "Raw socket bind to out of scope address after VRF bind"
1879
1880
1881
1882
1883 a=${NL_IP}
1884 log_start
1885 run_cmd nettest -s -R -f -l ${a} -I ${VRF} -b
1886 log_test_addr ${a} $? 0 "Raw socket bind to nonlocal address after VRF bind"
1887
1888 log_start
1889 run_cmd nettest -s -f -l ${a} -I ${VRF} -b
1890 log_test_addr ${a} $? 0 "TCP socket bind to nonlocal address after VRF bind"
1891
1892 log_start
1893 run_cmd nettest -s -D -P icmp -f -l ${a} -I ${VRF} -b
1894 log_test_addr ${a} $? 0 "ICMP socket bind to nonlocal address after VRF bind"
1895
1896
1897
1898
1899 a=${BCAST_IP}
1900 log_start
1901 run_cmd nettest -s -D -P icmp -l ${a} -I ${VRF} -b
1902 log_test_addr ${a} $? 1 "ICMP socket bind to broadcast address after VRF bind"
1903
1904 a=${MCAST_IP}
1905 log_start
1906 run_cmd nettest -s -D -P icmp -l ${a} -I ${VRF} -b
1907 log_test_addr ${a} $? 1 "ICMP socket bind to multicast address after VRF bind"
1908
1909
1910
1911
1912 for a in ${NSA_IP} ${VRF_IP}
1913 do
1914 log_start
1915 run_cmd nettest -s -l ${a} -I ${VRF} -t1 -b
1916 log_test_addr ${a} $? 0 "TCP socket bind to local address"
1917
1918 log_start
1919 run_cmd nettest -s -l ${a} -I ${NSA_DEV} -t1 -b
1920 log_test_addr ${a} $? 0 "TCP socket bind to local address after device bind"
1921 done
1922
1923 a=${NSA_LO_IP}
1924 log_start
1925 show_hint "Address on loopback out of scope for VRF"
1926 run_cmd nettest -s -l ${a} -I ${VRF} -t1 -b
1927 log_test_addr ${a} $? 1 "TCP socket bind to invalid local address for VRF"
1928
1929 log_start
1930 show_hint "Address on loopback out of scope for device in VRF"
1931 run_cmd nettest -s -l ${a} -I ${NSA_DEV} -t1 -b
1932 log_test_addr ${a} $? 1 "TCP socket bind to invalid local address for device bind"
1933 }
1934
1935 ipv4_addr_bind()
1936 {
1937 log_section "IPv4 address binds"
1938
1939 log_subsection "No VRF"
1940 setup
1941 set_sysctl net.ipv4.ping_group_range='0 2147483647' 2>/dev/null
1942 ipv4_addr_bind_novrf
1943
1944 log_subsection "With VRF"
1945 setup "yes"
1946 set_sysctl net.ipv4.ping_group_range='0 2147483647' 2>/dev/null
1947 ipv4_addr_bind_vrf
1948 }
1949
1950
1951
1952
1953 ipv4_rt()
1954 {
1955 local desc="$1"
1956 local varg="$2"
1957 local with_vrf="yes"
1958 local a
1959
1960
1961
1962
1963 for a in ${NSA_IP} ${VRF_IP}
1964 do
1965 log_start
1966 run_cmd nettest ${varg} -s &
1967 sleep 1
1968 run_cmd_nsb nettest ${varg} -r ${a} &
1969 sleep 3
1970 run_cmd ip link del ${VRF}
1971 sleep 1
1972 log_test_addr ${a} 0 0 "${desc}, global server"
1973
1974 setup ${with_vrf}
1975 done
1976
1977 for a in ${NSA_IP} ${VRF_IP}
1978 do
1979 log_start
1980 run_cmd nettest ${varg} -s -I ${VRF} &
1981 sleep 1
1982 run_cmd_nsb nettest ${varg} -r ${a} &
1983 sleep 3
1984 run_cmd ip link del ${VRF}
1985 sleep 1
1986 log_test_addr ${a} 0 0 "${desc}, VRF server"
1987
1988 setup ${with_vrf}
1989 done
1990
1991 a=${NSA_IP}
1992 log_start
1993 run_cmd nettest ${varg} -s -I ${NSA_DEV} &
1994 sleep 1
1995 run_cmd_nsb nettest ${varg} -r ${a} &
1996 sleep 3
1997 run_cmd ip link del ${VRF}
1998 sleep 1
1999 log_test_addr ${a} 0 0 "${desc}, enslaved device server"
2000
2001 setup ${with_vrf}
2002
2003
2004
2005
2006 log_start
2007 run_cmd_nsb nettest ${varg} -s &
2008 sleep 1
2009 run_cmd nettest ${varg} -d ${VRF} -r ${NSB_IP} &
2010 sleep 3
2011 run_cmd ip link del ${VRF}
2012 sleep 1
2013 log_test_addr ${a} 0 0 "${desc}, VRF client"
2014
2015 setup ${with_vrf}
2016
2017 log_start
2018 run_cmd_nsb nettest ${varg} -s &
2019 sleep 1
2020 run_cmd nettest ${varg} -d ${NSA_DEV} -r ${NSB_IP} &
2021 sleep 3
2022 run_cmd ip link del ${VRF}
2023 sleep 1
2024 log_test_addr ${a} 0 0 "${desc}, enslaved device client"
2025
2026 setup ${with_vrf}
2027
2028
2029
2030
2031 for a in ${NSA_IP} ${VRF_IP}
2032 do
2033 log_start
2034 run_cmd nettest ${varg} -s &
2035 sleep 1
2036 run_cmd nettest ${varg} -d ${VRF} -r ${a} &
2037 sleep 3
2038 run_cmd ip link del ${VRF}
2039 sleep 1
2040 log_test_addr ${a} 0 0 "${desc}, global server, VRF client, local"
2041
2042 setup ${with_vrf}
2043 done
2044
2045 for a in ${NSA_IP} ${VRF_IP}
2046 do
2047 log_start
2048 run_cmd nettest ${varg} -I ${VRF} -s &
2049 sleep 1
2050 run_cmd nettest ${varg} -d ${VRF} -r ${a} &
2051 sleep 3
2052 run_cmd ip link del ${VRF}
2053 sleep 1
2054 log_test_addr ${a} 0 0 "${desc}, VRF server and client, local"
2055
2056 setup ${with_vrf}
2057 done
2058
2059 a=${NSA_IP}
2060 log_start
2061
2062 run_cmd nettest ${varg} -s &
2063 sleep 1
2064 run_cmd nettest ${varg} -d ${NSA_DEV} -r ${a} &
2065 sleep 3
2066 run_cmd ip link del ${VRF}
2067 sleep 1
2068 log_test_addr ${a} 0 0 "${desc}, global server, enslaved device client, local"
2069
2070 setup ${with_vrf}
2071
2072 log_start
2073 run_cmd nettest ${varg} -I ${VRF} -s &
2074 sleep 1
2075 run_cmd nettest ${varg} -d ${NSA_DEV} -r ${a} &
2076 sleep 3
2077 run_cmd ip link del ${VRF}
2078 sleep 1
2079 log_test_addr ${a} 0 0 "${desc}, VRF server, enslaved device client, local"
2080
2081 setup ${with_vrf}
2082
2083 log_start
2084 run_cmd nettest ${varg} -I ${NSA_DEV} -s &
2085 sleep 1
2086 run_cmd nettest ${varg} -d ${NSA_DEV} -r ${a} &
2087 sleep 3
2088 run_cmd ip link del ${VRF}
2089 sleep 1
2090 log_test_addr ${a} 0 0 "${desc}, enslaved device server and client, local"
2091 }
2092
2093 ipv4_ping_rt()
2094 {
2095 local with_vrf="yes"
2096 local a
2097
2098 for a in ${NSA_IP} ${VRF_IP}
2099 do
2100 log_start
2101 run_cmd_nsb ping -f ${a} &
2102 sleep 3
2103 run_cmd ip link del ${VRF}
2104 sleep 1
2105 log_test_addr ${a} 0 0 "Device delete with active traffic - ping in"
2106
2107 setup ${with_vrf}
2108 done
2109
2110 a=${NSB_IP}
2111 log_start
2112 run_cmd ping -f -I ${VRF} ${a} &
2113 sleep 3
2114 run_cmd ip link del ${VRF}
2115 sleep 1
2116 log_test_addr ${a} 0 0 "Device delete with active traffic - ping out"
2117 }
2118
2119 ipv4_runtime()
2120 {
2121 log_section "Run time tests - ipv4"
2122
2123 setup "yes"
2124 ipv4_ping_rt
2125
2126 setup "yes"
2127 ipv4_rt "TCP active socket" "-n -1"
2128
2129 setup "yes"
2130 ipv4_rt "TCP passive socket" "-i"
2131 }
2132
2133
2134
2135
2136 ipv6_ping_novrf()
2137 {
2138 local a
2139
2140
2141 set_sysctl net.ipv4.raw_l3mdev_accept=0 2>/dev/null
2142
2143
2144
2145
2146 for a in ${NSB_IP6} ${NSB_LO_IP6} ${NSB_LINKIP6}%${NSA_DEV} ${MCAST}%${NSA_DEV}
2147 do
2148 log_start
2149 run_cmd ${ping6} -c1 -w1 ${a}
2150 log_test_addr ${a} $? 0 "ping out"
2151 done
2152
2153 for a in ${NSB_IP6} ${NSB_LO_IP6}
2154 do
2155 log_start
2156 run_cmd ${ping6} -c1 -w1 -I ${NSA_DEV} ${a}
2157 log_test_addr ${a} $? 0 "ping out, device bind"
2158
2159 log_start
2160 run_cmd ${ping6} -c1 -w1 -I ${NSA_LO_IP6} ${a}
2161 log_test_addr ${a} $? 0 "ping out, loopback address bind"
2162 done
2163
2164
2165
2166
2167 for a in ${NSA_IP6} ${NSA_LO_IP6} ${NSA_LINKIP6}%${NSB_DEV} ${MCAST}%${NSB_DEV}
2168 do
2169 log_start
2170 run_cmd_nsb ${ping6} -c1 -w1 ${a}
2171 log_test_addr ${a} $? 0 "ping in"
2172 done
2173
2174
2175
2176
2177 for a in ${NSA_IP6} ${NSA_LO_IP6} ::1 ${NSA_LINKIP6}%${NSA_DEV} ${MCAST}%${NSA_DEV}
2178 do
2179 log_start
2180 run_cmd ${ping6} -c1 -w1 ${a}
2181 log_test_addr ${a} $? 0 "ping local, no bind"
2182 done
2183
2184 for a in ${NSA_IP6} ${NSA_LINKIP6}%${NSA_DEV} ${MCAST}%${NSA_DEV}
2185 do
2186 log_start
2187 run_cmd ${ping6} -c1 -w1 -I ${NSA_DEV} ${a}
2188 log_test_addr ${a} $? 0 "ping local, device bind"
2189 done
2190
2191 for a in ${NSA_LO_IP6} ::1
2192 do
2193 log_start
2194 show_hint "Fails since address on loopback is out of device scope"
2195 run_cmd ${ping6} -c1 -w1 -I ${NSA_DEV} ${a}
2196 log_test_addr ${a} $? 2 "ping local, device bind"
2197 done
2198
2199
2200
2201
2202 log_start
2203 setup_cmd ip -6 rule add pref 32765 from all lookup local
2204 setup_cmd ip -6 rule del pref 0 from all lookup local
2205 setup_cmd ip -6 rule add pref 50 to ${NSB_LO_IP6} prohibit
2206 setup_cmd ip -6 rule add pref 51 from ${NSB_IP6} prohibit
2207
2208 a=${NSB_LO_IP6}
2209 run_cmd ${ping6} -c1 -w1 ${a}
2210 log_test_addr ${a} $? 2 "ping out, blocked by rule"
2211
2212 log_start
2213 run_cmd ${ping6} -c1 -w1 -I ${NSA_DEV} ${a}
2214 log_test_addr ${a} $? 2 "ping out, device bind, blocked by rule"
2215
2216 a=${NSA_LO_IP6}
2217 log_start
2218 show_hint "Response lost due to ip rule"
2219 run_cmd_nsb ${ping6} -c1 -w1 ${a}
2220 log_test_addr ${a} $? 1 "ping in, blocked by rule"
2221
2222 setup_cmd ip -6 rule add pref 0 from all lookup local
2223 setup_cmd ip -6 rule del pref 32765 from all lookup local
2224 setup_cmd ip -6 rule del pref 50 to ${NSB_LO_IP6} prohibit
2225 setup_cmd ip -6 rule del pref 51 from ${NSB_IP6} prohibit
2226
2227
2228
2229
2230 log_start
2231 setup_cmd ip -6 route del ${NSB_LO_IP6}
2232 setup_cmd ip -6 route add unreachable ${NSB_LO_IP6} metric 10
2233 setup_cmd ip -6 route add unreachable ${NSB_IP6} metric 10
2234
2235 a=${NSB_LO_IP6}
2236 run_cmd ${ping6} -c1 -w1 ${a}
2237 log_test_addr ${a} $? 2 "ping out, blocked by route"
2238
2239 log_start
2240 run_cmd ${ping6} -c1 -w1 -I ${NSA_DEV} ${a}
2241 log_test_addr ${a} $? 2 "ping out, device bind, blocked by route"
2242
2243 a=${NSA_LO_IP6}
2244 log_start
2245 show_hint "Response lost due to ip route"
2246 run_cmd_nsb ${ping6} -c1 -w1 ${a}
2247 log_test_addr ${a} $? 1 "ping in, blocked by route"
2248
2249
2250
2251
2252
2253 log_start
2254 setup_cmd ip -6 ro del unreachable ${NSB_LO_IP6}
2255 setup_cmd ip -6 ro del unreachable ${NSB_IP6}
2256
2257 a=${NSB_LO_IP6}
2258 run_cmd ${ping6} -c1 -w1 ${a}
2259 log_test_addr ${a} $? 2 "ping out, unreachable route"
2260
2261 log_start
2262 run_cmd ${ping6} -c1 -w1 -I ${NSA_DEV} ${a}
2263 log_test_addr ${a} $? 2 "ping out, device bind, unreachable route"
2264 }
2265
2266 ipv6_ping_vrf()
2267 {
2268 local a
2269
2270
2271 set_sysctl net.ipv4.raw_l3mdev_accept=1 2>/dev/null
2272
2273
2274
2275
2276 for a in ${NSB_IP6} ${NSB_LO_IP6}
2277 do
2278 log_start
2279 run_cmd ${ping6} -c1 -w1 -I ${VRF} ${a}
2280 log_test_addr ${a} $? 0 "ping out, VRF bind"
2281 done
2282
2283 for a in ${NSB_LINKIP6}%${VRF} ${MCAST}%${VRF}
2284 do
2285 log_start
2286 show_hint "Fails since VRF device does not support linklocal or multicast"
2287 run_cmd ${ping6} -c1 -w1 ${a}
2288 log_test_addr ${a} $? 1 "ping out, VRF bind"
2289 done
2290
2291 for a in ${NSB_IP6} ${NSB_LO_IP6} ${NSB_LINKIP6}%${NSA_DEV} ${MCAST}%${NSA_DEV}
2292 do
2293 log_start
2294 run_cmd ${ping6} -c1 -w1 -I ${NSA_DEV} ${a}
2295 log_test_addr ${a} $? 0 "ping out, device bind"
2296 done
2297
2298 for a in ${NSB_IP6} ${NSB_LO_IP6} ${NSB_LINKIP6}%${NSA_DEV}
2299 do
2300 log_start
2301 run_cmd ip vrf exec ${VRF} ${ping6} -c1 -w1 -I ${VRF_IP6} ${a}
2302 log_test_addr ${a} $? 0 "ping out, vrf device+address bind"
2303 done
2304
2305
2306
2307
2308 for a in ${NSA_IP6} ${VRF_IP6} ${NSA_LINKIP6}%${NSB_DEV} ${MCAST}%${NSB_DEV}
2309 do
2310 log_start
2311 run_cmd_nsb ${ping6} -c1 -w1 ${a}
2312 log_test_addr ${a} $? 0 "ping in"
2313 done
2314
2315 a=${NSA_LO_IP6}
2316 log_start
2317 show_hint "Fails since loopback address is out of VRF scope"
2318 run_cmd_nsb ${ping6} -c1 -w1 ${a}
2319 log_test_addr ${a} $? 1 "ping in"
2320
2321
2322
2323
2324 for a in ${NSA_IP6} ${VRF_IP6} ::1
2325 do
2326 log_start
2327 show_hint "Source address should be ${a}"
2328 run_cmd ${ping6} -c1 -w1 -I ${VRF} ${a}
2329 log_test_addr ${a} $? 0 "ping local, VRF bind"
2330 done
2331
2332 for a in ${NSA_IP6} ${NSA_LINKIP6}%${NSA_DEV} ${MCAST}%${NSA_DEV}
2333 do
2334 log_start
2335 run_cmd ${ping6} -c1 -w1 -I ${NSA_DEV} ${a}
2336 log_test_addr ${a} $? 0 "ping local, device bind"
2337 done
2338
2339
2340 setup_cmd_nsb ip -6 addr del ${NSB_IP6}/64 dev ${NSB_DEV}
2341 setup_cmd_nsb ip -6 addr del ${NSB_LO_IP6}/128 dev lo
2342 setup_cmd_nsb ip -6 ro add ${NSA_IP6}/128 via ${NSA_LINKIP6} dev ${NSB_DEV}
2343
2344 for a in ${NSA_IP6} ${VRF_IP6}
2345 do
2346 log_start
2347 run_cmd_nsb ${ping6} -c1 -w1 ${NSA_IP6}
2348 log_test_addr ${a} $? 0 "ping in, LLA to GUA"
2349 done
2350
2351 setup_cmd_nsb ip -6 ro del ${NSA_IP6}/128 via ${NSA_LINKIP6} dev ${NSB_DEV}
2352 setup_cmd_nsb ip -6 addr add ${NSB_IP6}/64 dev ${NSB_DEV}
2353 setup_cmd_nsb ip -6 addr add ${NSB_LO_IP6}/128 dev lo
2354
2355
2356
2357
2358 log_start
2359 setup_cmd ip -6 rule add pref 50 to ${NSB_LO_IP6} prohibit
2360 setup_cmd ip -6 rule add pref 51 from ${NSB_IP6} prohibit
2361
2362 a=${NSB_LO_IP6}
2363 run_cmd ${ping6} -c1 -w1 ${a}
2364 log_test_addr ${a} $? 2 "ping out, blocked by rule"
2365
2366 log_start
2367 run_cmd ${ping6} -c1 -w1 -I ${NSA_DEV} ${a}
2368 log_test_addr ${a} $? 2 "ping out, device bind, blocked by rule"
2369
2370 a=${NSA_LO_IP6}
2371 log_start
2372 show_hint "Response lost due to ip rule"
2373 run_cmd_nsb ${ping6} -c1 -w1 ${a}
2374 log_test_addr ${a} $? 1 "ping in, blocked by rule"
2375
2376 log_start
2377 setup_cmd ip -6 rule del pref 50 to ${NSB_LO_IP6} prohibit
2378 setup_cmd ip -6 rule del pref 51 from ${NSB_IP6} prohibit
2379
2380
2381
2382
2383 log_start
2384 setup_cmd ip -6 ro del ${NSB_LO_IP6} vrf ${VRF}
2385
2386 a=${NSB_LO_IP6}
2387 run_cmd ${ping6} -c1 -w1 ${a}
2388 log_test_addr ${a} $? 2 "ping out, unreachable route"
2389
2390 log_start
2391 run_cmd ${ping6} -c1 -w1 -I ${NSA_DEV} ${a}
2392 log_test_addr ${a} $? 2 "ping out, device bind, unreachable route"
2393
2394 ip -netns ${NSB} -6 ro del ${NSA_LO_IP6}
2395 a=${NSA_LO_IP6}
2396 log_start
2397 run_cmd_nsb ${ping6} -c1 -w1 ${a}
2398 log_test_addr ${a} $? 2 "ping in, unreachable route"
2399 }
2400
2401 ipv6_ping()
2402 {
2403 log_section "IPv6 ping"
2404
2405 log_subsection "No VRF"
2406 setup
2407 ipv6_ping_novrf
2408 setup
2409 set_sysctl net.ipv4.ping_group_range='0 2147483647' 2>/dev/null
2410 ipv6_ping_novrf
2411
2412 log_subsection "With VRF"
2413 setup "yes"
2414 ipv6_ping_vrf
2415 setup "yes"
2416 set_sysctl net.ipv4.ping_group_range='0 2147483647' 2>/dev/null
2417 ipv6_ping_vrf
2418 }
2419
2420
2421
2422
2423
2424
2425
2426 ipv6_tcp_md5_novrf()
2427 {
2428
2429
2430
2431
2432
2433 log_start
2434 run_cmd nettest -6 -s -M ${MD5_PW} -m ${NSB_IP6} &
2435 sleep 1
2436 run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_PW}
2437 log_test $? 0 "MD5: Single address config"
2438
2439
2440 log_start
2441 show_hint "Should timeout due to MD5 mismatch"
2442 run_cmd nettest -6 -s &
2443 sleep 1
2444 run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_PW}
2445 log_test $? 2 "MD5: Server no config, client uses password"
2446
2447
2448 log_start
2449 show_hint "Should timeout since client uses wrong password"
2450 run_cmd nettest -6 -s -M ${MD5_PW} -m ${NSB_IP6} &
2451 sleep 1
2452 run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_WRONG_PW}
2453 log_test $? 2 "MD5: Client uses wrong password"
2454
2455
2456 log_start
2457 show_hint "Should timeout due to MD5 mismatch"
2458 run_cmd nettest -6 -s -M ${MD5_PW} -m ${NSB_LO_IP6} &
2459 sleep 1
2460 run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_PW}
2461 log_test $? 2 "MD5: Client address does not match address configured with password"
2462
2463
2464
2465
2466
2467
2468 log_start
2469 run_cmd nettest -6 -s -M ${MD5_PW} -m ${NS_NET6} &
2470 sleep 1
2471 run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_PW}
2472 log_test $? 0 "MD5: Prefix config"
2473
2474
2475 log_start
2476 show_hint "Should timeout since client uses wrong password"
2477 run_cmd nettest -6 -s -M ${MD5_PW} -m ${NS_NET6} &
2478 sleep 1
2479 run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_WRONG_PW}
2480 log_test $? 2 "MD5: Prefix config, client uses wrong password"
2481
2482
2483 log_start
2484 show_hint "Should timeout due to MD5 mismatch"
2485 run_cmd nettest -6 -s -M ${MD5_PW} -m ${NS_NET6} &
2486 sleep 1
2487 run_cmd_nsb nettest -6 -c ${NSB_LO_IP6} -r ${NSA_IP6} -X ${MD5_PW}
2488 log_test $? 2 "MD5: Prefix config, client address not in configured prefix"
2489 }
2490
2491
2492
2493
2494 ipv6_tcp_md5()
2495 {
2496
2497
2498
2499
2500
2501 log_start
2502 run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP6} &
2503 sleep 1
2504 run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_PW}
2505 log_test $? 0 "MD5: VRF: Single address config"
2506
2507
2508 log_start
2509 show_hint "Should timeout since server does not have MD5 auth"
2510 run_cmd nettest -6 -s -I ${VRF} &
2511 sleep 1
2512 run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_PW}
2513 log_test $? 2 "MD5: VRF: Server no config, client uses password"
2514
2515
2516 log_start
2517 show_hint "Should timeout since client uses wrong password"
2518 run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP6} &
2519 sleep 1
2520 run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_WRONG_PW}
2521 log_test $? 2 "MD5: VRF: Client uses wrong password"
2522
2523
2524 log_start
2525 show_hint "Should timeout since server config differs from client"
2526 run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NSB_LO_IP6} &
2527 sleep 1
2528 run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_PW}
2529 log_test $? 2 "MD5: VRF: Client address does not match address configured with password"
2530
2531
2532
2533
2534
2535
2536 log_start
2537 run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET6} &
2538 sleep 1
2539 run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_PW}
2540 log_test $? 0 "MD5: VRF: Prefix config"
2541
2542
2543 log_start
2544 show_hint "Should timeout since client uses wrong password"
2545 run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET6} &
2546 sleep 1
2547 run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_WRONG_PW}
2548 log_test $? 2 "MD5: VRF: Prefix config, client uses wrong password"
2549
2550
2551 log_start
2552 show_hint "Should timeout since client address is outside of prefix"
2553 run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET6} &
2554 sleep 1
2555 run_cmd_nsb nettest -6 -c ${NSB_LO_IP6} -r ${NSA_IP6} -X ${MD5_PW}
2556 log_test $? 2 "MD5: VRF: Prefix config, client address not in configured prefix"
2557
2558
2559
2560
2561
2562 log_start
2563 run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP6} &
2564 run_cmd nettest -6 -s -M ${MD5_WRONG_PW} -m ${NSB_IP6} &
2565 sleep 1
2566 run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_PW}
2567 log_test $? 0 "MD5: VRF: Single address config in default VRF and VRF, conn in VRF"
2568
2569 log_start
2570 run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP6} &
2571 run_cmd nettest -6 -s -M ${MD5_WRONG_PW} -m ${NSB_IP6} &
2572 sleep 1
2573 run_cmd_nsc nettest -6 -r ${NSA_IP6} -X ${MD5_WRONG_PW}
2574 log_test $? 0 "MD5: VRF: Single address config in default VRF and VRF, conn in default VRF"
2575
2576 log_start
2577 show_hint "Should timeout since client in default VRF uses VRF password"
2578 run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP6} &
2579 run_cmd nettest -6 -s -M ${MD5_WRONG_PW} -m ${NSB_IP6} &
2580 sleep 1
2581 run_cmd_nsc nettest -6 -r ${NSA_IP6} -X ${MD5_PW}
2582 log_test $? 2 "MD5: VRF: Single address config in default VRF and VRF, conn in default VRF with VRF pw"
2583
2584 log_start
2585 show_hint "Should timeout since client in VRF uses default VRF password"
2586 run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP6} &
2587 run_cmd nettest -6 -s -M ${MD5_WRONG_PW} -m ${NSB_IP6} &
2588 sleep 1
2589 run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_WRONG_PW}
2590 log_test $? 2 "MD5: VRF: Single address config in default VRF and VRF, conn in VRF with default VRF pw"
2591
2592 log_start
2593 run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET6} &
2594 run_cmd nettest -6 -s -M ${MD5_WRONG_PW} -m ${NS_NET6} &
2595 sleep 1
2596 run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_PW}
2597 log_test $? 0 "MD5: VRF: Prefix config in default VRF and VRF, conn in VRF"
2598
2599 log_start
2600 run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET6} &
2601 run_cmd nettest -6 -s -M ${MD5_WRONG_PW} -m ${NS_NET6} &
2602 sleep 1
2603 run_cmd_nsc nettest -6 -r ${NSA_IP6} -X ${MD5_WRONG_PW}
2604 log_test $? 0 "MD5: VRF: Prefix config in default VRF and VRF, conn in default VRF"
2605
2606 log_start
2607 show_hint "Should timeout since client in default VRF uses VRF password"
2608 run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET6} &
2609 run_cmd nettest -6 -s -M ${MD5_WRONG_PW} -m ${NS_NET6} &
2610 sleep 1
2611 run_cmd_nsc nettest -6 -r ${NSA_IP6} -X ${MD5_PW}
2612 log_test $? 2 "MD5: VRF: Prefix config in default VRF and VRF, conn in default VRF with VRF pw"
2613
2614 log_start
2615 show_hint "Should timeout since client in VRF uses default VRF password"
2616 run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET6} &
2617 run_cmd nettest -6 -s -M ${MD5_WRONG_PW} -m ${NS_NET6} &
2618 sleep 1
2619 run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_WRONG_PW}
2620 log_test $? 2 "MD5: VRF: Prefix config in default VRF and VRF, conn in VRF with default VRF pw"
2621
2622
2623
2624
2625 log_start
2626 run_cmd nettest -6 -s -I ${NSA_DEV} -M ${MD5_PW} -m ${NSB_IP6}
2627 log_test $? 1 "MD5: VRF: Device must be a VRF - single address"
2628
2629 log_start
2630 run_cmd nettest -6 -s -I ${NSA_DEV} -M ${MD5_PW} -m ${NS_NET6}
2631 log_test $? 1 "MD5: VRF: Device must be a VRF - prefix"
2632
2633 }
2634
2635 ipv6_tcp_novrf()
2636 {
2637 local a
2638
2639
2640
2641
2642 for a in ${NSA_IP6} ${NSA_LO_IP6} ${NSA_LINKIP6}%${NSB_DEV}
2643 do
2644 log_start
2645 run_cmd nettest -6 -s &
2646 sleep 1
2647 run_cmd_nsb nettest -6 -r ${a}
2648 log_test_addr ${a} $? 0 "Global server"
2649 done
2650
2651
2652 for a in ${NSA_IP6} ${NSA_LO_IP6} ${NSA_LINKIP6}%${NSB_DEV}
2653 do
2654 log_start
2655 show_hint "Should fail 'Connection refused'"
2656 run_cmd_nsb nettest -6 -r ${a}
2657 log_test_addr ${a} $? 1 "No server"
2658 done
2659
2660
2661
2662
2663 for a in ${NSB_IP6} ${NSB_LO_IP6} ${NSB_LINKIP6}%${NSA_DEV}
2664 do
2665 log_start
2666 run_cmd_nsb nettest -6 -s &
2667 sleep 1
2668 run_cmd nettest -6 -r ${a}
2669 log_test_addr ${a} $? 0 "Client"
2670 done
2671
2672 for a in ${NSB_IP6} ${NSB_LO_IP6} ${NSB_LINKIP6}%${NSA_DEV}
2673 do
2674 log_start
2675 run_cmd_nsb nettest -6 -s &
2676 sleep 1
2677 run_cmd nettest -6 -r ${a} -d ${NSA_DEV}
2678 log_test_addr ${a} $? 0 "Client, device bind"
2679 done
2680
2681 for a in ${NSB_IP6} ${NSB_LO_IP6} ${NSB_LINKIP6}%${NSA_DEV}
2682 do
2683 log_start
2684 show_hint "Should fail 'Connection refused'"
2685 run_cmd nettest -6 -r ${a} -d ${NSA_DEV}
2686 log_test_addr ${a} $? 1 "No server, device client"
2687 done
2688
2689
2690
2691
2692 for a in ${NSA_IP6} ${NSA_LO_IP6} ::1
2693 do
2694 log_start
2695 run_cmd nettest -6 -s &
2696 sleep 1
2697 run_cmd nettest -6 -r ${a}
2698 log_test_addr ${a} $? 0 "Global server, local connection"
2699 done
2700
2701 a=${NSA_IP6}
2702 log_start
2703 run_cmd nettest -6 -s -I ${NSA_DEV} -3 ${NSA_DEV} &
2704 sleep 1
2705 run_cmd nettest -6 -r ${a} -0 ${a}
2706 log_test_addr ${a} $? 0 "Device server, unbound client, local connection"
2707
2708 for a in ${NSA_LO_IP6} ::1
2709 do
2710 log_start
2711 show_hint "Should fail 'Connection refused' since addresses on loopback are out of device scope"
2712 run_cmd nettest -6 -s -I ${NSA_DEV} &
2713 sleep 1
2714 run_cmd nettest -6 -r ${a}
2715 log_test_addr ${a} $? 1 "Device server, unbound client, local connection"
2716 done
2717
2718 a=${NSA_IP6}
2719 log_start
2720 run_cmd nettest -6 -s &
2721 sleep 1
2722 run_cmd nettest -6 -r ${a} -d ${NSA_DEV} -0 ${a}
2723 log_test_addr ${a} $? 0 "Global server, device client, local connection"
2724
2725 for a in ${NSA_LO_IP6} ::1
2726 do
2727 log_start
2728 show_hint "Should fail 'Connection refused' since addresses on loopback are out of device scope"
2729 run_cmd nettest -6 -s &
2730 sleep 1
2731 run_cmd nettest -6 -r ${a} -d ${NSA_DEV}
2732 log_test_addr ${a} $? 1 "Global server, device client, local connection"
2733 done
2734
2735 for a in ${NSA_IP6} ${NSA_LINKIP6}
2736 do
2737 log_start
2738 run_cmd nettest -6 -s -I ${NSA_DEV} -3 ${NSA_DEV} &
2739 sleep 1
2740 run_cmd nettest -6 -d ${NSA_DEV} -r ${a}
2741 log_test_addr ${a} $? 0 "Device server, device client, local conn"
2742 done
2743
2744 for a in ${NSA_IP6} ${NSA_LINKIP6}
2745 do
2746 log_start
2747 show_hint "Should fail 'Connection refused'"
2748 run_cmd nettest -6 -d ${NSA_DEV} -r ${a}
2749 log_test_addr ${a} $? 1 "No server, device client, local conn"
2750 done
2751
2752 ipv6_tcp_md5_novrf
2753 }
2754
2755 ipv6_tcp_vrf()
2756 {
2757 local a
2758
2759
2760 log_subsection "Global server disabled"
2761
2762 set_sysctl net.ipv4.tcp_l3mdev_accept=0
2763
2764
2765
2766
2767 for a in ${NSA_IP6} ${VRF_IP6} ${NSA_LINKIP6}%${NSB_DEV}
2768 do
2769 log_start
2770 show_hint "Should fail 'Connection refused' since global server with VRF is disabled"
2771 run_cmd nettest -6 -s &
2772 sleep 1
2773 run_cmd_nsb nettest -6 -r ${a}
2774 log_test_addr ${a} $? 1 "Global server"
2775 done
2776
2777 for a in ${NSA_IP6} ${VRF_IP6}
2778 do
2779 log_start
2780 run_cmd nettest -6 -s -I ${VRF} -3 ${VRF} &
2781 sleep 1
2782 run_cmd_nsb nettest -6 -r ${a}
2783 log_test_addr ${a} $? 0 "VRF server"
2784 done
2785
2786
2787 a=${NSA_LINKIP6}%${NSB_DEV}
2788 log_start
2789 run_cmd nettest -6 -s -I ${VRF} -3 ${NSA_DEV} &
2790 sleep 1
2791 run_cmd_nsb nettest -6 -r ${a}
2792 log_test_addr ${a} $? 0 "VRF server"
2793
2794 for a in ${NSA_IP6} ${VRF_IP6} ${NSA_LINKIP6}%${NSB_DEV}
2795 do
2796 log_start
2797 run_cmd nettest -6 -s -I ${NSA_DEV} -3 ${NSA_DEV} &
2798 sleep 1
2799 run_cmd_nsb nettest -6 -r ${a}
2800 log_test_addr ${a} $? 0 "Device server"
2801 done
2802
2803
2804 for a in ${NSA_IP6} ${VRF_IP6} ${NSA_LINKIP6}%${NSB_DEV}
2805 do
2806 log_start
2807 show_hint "Should fail 'Connection refused'"
2808 run_cmd_nsb nettest -6 -r ${a}
2809 log_test_addr ${a} $? 1 "No server"
2810 done
2811
2812
2813 a=${NSA_IP6}
2814 log_start
2815 show_hint "Should fail 'Connection refused' since global server with VRF is disabled"
2816 run_cmd nettest -6 -s &
2817 sleep 1
2818 run_cmd nettest -6 -r ${a} -d ${NSA_DEV}
2819 log_test_addr ${a} $? 1 "Global server, local connection"
2820
2821
2822 setup_vrf_dup
2823 ipv6_tcp_md5
2824 cleanup_vrf_dup
2825
2826
2827
2828
2829 log_subsection "VRF Global server enabled"
2830 set_sysctl net.ipv4.tcp_l3mdev_accept=1
2831
2832 for a in ${NSA_IP6} ${VRF_IP6}
2833 do
2834 log_start
2835 run_cmd nettest -6 -s -3 ${VRF} &
2836 sleep 1
2837 run_cmd_nsb nettest -6 -r ${a}
2838 log_test_addr ${a} $? 0 "Global server"
2839 done
2840
2841 for a in ${NSA_IP6} ${VRF_IP6}
2842 do
2843 log_start
2844 run_cmd nettest -6 -s -I ${VRF} -3 ${VRF} &
2845 sleep 1
2846 run_cmd_nsb nettest -6 -r ${a}
2847 log_test_addr ${a} $? 0 "VRF server"
2848 done
2849
2850
2851 a=${NSA_LINKIP6}%${NSB_DEV}
2852 log_start
2853 run_cmd nettest -6 -s -3 ${NSA_DEV} &
2854 sleep 1
2855 run_cmd_nsb nettest -6 -r ${a}
2856 log_test_addr ${a} $? 0 "Global server"
2857
2858 log_start
2859 run_cmd nettest -6 -s -I ${VRF} -3 ${NSA_DEV} &
2860 sleep 1
2861 run_cmd_nsb nettest -6 -r ${a}
2862 log_test_addr ${a} $? 0 "VRF server"
2863
2864 for a in ${NSA_IP6} ${NSA_LINKIP6}%${NSB_DEV}
2865 do
2866 log_start
2867 run_cmd nettest -6 -s -I ${NSA_DEV} -3 ${NSA_DEV} &
2868 sleep 1
2869 run_cmd_nsb nettest -6 -r ${a}
2870 log_test_addr ${a} $? 0 "Device server"
2871 done
2872
2873
2874 for a in ${NSA_IP6} ${VRF_IP6} ${NSA_LINKIP6}%${NSB_DEV}
2875 do
2876 log_start
2877 show_hint "Should fail 'Connection refused'"
2878 run_cmd_nsb nettest -6 -r ${a}
2879 log_test_addr ${a} $? 1 "No server"
2880 done
2881
2882
2883 for a in ${NSA_IP6} ${VRF_IP6}
2884 do
2885 log_start
2886 show_hint "Fails 'Connection refused' since client is not in VRF"
2887 run_cmd nettest -6 -s -I ${VRF} &
2888 sleep 1
2889 run_cmd nettest -6 -r ${a}
2890 log_test_addr ${a} $? 1 "Global server, local connection"
2891 done
2892
2893
2894
2895
2896
2897 for a in ${NSB_IP6} ${NSB_LO_IP6}
2898 do
2899 log_start
2900 run_cmd_nsb nettest -6 -s &
2901 sleep 1
2902 run_cmd nettest -6 -r ${a} -d ${VRF}
2903 log_test_addr ${a} $? 0 "Client, VRF bind"
2904 done
2905
2906 a=${NSB_LINKIP6}
2907 log_start
2908 show_hint "Fails since VRF device does not allow linklocal addresses"
2909 run_cmd_nsb nettest -6 -s &
2910 sleep 1
2911 run_cmd nettest -6 -r ${a} -d ${VRF}
2912 log_test_addr ${a} $? 1 "Client, VRF bind"
2913
2914 for a in ${NSB_IP6} ${NSB_LO_IP6} ${NSB_LINKIP6}
2915 do
2916 log_start
2917 run_cmd_nsb nettest -6 -s &
2918 sleep 1
2919 run_cmd nettest -6 -r ${a} -d ${NSA_DEV}
2920 log_test_addr ${a} $? 0 "Client, device bind"
2921 done
2922
2923 for a in ${NSB_IP6} ${NSB_LO_IP6}
2924 do
2925 log_start
2926 show_hint "Should fail 'Connection refused'"
2927 run_cmd nettest -6 -r ${a} -d ${VRF}
2928 log_test_addr ${a} $? 1 "No server, VRF client"
2929 done
2930
2931 for a in ${NSB_IP6} ${NSB_LO_IP6} ${NSB_LINKIP6}
2932 do
2933 log_start
2934 show_hint "Should fail 'Connection refused'"
2935 run_cmd nettest -6 -r ${a} -d ${NSA_DEV}
2936 log_test_addr ${a} $? 1 "No server, device client"
2937 done
2938
2939 for a in ${NSA_IP6} ${VRF_IP6} ::1
2940 do
2941 log_start
2942 run_cmd nettest -6 -s -I ${VRF} -3 ${VRF} &
2943 sleep 1
2944 run_cmd nettest -6 -r ${a} -d ${VRF} -0 ${a}
2945 log_test_addr ${a} $? 0 "VRF server, VRF client, local connection"
2946 done
2947
2948 a=${NSA_IP6}
2949 log_start
2950 run_cmd nettest -6 -s -I ${VRF} -3 ${VRF} &
2951 sleep 1
2952 run_cmd nettest -6 -r ${a} -d ${NSA_DEV} -0 ${a}
2953 log_test_addr ${a} $? 0 "VRF server, device client, local connection"
2954
2955 a=${NSA_IP6}
2956 log_start
2957 show_hint "Should fail since unbound client is out of VRF scope"
2958 run_cmd nettest -6 -s -I ${VRF} &
2959 sleep 1
2960 run_cmd nettest -6 -r ${a}
2961 log_test_addr ${a} $? 1 "VRF server, unbound client, local connection"
2962
2963 log_start
2964 run_cmd nettest -6 -s -I ${NSA_DEV} -3 ${NSA_DEV} &
2965 sleep 1
2966 run_cmd nettest -6 -r ${a} -d ${VRF} -0 ${a}
2967 log_test_addr ${a} $? 0 "Device server, VRF client, local connection"
2968
2969 for a in ${NSA_IP6} ${NSA_LINKIP6}
2970 do
2971 log_start
2972 run_cmd nettest -6 -s -I ${NSA_DEV} -3 ${NSA_DEV} &
2973 sleep 1
2974 run_cmd nettest -6 -r ${a} -d ${NSA_DEV} -0 ${a}
2975 log_test_addr ${a} $? 0 "Device server, device client, local connection"
2976 done
2977 }
2978
2979 ipv6_tcp()
2980 {
2981 log_section "IPv6/TCP"
2982 log_subsection "No VRF"
2983 setup
2984
2985
2986
2987 log_subsection "tcp_l3mdev_accept disabled"
2988 set_sysctl net.ipv4.tcp_l3mdev_accept=0
2989 ipv6_tcp_novrf
2990 log_subsection "tcp_l3mdev_accept enabled"
2991 set_sysctl net.ipv4.tcp_l3mdev_accept=1
2992 ipv6_tcp_novrf
2993
2994 log_subsection "With VRF"
2995 setup "yes"
2996 ipv6_tcp_vrf
2997 }
2998
2999
3000
3001
3002 ipv6_udp_novrf()
3003 {
3004 local a
3005
3006
3007
3008
3009 for a in ${NSA_IP6} ${NSA_LINKIP6}%${NSB_DEV}
3010 do
3011 log_start
3012 run_cmd nettest -6 -D -s -3 ${NSA_DEV} &
3013 sleep 1
3014 run_cmd_nsb nettest -6 -D -r ${a}
3015 log_test_addr ${a} $? 0 "Global server"
3016
3017 log_start
3018 run_cmd nettest -6 -D -I ${NSA_DEV} -s -3 ${NSA_DEV} &
3019 sleep 1
3020 run_cmd_nsb nettest -6 -D -r ${a}
3021 log_test_addr ${a} $? 0 "Device server"
3022 done
3023
3024 a=${NSA_LO_IP6}
3025 log_start
3026 run_cmd nettest -6 -D -s -3 ${NSA_DEV} &
3027 sleep 1
3028 run_cmd_nsb nettest -6 -D -r ${a}
3029 log_test_addr ${a} $? 0 "Global server"
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042 for a in ${NSA_IP6} ${NSA_LO_IP6} ${NSA_LINKIP6}%${NSB_DEV}
3043 do
3044 log_start
3045 show_hint "Should fail 'Connection refused' since there is no server"
3046 run_cmd_nsb nettest -6 -D -r ${a}
3047 log_test_addr ${a} $? 1 "No server"
3048 done
3049
3050
3051
3052
3053 for a in ${NSB_IP6} ${NSB_LO_IP6} ${NSB_LINKIP6}%${NSA_DEV}
3054 do
3055 log_start
3056 run_cmd_nsb nettest -6 -D -s &
3057 sleep 1
3058 run_cmd nettest -6 -D -r ${a} -0 ${NSA_IP6}
3059 log_test_addr ${a} $? 0 "Client"
3060
3061 log_start
3062 run_cmd_nsb nettest -6 -D -s &
3063 sleep 1
3064 run_cmd nettest -6 -D -r ${a} -d ${NSA_DEV} -0 ${NSA_IP6}
3065 log_test_addr ${a} $? 0 "Client, device bind"
3066
3067 log_start
3068 run_cmd_nsb nettest -6 -D -s &
3069 sleep 1
3070 run_cmd nettest -6 -D -r ${a} -d ${NSA_DEV} -C -0 ${NSA_IP6}
3071 log_test_addr ${a} $? 0 "Client, device send via cmsg"
3072
3073 log_start
3074 run_cmd_nsb nettest -6 -D -s &
3075 sleep 1
3076 run_cmd nettest -6 -D -r ${a} -d ${NSA_DEV} -S -0 ${NSA_IP6}
3077 log_test_addr ${a} $? 0 "Client, device bind via IPV6_UNICAST_IF"
3078
3079 log_start
3080 show_hint "Should fail 'Connection refused'"
3081 run_cmd nettest -6 -D -r ${a}
3082 log_test_addr ${a} $? 1 "No server, unbound client"
3083
3084 log_start
3085 show_hint "Should fail 'Connection refused'"
3086 run_cmd nettest -6 -D -r ${a} -d ${NSA_DEV}
3087 log_test_addr ${a} $? 1 "No server, device client"
3088 done
3089
3090
3091
3092
3093 for a in ${NSA_IP6} ${NSA_LO_IP6} ::1
3094 do
3095 log_start
3096 run_cmd nettest -6 -D -s &
3097 sleep 1
3098 run_cmd nettest -6 -D -r ${a} -0 ${a} -1 ${a}
3099 log_test_addr ${a} $? 0 "Global server, local connection"
3100 done
3101
3102 a=${NSA_IP6}
3103 log_start
3104 run_cmd nettest -6 -s -D -I ${NSA_DEV} -3 ${NSA_DEV} &
3105 sleep 1
3106 run_cmd nettest -6 -D -r ${a}
3107 log_test_addr ${a} $? 0 "Device server, unbound client, local connection"
3108
3109 for a in ${NSA_LO_IP6} ::1
3110 do
3111 log_start
3112 show_hint "Should fail 'Connection refused' since address is out of device scope"
3113 run_cmd nettest -6 -s -D -I ${NSA_DEV} &
3114 sleep 1
3115 run_cmd nettest -6 -D -r ${a}
3116 log_test_addr ${a} $? 1 "Device server, local connection"
3117 done
3118
3119 a=${NSA_IP6}
3120 log_start
3121 run_cmd nettest -6 -s -D &
3122 sleep 1
3123 run_cmd nettest -6 -D -d ${NSA_DEV} -r ${a}
3124 log_test_addr ${a} $? 0 "Global server, device client, local connection"
3125
3126 log_start
3127 run_cmd nettest -6 -s -D &
3128 sleep 1
3129 run_cmd nettest -6 -D -d ${NSA_DEV} -C -r ${a}
3130 log_test_addr ${a} $? 0 "Global server, device send via cmsg, local connection"
3131
3132 log_start
3133 run_cmd nettest -6 -s -D &
3134 sleep 1
3135 run_cmd nettest -6 -D -d ${NSA_DEV} -S -r ${a}
3136 log_test_addr ${a} $? 0 "Global server, device client via IPV6_UNICAST_IF, local connection"
3137
3138 for a in ${NSA_LO_IP6} ::1
3139 do
3140 log_start
3141 show_hint "Should fail 'No route to host' since addresses on loopback are out of device scope"
3142 run_cmd nettest -6 -D -s &
3143 sleep 1
3144 run_cmd nettest -6 -D -r ${a} -d ${NSA_DEV}
3145 log_test_addr ${a} $? 1 "Global server, device client, local connection"
3146
3147 log_start
3148 show_hint "Should fail 'No route to host' since addresses on loopback are out of device scope"
3149 run_cmd nettest -6 -D -s &
3150 sleep 1
3151 run_cmd nettest -6 -D -r ${a} -d ${NSA_DEV} -C
3152 log_test_addr ${a} $? 1 "Global server, device send via cmsg, local connection"
3153
3154 log_start
3155 show_hint "Should fail 'No route to host' since addresses on loopback are out of device scope"
3156 run_cmd nettest -6 -D -s &
3157 sleep 1
3158 run_cmd nettest -6 -D -r ${a} -d ${NSA_DEV} -S
3159 log_test_addr ${a} $? 1 "Global server, device client via IP_UNICAST_IF, local connection"
3160 done
3161
3162 a=${NSA_IP6}
3163 log_start
3164 run_cmd nettest -6 -D -s -I ${NSA_DEV} -3 ${NSA_DEV} &
3165 sleep 1
3166 run_cmd nettest -6 -D -d ${NSA_DEV} -r ${a} -0 ${a}
3167 log_test_addr ${a} $? 0 "Device server, device client, local conn"
3168
3169 log_start
3170 show_hint "Should fail 'Connection refused'"
3171 run_cmd nettest -6 -D -d ${NSA_DEV} -r ${a}
3172 log_test_addr ${a} $? 1 "No server, device client, local conn"
3173
3174
3175 run_cmd_nsb ip -6 addr del ${NSB_IP6}/64 dev ${NSB_DEV}
3176 run_cmd_nsb ip -6 ro add ${NSA_IP6}/128 dev ${NSB_DEV}
3177 log_start
3178 run_cmd nettest -6 -s -D &
3179 sleep 1
3180 run_cmd_nsb nettest -6 -D -r ${NSA_IP6}
3181 log_test $? 0 "UDP in - LLA to GUA"
3182
3183 run_cmd_nsb ip -6 ro del ${NSA_IP6}/128 dev ${NSB_DEV}
3184 run_cmd_nsb ip -6 addr add ${NSB_IP6}/64 dev ${NSB_DEV} nodad
3185 }
3186
3187 ipv6_udp_vrf()
3188 {
3189 local a
3190
3191
3192 log_subsection "Global server disabled"
3193 set_sysctl net.ipv4.udp_l3mdev_accept=0
3194
3195
3196
3197
3198 for a in ${NSA_IP6} ${VRF_IP6}
3199 do
3200 log_start
3201 show_hint "Should fail 'Connection refused' since global server is disabled"
3202 run_cmd nettest -6 -D -s &
3203 sleep 1
3204 run_cmd_nsb nettest -6 -D -r ${a}
3205 log_test_addr ${a} $? 1 "Global server"
3206 done
3207
3208 for a in ${NSA_IP6} ${VRF_IP6}
3209 do
3210 log_start
3211 run_cmd nettest -6 -D -I ${VRF} -s -3 ${NSA_DEV} &
3212 sleep 1
3213 run_cmd_nsb nettest -6 -D -r ${a}
3214 log_test_addr ${a} $? 0 "VRF server"
3215 done
3216
3217 for a in ${NSA_IP6} ${VRF_IP6}
3218 do
3219 log_start
3220 run_cmd nettest -6 -D -I ${NSA_DEV} -s -3 ${NSA_DEV} &
3221 sleep 1
3222 run_cmd_nsb nettest -6 -D -r ${a}
3223 log_test_addr ${a} $? 0 "Enslaved device server"
3224 done
3225
3226
3227 for a in ${NSA_IP6} ${VRF_IP6}
3228 do
3229 log_start
3230 show_hint "Should fail 'Connection refused' since there is no server"
3231 run_cmd_nsb nettest -6 -D -r ${a}
3232 log_test_addr ${a} $? 1 "No server"
3233 done
3234
3235
3236
3237
3238 for a in ${NSA_IP6} ${VRF_IP6}
3239 do
3240 log_start
3241 show_hint "Should fail 'Connection refused' since global server is disabled"
3242 run_cmd nettest -6 -D -s &
3243 sleep 1
3244 run_cmd nettest -6 -D -d ${VRF} -r ${a}
3245 log_test_addr ${a} $? 1 "Global server, VRF client, local conn"
3246 done
3247
3248 for a in ${NSA_IP6} ${VRF_IP6}
3249 do
3250 log_start
3251 run_cmd nettest -6 -D -I ${VRF} -s &
3252 sleep 1
3253 run_cmd nettest -6 -D -d ${VRF} -r ${a}
3254 log_test_addr ${a} $? 0 "VRF server, VRF client, local conn"
3255 done
3256
3257 a=${NSA_IP6}
3258 log_start
3259 show_hint "Should fail 'Connection refused' since global server is disabled"
3260 run_cmd nettest -6 -D -s &
3261 sleep 1
3262 run_cmd nettest -6 -D -d ${NSA_DEV} -r ${a}
3263 log_test_addr ${a} $? 1 "Global server, device client, local conn"
3264
3265 log_start
3266 run_cmd nettest -6 -D -I ${VRF} -s -3 ${NSA_DEV} &
3267 sleep 1
3268 run_cmd nettest -6 -D -d ${NSA_DEV} -r ${a}
3269 log_test_addr ${a} $? 0 "VRF server, device client, local conn"
3270
3271 log_start
3272 run_cmd nettest -6 -D -I ${NSA_DEV} -s -3 ${NSA_DEV} &
3273 sleep 1
3274 run_cmd nettest -6 -D -d ${VRF} -r ${a}
3275 log_test_addr ${a} $? 0 "Enslaved device server, VRF client, local conn"
3276
3277 log_start
3278 run_cmd nettest -6 -D -I ${NSA_DEV} -s -3 ${NSA_DEV} &
3279 sleep 1
3280 run_cmd nettest -6 -D -d ${NSA_DEV} -r ${a}
3281 log_test_addr ${a} $? 0 "Enslaved device server, device client, local conn"
3282
3283
3284 log_subsection "Global server enabled"
3285 set_sysctl net.ipv4.udp_l3mdev_accept=1
3286
3287
3288
3289
3290 for a in ${NSA_IP6} ${VRF_IP6}
3291 do
3292 log_start
3293 run_cmd nettest -6 -D -s -3 ${NSA_DEV} &
3294 sleep 1
3295 run_cmd_nsb nettest -6 -D -r ${a}
3296 log_test_addr ${a} $? 0 "Global server"
3297 done
3298
3299 for a in ${NSA_IP6} ${VRF_IP6}
3300 do
3301 log_start
3302 run_cmd nettest -6 -D -I ${VRF} -s -3 ${NSA_DEV} &
3303 sleep 1
3304 run_cmd_nsb nettest -6 -D -r ${a}
3305 log_test_addr ${a} $? 0 "VRF server"
3306 done
3307
3308 for a in ${NSA_IP6} ${VRF_IP6}
3309 do
3310 log_start
3311 run_cmd nettest -6 -D -I ${NSA_DEV} -s -3 ${NSA_DEV} &
3312 sleep 1
3313 run_cmd_nsb nettest -6 -D -r ${a}
3314 log_test_addr ${a} $? 0 "Enslaved device server"
3315 done
3316
3317
3318 for a in ${NSA_IP6} ${VRF_IP6}
3319 do
3320 log_start
3321 run_cmd_nsb nettest -6 -D -r ${a}
3322 log_test_addr ${a} $? 1 "No server"
3323 done
3324
3325
3326
3327
3328 log_start
3329 run_cmd_nsb nettest -6 -D -s &
3330 sleep 1
3331 run_cmd nettest -6 -D -d ${VRF} -r ${NSB_IP6}
3332 log_test $? 0 "VRF client"
3333
3334
3335 log_start
3336 run_cmd nettest -6 -D -d ${VRF} -r ${NSB_IP6}
3337 log_test $? 1 "No server, VRF client"
3338
3339 log_start
3340 run_cmd_nsb nettest -6 -D -s &
3341 sleep 1
3342 run_cmd nettest -6 -D -d ${NSA_DEV} -r ${NSB_IP6}
3343 log_test $? 0 "Enslaved device client"
3344
3345
3346 log_start
3347 run_cmd nettest -6 -D -d ${NSA_DEV} -r ${NSB_IP6}
3348 log_test $? 1 "No server, enslaved device client"
3349
3350
3351
3352
3353 a=${NSA_IP6}
3354 log_start
3355 run_cmd nettest -6 -D -s -3 ${NSA_DEV} &
3356 sleep 1
3357 run_cmd nettest -6 -D -d ${VRF} -r ${a}
3358 log_test_addr ${a} $? 0 "Global server, VRF client, local conn"
3359
3360
3361 run_cmd nettest -6 -D -I ${VRF} -s -3 ${NSA_DEV} &
3362 sleep 1
3363 run_cmd nettest -6 -D -d ${VRF} -r ${a}
3364 log_test_addr ${a} $? 0 "VRF server, VRF client, local conn"
3365
3366
3367 a=${VRF_IP6}
3368 log_start
3369 run_cmd nettest -6 -D -s -3 ${VRF} &
3370 sleep 1
3371 run_cmd nettest -6 -D -d ${VRF} -r ${a}
3372 log_test_addr ${a} $? 0 "Global server, VRF client, local conn"
3373
3374 log_start
3375 run_cmd nettest -6 -D -I ${VRF} -s -3 ${VRF} &
3376 sleep 1
3377 run_cmd nettest -6 -D -d ${VRF} -r ${a}
3378 log_test_addr ${a} $? 0 "VRF server, VRF client, local conn"
3379
3380
3381 for a in ${NSA_IP6} ${VRF_IP6}
3382 do
3383 log_start
3384 run_cmd nettest -6 -D -d ${VRF} -r ${a}
3385 log_test_addr ${a} $? 1 "No server, VRF client, local conn"
3386 done
3387
3388
3389 a=${NSA_IP6}
3390 log_start
3391 run_cmd nettest -6 -D -s -3 ${NSA_DEV} &
3392 sleep 1
3393 run_cmd nettest -6 -D -d ${NSA_DEV} -r ${a}
3394 log_test_addr ${a} $? 0 "Global server, device client, local conn"
3395
3396 log_start
3397 run_cmd nettest -6 -D -I ${VRF} -s -3 ${NSA_DEV} &
3398 sleep 1
3399 run_cmd nettest -6 -D -d ${NSA_DEV} -r ${a}
3400 log_test_addr ${a} $? 0 "VRF server, device client, local conn"
3401
3402 log_start
3403 run_cmd nettest -6 -D -I ${NSA_DEV} -s -3 ${NSA_DEV} &
3404 sleep 1
3405 run_cmd nettest -6 -D -d ${VRF} -r ${a}
3406 log_test_addr ${a} $? 0 "Device server, VRF client, local conn"
3407
3408 log_start
3409 run_cmd nettest -6 -D -I ${NSA_DEV} -s -3 ${NSA_DEV} &
3410 sleep 1
3411 run_cmd nettest -6 -D -d ${NSA_DEV} -r ${a}
3412 log_test_addr ${a} $? 0 "Device server, device client, local conn"
3413
3414 log_start
3415 run_cmd nettest -6 -D -d ${NSA_DEV} -r ${a}
3416 log_test_addr ${a} $? 1 "No server, device client, local conn"
3417
3418
3419
3420 log_start
3421 run_cmd nettest -6 -D -s &
3422 sleep 1
3423 run_cmd_nsb nettest -6 -D -d ${NSB_DEV} -r ${NSA_LINKIP6}
3424 log_test $? 0 "Global server, linklocal IP"
3425
3426 log_start
3427 run_cmd_nsb nettest -6 -D -d ${NSB_DEV} -r ${NSA_LINKIP6}
3428 log_test $? 1 "No server, linklocal IP"
3429
3430
3431 log_start
3432 run_cmd_nsb nettest -6 -D -s &
3433 sleep 1
3434 run_cmd nettest -6 -D -d ${NSA_DEV} -r ${NSB_LINKIP6}
3435 log_test $? 0 "Enslaved device client, linklocal IP"
3436
3437 log_start
3438 run_cmd nettest -6 -D -d ${NSA_DEV} -r ${NSB_LINKIP6}
3439 log_test $? 1 "No server, device client, peer linklocal IP"
3440
3441
3442 log_start
3443 run_cmd nettest -6 -D -s &
3444 sleep 1
3445 run_cmd nettest -6 -D -d ${NSA_DEV} -r ${NSA_LINKIP6}
3446 log_test $? 0 "Enslaved device client, local conn - linklocal IP"
3447
3448 log_start
3449 run_cmd nettest -6 -D -d ${NSA_DEV} -r ${NSA_LINKIP6}
3450 log_test $? 1 "No server, device client, local conn - linklocal IP"
3451
3452
3453 run_cmd_nsb ip -6 addr del ${NSB_IP6}/64 dev ${NSB_DEV}
3454 run_cmd_nsb ip -6 ro add ${NSA_IP6}/128 dev ${NSB_DEV}
3455 log_start
3456 run_cmd nettest -6 -s -D &
3457 sleep 1
3458 run_cmd_nsb nettest -6 -D -r ${NSA_IP6}
3459 log_test $? 0 "UDP in - LLA to GUA"
3460
3461 run_cmd_nsb ip -6 ro del ${NSA_IP6}/128 dev ${NSB_DEV}
3462 run_cmd_nsb ip -6 addr add ${NSB_IP6}/64 dev ${NSB_DEV} nodad
3463 }
3464
3465 ipv6_udp()
3466 {
3467
3468 set_sysctl net.ipv4.udp_early_demux=1
3469
3470 log_section "IPv6/UDP"
3471 log_subsection "No VRF"
3472 setup
3473
3474
3475
3476 log_subsection "udp_l3mdev_accept disabled"
3477 set_sysctl net.ipv4.udp_l3mdev_accept=0
3478 ipv6_udp_novrf
3479 log_subsection "udp_l3mdev_accept enabled"
3480 set_sysctl net.ipv4.udp_l3mdev_accept=1
3481 ipv6_udp_novrf
3482
3483 log_subsection "With VRF"
3484 setup "yes"
3485 ipv6_udp_vrf
3486 }
3487
3488
3489
3490
3491 ipv6_addr_bind_novrf()
3492 {
3493
3494
3495
3496 for a in ${NSA_IP6} ${NSA_LO_IP6}
3497 do
3498 log_start
3499 run_cmd nettest -6 -s -R -P ipv6-icmp -l ${a} -b
3500 log_test_addr ${a} $? 0 "Raw socket bind to local address"
3501
3502 log_start
3503 run_cmd nettest -6 -s -R -P ipv6-icmp -l ${a} -I ${NSA_DEV} -b
3504 log_test_addr ${a} $? 0 "Raw socket bind to local address after device bind"
3505 done
3506
3507
3508
3509
3510 a=${NL_IP6}
3511 log_start
3512 run_cmd nettest -6 -s -R -P icmp -f -l ${a} -I ${NSA_DEV} -b
3513 log_test_addr ${a} $? 0 "Raw socket bind to nonlocal address"
3514
3515
3516
3517
3518 a=${NSA_IP6}
3519 log_start
3520 run_cmd nettest -6 -s -l ${a} -t1 -b
3521 log_test_addr ${a} $? 0 "TCP socket bind to local address"
3522
3523 log_start
3524 run_cmd nettest -6 -s -l ${a} -I ${NSA_DEV} -t1 -b
3525 log_test_addr ${a} $? 0 "TCP socket bind to local address after device bind"
3526
3527
3528
3529
3530 a=${NSA_LO_IP6}
3531 log_start
3532 show_hint "Tecnically should fail since address is not on device but kernel allows"
3533 run_cmd nettest -6 -s -l ${a} -I ${NSA_DEV} -t1 -b
3534 log_test_addr ${a} $? 0 "TCP socket bind to out of scope local address"
3535 }
3536
3537 ipv6_addr_bind_vrf()
3538 {
3539
3540
3541
3542 for a in ${NSA_IP6} ${VRF_IP6}
3543 do
3544 log_start
3545 run_cmd nettest -6 -s -R -P ipv6-icmp -l ${a} -I ${VRF} -b
3546 log_test_addr ${a} $? 0 "Raw socket bind to local address after vrf bind"
3547
3548 log_start
3549 run_cmd nettest -6 -s -R -P ipv6-icmp -l ${a} -I ${NSA_DEV} -b
3550 log_test_addr ${a} $? 0 "Raw socket bind to local address after device bind"
3551 done
3552
3553 a=${NSA_LO_IP6}
3554 log_start
3555 show_hint "Address on loopback is out of VRF scope"
3556 run_cmd nettest -6 -s -R -P ipv6-icmp -l ${a} -I ${VRF} -b
3557 log_test_addr ${a} $? 1 "Raw socket bind to invalid local address after vrf bind"
3558
3559
3560
3561
3562 a=${NL_IP6}
3563 log_start
3564 run_cmd nettest -6 -s -R -P icmp -f -l ${a} -I ${VRF} -b
3565 log_test_addr ${a} $? 0 "Raw socket bind to nonlocal address after VRF bind"
3566
3567
3568
3569
3570
3571 for a in ${NSA_IP6} ${VRF_IP6}
3572 do
3573 log_start
3574 run_cmd nettest -6 -s -l ${a} -I ${VRF} -t1 -b
3575 log_test_addr ${a} $? 0 "TCP socket bind to local address with VRF bind"
3576 done
3577
3578 a=${NSA_IP6}
3579 log_start
3580 run_cmd nettest -6 -s -l ${a} -I ${NSA_DEV} -t1 -b
3581 log_test_addr ${a} $? 0 "TCP socket bind to local address with device bind"
3582
3583
3584
3585
3586
3587 a=${VRF_IP6}
3588 log_start
3589 show_hint "Tecnically should fail since address is not on device but kernel allows"
3590 run_cmd nettest -6 -s -l ${a} -I ${NSA_DEV} -t1 -b
3591 log_test_addr ${a} $? 0 "TCP socket bind to VRF address with device bind"
3592
3593 a=${NSA_LO_IP6}
3594 log_start
3595 show_hint "Address on loopback out of scope for VRF"
3596 run_cmd nettest -6 -s -l ${a} -I ${VRF} -t1 -b
3597 log_test_addr ${a} $? 1 "TCP socket bind to invalid local address for VRF"
3598
3599 log_start
3600 show_hint "Address on loopback out of scope for device in VRF"
3601 run_cmd nettest -6 -s -l ${a} -I ${NSA_DEV} -t1 -b
3602 log_test_addr ${a} $? 1 "TCP socket bind to invalid local address for device bind"
3603
3604 }
3605
3606 ipv6_addr_bind()
3607 {
3608 log_section "IPv6 address binds"
3609
3610 log_subsection "No VRF"
3611 setup
3612 ipv6_addr_bind_novrf
3613
3614 log_subsection "With VRF"
3615 setup "yes"
3616 ipv6_addr_bind_vrf
3617 }
3618
3619
3620
3621
3622 ipv6_rt()
3623 {
3624 local desc="$1"
3625 local varg="-6 $2"
3626 local with_vrf="yes"
3627 local a
3628
3629
3630
3631
3632 for a in ${NSA_IP6} ${VRF_IP6}
3633 do
3634 log_start
3635 run_cmd nettest ${varg} -s &
3636 sleep 1
3637 run_cmd_nsb nettest ${varg} -r ${a} &
3638 sleep 3
3639 run_cmd ip link del ${VRF}
3640 sleep 1
3641 log_test_addr ${a} 0 0 "${desc}, global server"
3642
3643 setup ${with_vrf}
3644 done
3645
3646 for a in ${NSA_IP6} ${VRF_IP6}
3647 do
3648 log_start
3649 run_cmd nettest ${varg} -I ${VRF} -s &
3650 sleep 1
3651 run_cmd_nsb nettest ${varg} -r ${a} &
3652 sleep 3
3653 run_cmd ip link del ${VRF}
3654 sleep 1
3655 log_test_addr ${a} 0 0 "${desc}, VRF server"
3656
3657 setup ${with_vrf}
3658 done
3659
3660 for a in ${NSA_IP6} ${VRF_IP6}
3661 do
3662 log_start
3663 run_cmd nettest ${varg} -I ${NSA_DEV} -s &
3664 sleep 1
3665 run_cmd_nsb nettest ${varg} -r ${a} &
3666 sleep 3
3667 run_cmd ip link del ${VRF}
3668 sleep 1
3669 log_test_addr ${a} 0 0 "${desc}, enslaved device server"
3670
3671 setup ${with_vrf}
3672 done
3673
3674
3675
3676
3677 log_start
3678 run_cmd_nsb nettest ${varg} -s &
3679 sleep 1
3680 run_cmd nettest ${varg} -d ${VRF} -r ${NSB_IP6} &
3681 sleep 3
3682 run_cmd ip link del ${VRF}
3683 sleep 1
3684 log_test 0 0 "${desc}, VRF client"
3685
3686 setup ${with_vrf}
3687
3688 log_start
3689 run_cmd_nsb nettest ${varg} -s &
3690 sleep 1
3691 run_cmd nettest ${varg} -d ${NSA_DEV} -r ${NSB_IP6} &
3692 sleep 3
3693 run_cmd ip link del ${VRF}
3694 sleep 1
3695 log_test 0 0 "${desc}, enslaved device client"
3696
3697 setup ${with_vrf}
3698
3699
3700
3701
3702
3703 for a in ${NSA_IP6} ${VRF_IP6}
3704 do
3705 log_start
3706 run_cmd nettest ${varg} -s &
3707 sleep 1
3708 run_cmd nettest ${varg} -d ${VRF} -r ${a} &
3709 sleep 3
3710 run_cmd ip link del ${VRF}
3711 sleep 1
3712 log_test_addr ${a} 0 0 "${desc}, global server, VRF client"
3713
3714 setup ${with_vrf}
3715 done
3716
3717 for a in ${NSA_IP6} ${VRF_IP6}
3718 do
3719 log_start
3720 run_cmd nettest ${varg} -I ${VRF} -s &
3721 sleep 1
3722 run_cmd nettest ${varg} -d ${VRF} -r ${a} &
3723 sleep 3
3724 run_cmd ip link del ${VRF}
3725 sleep 1
3726 log_test_addr ${a} 0 0 "${desc}, VRF server and client"
3727
3728 setup ${with_vrf}
3729 done
3730
3731 a=${NSA_IP6}
3732 log_start
3733 run_cmd nettest ${varg} -s &
3734 sleep 1
3735 run_cmd nettest ${varg} -d ${NSA_DEV} -r ${a} &
3736 sleep 3
3737 run_cmd ip link del ${VRF}
3738 sleep 1
3739 log_test_addr ${a} 0 0 "${desc}, global server, device client"
3740
3741 setup ${with_vrf}
3742
3743 log_start
3744 run_cmd nettest ${varg} -I ${VRF} -s &
3745 sleep 1
3746 run_cmd nettest ${varg} -d ${NSA_DEV} -r ${a} &
3747 sleep 3
3748 run_cmd ip link del ${VRF}
3749 sleep 1
3750 log_test_addr ${a} 0 0 "${desc}, VRF server, device client"
3751
3752 setup ${with_vrf}
3753
3754 log_start
3755 run_cmd nettest ${varg} -I ${NSA_DEV} -s &
3756 sleep 1
3757 run_cmd nettest ${varg} -d ${NSA_DEV} -r ${a} &
3758 sleep 3
3759 run_cmd ip link del ${VRF}
3760 sleep 1
3761 log_test_addr ${a} 0 0 "${desc}, device server, device client"
3762 }
3763
3764 ipv6_ping_rt()
3765 {
3766 local with_vrf="yes"
3767 local a
3768
3769 a=${NSA_IP6}
3770 log_start
3771 run_cmd_nsb ${ping6} -f ${a} &
3772 sleep 3
3773 run_cmd ip link del ${VRF}
3774 sleep 1
3775 log_test_addr ${a} 0 0 "Device delete with active traffic - ping in"
3776
3777 setup ${with_vrf}
3778
3779 log_start
3780 run_cmd ${ping6} -f ${NSB_IP6} -I ${VRF} &
3781 sleep 1
3782 run_cmd ip link del ${VRF}
3783 sleep 1
3784 log_test_addr ${a} 0 0 "Device delete with active traffic - ping out"
3785 }
3786
3787 ipv6_runtime()
3788 {
3789 log_section "Run time tests - ipv6"
3790
3791 setup "yes"
3792 ipv6_ping_rt
3793
3794 setup "yes"
3795 ipv6_rt "TCP active socket" "-n -1"
3796
3797 setup "yes"
3798 ipv6_rt "TCP passive socket" "-i"
3799
3800 setup "yes"
3801 ipv6_rt "UDP active socket" "-D -n -1"
3802 }
3803
3804
3805
3806
3807 netfilter_tcp_reset()
3808 {
3809 local a
3810
3811 for a in ${NSA_IP} ${VRF_IP}
3812 do
3813 log_start
3814 run_cmd nettest -s &
3815 sleep 1
3816 run_cmd_nsb nettest -r ${a}
3817 log_test_addr ${a} $? 1 "Global server, reject with TCP-reset on Rx"
3818 done
3819 }
3820
3821 netfilter_icmp()
3822 {
3823 local stype="$1"
3824 local arg
3825 local a
3826
3827 [ "${stype}" = "UDP" ] && arg="-D"
3828
3829 for a in ${NSA_IP} ${VRF_IP}
3830 do
3831 log_start
3832 run_cmd nettest ${arg} -s &
3833 sleep 1
3834 run_cmd_nsb nettest ${arg} -r ${a}
3835 log_test_addr ${a} $? 1 "Global ${stype} server, Rx reject icmp-port-unreach"
3836 done
3837 }
3838
3839 ipv4_netfilter()
3840 {
3841 log_section "IPv4 Netfilter"
3842 log_subsection "TCP reset"
3843
3844 setup "yes"
3845 run_cmd iptables -A INPUT -p tcp --dport 12345 -j REJECT --reject-with tcp-reset
3846
3847 netfilter_tcp_reset
3848
3849 log_start
3850 log_subsection "ICMP unreachable"
3851
3852 log_start
3853 run_cmd iptables -F
3854 run_cmd iptables -A INPUT -p tcp --dport 12345 -j REJECT --reject-with icmp-port-unreachable
3855 run_cmd iptables -A INPUT -p udp --dport 12345 -j REJECT --reject-with icmp-port-unreachable
3856
3857 netfilter_icmp "TCP"
3858 netfilter_icmp "UDP"
3859
3860 log_start
3861 iptables -F
3862 }
3863
3864 netfilter_tcp6_reset()
3865 {
3866 local a
3867
3868 for a in ${NSA_IP6} ${VRF_IP6}
3869 do
3870 log_start
3871 run_cmd nettest -6 -s &
3872 sleep 1
3873 run_cmd_nsb nettest -6 -r ${a}
3874 log_test_addr ${a} $? 1 "Global server, reject with TCP-reset on Rx"
3875 done
3876 }
3877
3878 netfilter_icmp6()
3879 {
3880 local stype="$1"
3881 local arg
3882 local a
3883
3884 [ "${stype}" = "UDP" ] && arg="$arg -D"
3885
3886 for a in ${NSA_IP6} ${VRF_IP6}
3887 do
3888 log_start
3889 run_cmd nettest -6 -s ${arg} &
3890 sleep 1
3891 run_cmd_nsb nettest -6 ${arg} -r ${a}
3892 log_test_addr ${a} $? 1 "Global ${stype} server, Rx reject icmp-port-unreach"
3893 done
3894 }
3895
3896 ipv6_netfilter()
3897 {
3898 log_section "IPv6 Netfilter"
3899 log_subsection "TCP reset"
3900
3901 setup "yes"
3902 run_cmd ip6tables -A INPUT -p tcp --dport 12345 -j REJECT --reject-with tcp-reset
3903
3904 netfilter_tcp6_reset
3905
3906 log_subsection "ICMP unreachable"
3907
3908 log_start
3909 run_cmd ip6tables -F
3910 run_cmd ip6tables -A INPUT -p tcp --dport 12345 -j REJECT --reject-with icmp6-port-unreachable
3911 run_cmd ip6tables -A INPUT -p udp --dport 12345 -j REJECT --reject-with icmp6-port-unreachable
3912
3913 netfilter_icmp6 "TCP"
3914 netfilter_icmp6 "UDP"
3915
3916 log_start
3917 ip6tables -F
3918 }
3919
3920
3921
3922
3923
3924
3925
3926 use_case_br()
3927 {
3928 setup "yes"
3929
3930 setup_cmd ip link set ${NSA_DEV} down
3931 setup_cmd ip addr del dev ${NSA_DEV} ${NSA_IP}/24
3932 setup_cmd ip -6 addr del dev ${NSA_DEV} ${NSA_IP6}/64
3933
3934 setup_cmd ip link add br0 type bridge
3935 setup_cmd ip addr add dev br0 ${NSA_IP}/24
3936 setup_cmd ip -6 addr add dev br0 ${NSA_IP6}/64 nodad
3937
3938 setup_cmd ip li set ${NSA_DEV} master br0
3939 setup_cmd ip li set ${NSA_DEV} up
3940 setup_cmd ip li set br0 up
3941 setup_cmd ip li set br0 vrf ${VRF}
3942
3943 rmmod br_netfilter 2>/dev/null
3944 sleep 5
3945
3946 run_cmd ip neigh flush all
3947 run_cmd ping -c1 -w1 -I br0 ${NSB_IP}
3948 log_test $? 0 "Bridge into VRF - IPv4 ping out"
3949
3950 run_cmd ip neigh flush all
3951 run_cmd ${ping6} -c1 -w1 -I br0 ${NSB_IP6}
3952 log_test $? 0 "Bridge into VRF - IPv6 ping out"
3953
3954 run_cmd ip neigh flush all
3955 run_cmd_nsb ping -c1 -w1 ${NSA_IP}
3956 log_test $? 0 "Bridge into VRF - IPv4 ping in"
3957
3958 run_cmd ip neigh flush all
3959 run_cmd_nsb ${ping6} -c1 -w1 ${NSA_IP6}
3960 log_test $? 0 "Bridge into VRF - IPv6 ping in"
3961
3962 modprobe br_netfilter
3963 if [ $? -eq 0 ]; then
3964 run_cmd ip neigh flush all
3965 run_cmd ping -c1 -w1 -I br0 ${NSB_IP}
3966 log_test $? 0 "Bridge into VRF with br_netfilter - IPv4 ping out"
3967
3968 run_cmd ip neigh flush all
3969 run_cmd ${ping6} -c1 -w1 -I br0 ${NSB_IP6}
3970 log_test $? 0 "Bridge into VRF with br_netfilter - IPv6 ping out"
3971
3972 run_cmd ip neigh flush all
3973 run_cmd_nsb ping -c1 -w1 ${NSA_IP}
3974 log_test $? 0 "Bridge into VRF with br_netfilter - IPv4 ping in"
3975
3976 run_cmd ip neigh flush all
3977 run_cmd_nsb ${ping6} -c1 -w1 ${NSA_IP6}
3978 log_test $? 0 "Bridge into VRF with br_netfilter - IPv6 ping in"
3979 fi
3980
3981 setup_cmd ip li set br0 nomaster
3982 setup_cmd ip li add br0.100 link br0 type vlan id 100
3983 setup_cmd ip li set br0.100 vrf ${VRF} up
3984 setup_cmd ip addr add dev br0.100 172.16.101.1/24
3985 setup_cmd ip -6 addr add dev br0.100 2001:db8:101::1/64 nodad
3986
3987 setup_cmd_nsb ip li add vlan100 link ${NSB_DEV} type vlan id 100
3988 setup_cmd_nsb ip addr add dev vlan100 172.16.101.2/24
3989 setup_cmd_nsb ip -6 addr add dev vlan100 2001:db8:101::2/64 nodad
3990 setup_cmd_nsb ip li set vlan100 up
3991 sleep 1
3992
3993 rmmod br_netfilter 2>/dev/null
3994
3995 run_cmd ip neigh flush all
3996 run_cmd ping -c1 -w1 -I br0.100 172.16.101.2
3997 log_test $? 0 "Bridge vlan into VRF - IPv4 ping out"
3998
3999 run_cmd ip neigh flush all
4000 run_cmd ${ping6} -c1 -w1 -I br0.100 2001:db8:101::2
4001 log_test $? 0 "Bridge vlan into VRF - IPv6 ping out"
4002
4003 run_cmd ip neigh flush all
4004 run_cmd_nsb ping -c1 -w1 172.16.101.1
4005 log_test $? 0 "Bridge vlan into VRF - IPv4 ping in"
4006
4007 run_cmd ip neigh flush all
4008 run_cmd_nsb ${ping6} -c1 -w1 2001:db8:101::1
4009 log_test $? 0 "Bridge vlan into VRF - IPv6 ping in"
4010
4011 modprobe br_netfilter
4012 if [ $? -eq 0 ]; then
4013 run_cmd ip neigh flush all
4014 run_cmd ping -c1 -w1 -I br0.100 172.16.101.2
4015 log_test $? 0 "Bridge vlan into VRF with br_netfilter - IPv4 ping out"
4016
4017 run_cmd ip neigh flush all
4018 run_cmd ${ping6} -c1 -w1 -I br0.100 2001:db8:101::2
4019 log_test $? 0 "Bridge vlan into VRF with br_netfilter - IPv6 ping out"
4020
4021 run_cmd ip neigh flush all
4022 run_cmd_nsb ping -c1 -w1 172.16.101.1
4023 log_test $? 0 "Bridge vlan into VRF - IPv4 ping in"
4024
4025 run_cmd ip neigh flush all
4026 run_cmd_nsb ${ping6} -c1 -w1 2001:db8:101::1
4027 log_test $? 0 "Bridge vlan into VRF - IPv6 ping in"
4028 fi
4029
4030 setup_cmd ip li del br0 2>/dev/null
4031 setup_cmd_nsb ip li del vlan100 2>/dev/null
4032 }
4033
4034
4035
4036
4037 use_case_ping_lla_multi()
4038 {
4039 setup_lla_only
4040
4041 setup_cmd_nsb sysctl -qw net.ipv6.icmp.echo_ignore_multicast=1
4042 setup_cmd_nsc sysctl -qw net.ipv6.icmp.echo_ignore_multicast=1
4043
4044 log_start
4045 run_cmd_nsb ping -c1 -w1 ${MCAST}%${NSB_DEV}
4046 log_test_addr ${MCAST}%${NSB_DEV} $? 0 "Pre cycle, ping out ns-B"
4047
4048 run_cmd_nsc ping -c1 -w1 ${MCAST}%${NSC_DEV}
4049 log_test_addr ${MCAST}%${NSC_DEV} $? 0 "Pre cycle, ping out ns-C"
4050
4051
4052 setup_cmd ip link set ${NSA_DEV} down
4053 setup_cmd ip link set ${NSA_DEV} up
4054 sleep 1
4055
4056 log_start
4057 run_cmd_nsb ping -c1 -w1 ${MCAST}%${NSB_DEV}
4058 log_test_addr ${MCAST}%${NSB_DEV} $? 0 "Post cycle ${NSA} ${NSA_DEV}, ping out ns-B"
4059 run_cmd_nsc ping -c1 -w1 ${MCAST}%${NSC_DEV}
4060 log_test_addr ${MCAST}%${NSC_DEV} $? 0 "Post cycle ${NSA} ${NSA_DEV}, ping out ns-C"
4061
4062
4063 setup_cmd ip link set ${NSA_DEV2} down
4064 setup_cmd ip link set ${NSA_DEV2} up
4065 sleep 1
4066
4067 log_start
4068 run_cmd_nsb ping -c1 -w1 ${MCAST}%${NSB_DEV}
4069 log_test_addr ${MCAST}%${NSB_DEV} $? 0 "Post cycle ${NSA} ${NSA_DEV2}, ping out ns-B"
4070 run_cmd_nsc ping -c1 -w1 ${MCAST}%${NSC_DEV}
4071 log_test_addr ${MCAST}%${NSC_DEV} $? 0 "Post cycle ${NSA} ${NSA_DEV2}, ping out ns-C"
4072 }
4073
4074
4075
4076 use_case_snat_on_vrf()
4077 {
4078 setup "yes"
4079
4080 local port="12345"
4081
4082 run_cmd iptables -t nat -A POSTROUTING -p tcp -m tcp --dport ${port} -j SNAT --to-source ${NSA_LO_IP} -o ${VRF}
4083 run_cmd ip6tables -t nat -A POSTROUTING -p tcp -m tcp --dport ${port} -j SNAT --to-source ${NSA_LO_IP6} -o ${VRF}
4084
4085 run_cmd_nsb nettest -s -l ${NSB_IP} -p ${port} &
4086 sleep 1
4087 run_cmd nettest -d ${VRF} -r ${NSB_IP} -p ${port}
4088 log_test $? 0 "IPv4 TCP connection over VRF with SNAT"
4089
4090 run_cmd_nsb nettest -6 -s -l ${NSB_IP6} -p ${port} &
4091 sleep 1
4092 run_cmd nettest -6 -d ${VRF} -r ${NSB_IP6} -p ${port}
4093 log_test $? 0 "IPv6 TCP connection over VRF with SNAT"
4094
4095
4096 run_cmd iptables -t nat -D POSTROUTING -p tcp -m tcp --dport ${port} -j SNAT --to-source ${NSA_LO_IP} -o ${VRF}
4097 run_cmd ip6tables -t nat -D POSTROUTING -p tcp -m tcp --dport ${port} -j SNAT --to-source ${NSA_LO_IP6} -o ${VRF}
4098 }
4099
4100 use_cases()
4101 {
4102 log_section "Use cases"
4103 log_subsection "Device enslaved to bridge"
4104 use_case_br
4105 log_subsection "Ping LLA with multiple interfaces"
4106 use_case_ping_lla_multi
4107 log_subsection "SNAT on VRF"
4108 use_case_snat_on_vrf
4109 }
4110
4111
4112
4113
4114 usage()
4115 {
4116 cat <<EOF
4117 usage: ${0
4118
4119 -4 IPv4 tests only
4120 -6 IPv6 tests only
4121 -t <test> Test name/set to run
4122 -p Pause on fail
4123 -P Pause after each test
4124 -v Be verbose
4125
4126 Tests:
4127 $TESTS_IPV4 $TESTS_IPV6 $TESTS_OTHER
4128 EOF
4129 }
4130
4131
4132
4133
4134 TESTS_IPV4="ipv4_ping ipv4_tcp ipv4_udp ipv4_bind ipv4_runtime ipv4_netfilter"
4135 TESTS_IPV6="ipv6_ping ipv6_tcp ipv6_udp ipv6_bind ipv6_runtime ipv6_netfilter"
4136 TESTS_OTHER="use_cases"
4137
4138 PAUSE_ON_FAIL=no
4139 PAUSE=no
4140
4141 while getopts :46t:pPvh o
4142 do
4143 case $o in
4144 4) TESTS=ipv4;;
4145 6) TESTS=ipv6;;
4146 t) TESTS=$OPTARG;;
4147 p) PAUSE_ON_FAIL=yes;;
4148 P) PAUSE=yes;;
4149 v) VERBOSE=1;;
4150 h) usage; exit 0;;
4151 *) usage; exit 1;;
4152 esac
4153 done
4154
4155
4156 [ "${PAUSE}" = "yes" ] && PAUSE_ON_FAIL=no
4157
4158
4159
4160
4161 if [ -z "$TESTS" ]; then
4162 TESTS="$TESTS_IPV4 $TESTS_IPV6 $TESTS_OTHER"
4163 elif [ "$TESTS" = "ipv4" ]; then
4164 TESTS="$TESTS_IPV4"
4165 elif [ "$TESTS" = "ipv6" ]; then
4166 TESTS="$TESTS_IPV6"
4167 fi
4168
4169 which nettest >/dev/null
4170 if [ $? -ne 0 ]; then
4171 echo "'nettest' command not found; skipping tests"
4172 exit $ksft_skip
4173 fi
4174
4175 declare -i nfail=0
4176 declare -i nsuccess=0
4177
4178 for t in $TESTS
4179 do
4180 case $t in
4181 ipv4_ping|ping) ipv4_ping;;
4182 ipv4_tcp|tcp) ipv4_tcp;;
4183 ipv4_udp|udp) ipv4_udp;;
4184 ipv4_bind|bind) ipv4_addr_bind;;
4185 ipv4_runtime) ipv4_runtime;;
4186 ipv4_netfilter) ipv4_netfilter;;
4187
4188 ipv6_ping|ping6) ipv6_ping;;
4189 ipv6_tcp|tcp6) ipv6_tcp;;
4190 ipv6_udp|udp6) ipv6_udp;;
4191 ipv6_bind|bind6) ipv6_addr_bind;;
4192 ipv6_runtime) ipv6_runtime;;
4193 ipv6_netfilter) ipv6_netfilter;;
4194
4195 use_cases) use_cases;;
4196
4197
4198 setup) setup; exit 0;;
4199 vrf_setup) setup "yes"; exit 0;;
4200 esac
4201 done
4202
4203 cleanup 2>/dev/null
4204
4205 printf "\nTests passed: %3d\n" ${nsuccess}
4206 printf "Tests failed: %3d\n" ${nfail}
4207
4208 if [ $nfail -ne 0 ]; then
4209 exit 1
4210 elif [ $nsuccess -eq 0 ]; then
4211 exit $ksft_skip
4212 fi
4213
4214 exit 0