@@ -52,8 +52,9 @@ exec docker run -d \
5252# Wait for eth2-server eth0 to be ready
5353sleep 2
5454
55- # Add 2002:1234::1234 IP to loopback of eth2-server
55+ # Add 2002:1234::1234 IP to loopback and 2001:db8:1::1 to eth0 of eth2-server
5656exec docker exec -i $eth2_server ip -6 addr add 2002:1234::1234/128 dev lo
57+ exec docker exec -i $eth2_server ip -6 addr add 2001:db8:1::1/64 dev eth0
5758
5859# Configure and start Kea DHCPv6 PD server on eth2-server (delegating 2005:1234:abcd:0::/56)
5960set kea_conf {{"Dhcp6": {"interfaces-config": {"interfaces": ["eth0"]}, "lease-database": {"type": "memfile", "persist": true, "name": "/var/lib/kea/kea-leases6.csv"}, "preferred-lifetime": 54000, "valid-lifetime": 86400, "subnet6": [{"subnet": "fd00:db8:1::/64", "interface": "eth0", "pd-pools": [{"prefix": "2005:1234:abcd:0::", "prefix-len": 56, "delegated-len": 64}], "rapid-commit": true}], "loggers": [{"name": "kea-dhcp6", "output_options": [{"output": "stdout"}], "severity": "DEBUG", "debuglevel": 99}]}}}
@@ -70,16 +71,7 @@ exec docker exec -i $eth2_server sysctl -w net.ipv6.conf.eth0.forwarding=1
7071set radvd_conf "interface eth0\n{\n AdvSendAdvert on;\n MinRtrAdvInterval 3;\n MaxRtrAdvInterval 10;\n prefix 2001:db8:1::/64\n {\n AdvOnLink on;\n AdvAutonomous on;\n AdvRouterAddr on;\n };\n};"
7172exec docker exec -i $eth2_server bash -c "echo '$radvd_conf' > /etc/radvd.conf"
7273exec docker exec -i $eth2_server chmod 600 /etc/radvd.conf
73- exec docker exec -d $eth2_server bash -c "radvd -C /etc/radvd.conf -u root -n -m stderr >/var/log/radvd.log 2>&1"
74- sleep 1
75-
76- if {[catch {exec docker exec -i $eth2_server pgrep radvd} radvd_pid]} {
77- if {![catch {exec docker exec -i $eth2_server cat /var/log/radvd.log} radvd_log]} {
78- send_user "\n=== radvd.log ===\n$radvd_log\n=== end of radvd.log ===\n"
79- }
80- fail "Failed to start radvd on eth2-server: $radvd_pid"
81- }
82- send_user "radvd started on eth2-server with PID: [string trim $radvd_pid]\n"
74+ start_radvd $eth2_server
8375
8476# 2. Start Eth_1 container (Local Infrastructure Host)
8577send_user "Starting Eth_1 container (Local Host)...\n"
@@ -127,9 +119,8 @@ exec docker exec -i $container sysctl -w net.ipv6.conf.all.accept_ra=2
127119exec docker exec -i $container sysctl -w net.ipv6.conf.eth0.accept_ra=2
128120
129121# Delete Docker's static default route so the DUT only relies on RAs
130- set dut_pid [exec docker inspect -f {{{.State.Pid}}} $container]
131- set dut_pid [string trim $dut_pid]
132- exec nsenter -t $dut_pid -n ip -6 route del default dev eth0
122+ # We can run it via docker exec now that iproute2 package is added to the container
123+ catch { exec docker exec -i $container ip -6 route del default dev eth0 }
133124
134125# Setup active dataset on OTBR via ot-ctl
135126exec docker exec -i $container ot-ctl thread stop
@@ -170,6 +161,17 @@ if {!$prefix_acquired} {
170161}
171162send_user "Successfully Discovered Delegated Prefix: $delegated_prefix\n"
172163
164+ proc start_radvd {server} {
165+ exec docker exec -d $server bash -c "radvd -C /etc/radvd.conf -u root -n -m stderr >/var/log/radvd.log 2>&1"
166+ sleep 1
167+ if {[catch {exec docker exec -i $server pgrep radvd} radvd_pid]} {
168+ if {![catch {exec docker exec -i $server cat /var/log/radvd.log} radvd_log]} {
169+ send_user "\n=== radvd.log ===\n$radvd_log\n=== end of radvd.log ===\n"
170+ }
171+ fail "Failed to start radvd on $server: $radvd_pid"
172+ }
173+ send_user "radvd started on $server with PID: [string trim $radvd_pid]\n"
174+ }
173175
174176# Verify OMR prefix properties in netdata (subprefix of 2005:1234:abcd:0::/56, /64, default route, med preference)
175177# AND verify default route ::/0 with Route sub-TLV (NP=0)
@@ -333,8 +335,8 @@ send_user "Step 7: Reconfiguring radvd to stop advertising default route...\n"
333335catch {exec docker exec -i $eth2_server pkill radvd}
334336set radvd_conf_no_default "interface eth0\n{\n AdvSendAdvert on;\n MinRtrAdvInterval 3;\n MaxRtrAdvInterval 10;\n AdvDefaultLifetime 0;\n prefix 2001:db8:1::/64\n {\n AdvOnLink on;\n AdvAutonomous on;\n AdvRouterAddr on;\n };\n};"
335337exec docker exec -i $eth2_server bash -c "echo '$radvd_conf_no_default' > /etc/radvd.conf"
336- exec docker exec -d $eth2_server bash -c "radvd -C /etc/radvd.conf -u root -n -m stderr >/var/log/radvd.log 2>&1"
337- sleep 5
338+ start_radvd $eth2_server
339+ sleep 4
338340
339341# Step 8: Verify DUT *still* advertises default route in Thread Network Data
340342send_user "Step 8: Verifying default route is still advertised in Thread Network Data...\n"
@@ -392,9 +394,9 @@ send_user "Ping to Local Host verified successfully.\n"
392394# Step 10: Ping 2002:1234::1234 from ED_1. Ping response MUST NOT be received. Ping request MUST NOT be sent on AIL.
393395send_user "Step 10: Verifying Ping to Internet Server does NOT work and is NOT forwarded...\n"
394396
395- # Start tcpdump on eth2-server to detect any ICMPv6 echo requests
397+ # Start tcpdump on eth2-server to detect any ICMPv6 echo requests (line-buffered with -l)
396398# Run in background via exec docker exec -d. Timeout in 8 seconds to allow ping tool to finish.
397- exec docker exec -d $eth2_server bash -c "timeout 8 tcpdump -c 1 -i eth0 'icmp6 and ip6\[40 \] == 128' > /var/log/tcpdump.log 2>&1"
399+ exec docker exec -d $eth2_server bash -c "timeout 8 tcpdump -l - c 1 -i eth0 'icmp6 and icmp6\[0 \] == 128' > /var/log/tcpdump.log 2>&1"
398400sleep 1
399401
400402# Send ping from ED_1
@@ -415,11 +417,15 @@ expect {
415417 }
416418}
417419if {$ping_received} {
420+ catch {
421+ set radvd_log [exec docker exec -i $eth2_server cat /var/log/radvd.log]
422+ send_user "\n=== radvd.log ===\n$radvd_log\n=== end of radvd.log ===\n"
423+ }
418424 fail "Ping from ED_1 to Internet Server succeeded, but it was expected to fail"
419425}
420426
421427# Check if tcpdump captured any packet
422- sleep 5
428+ sleep 9
423429set tcpdump_log [exec docker exec -i $eth2_server cat /var/log/tcpdump.log]
424430send_user "tcpdump log on eth2-server:\n$tcpdump_log\n"
425431if {![string match "*listening on*" $tcpdump_log]} {
@@ -435,8 +441,8 @@ send_user "Step 11: Reconfiguring radvd to start advertising default route again
435441catch {exec docker exec -i $eth2_server pkill radvd}
436442set radvd_conf_with_default "interface eth0\n{\n AdvSendAdvert on;\n MinRtrAdvInterval 3;\n MaxRtrAdvInterval 10;\n AdvDefaultLifetime 875;\n prefix 2001:db8:1::/64\n {\n AdvOnLink on;\n AdvAutonomous on;\n AdvRouterAddr on;\n };\n};"
437443exec docker exec -i $eth2_server bash -c "echo '$radvd_conf_with_default' > /etc/radvd.conf"
438- exec docker exec -d $eth2_server bash -c "radvd -C /etc/radvd.conf -u root -n -m stderr >/var/log/radvd.log 2>&1"
439- sleep 5
444+ start_radvd $eth2_server
445+ sleep 4
440446
441447# Step 12: Verify default route is advertised in Thread Network Data
442448send_user "Step 12: Verifying default route is advertised in Thread Network Data again...\n"
0 commit comments