From 0fbc789d0b104fb42c7a59e7641e100d1a015c60 Mon Sep 17 00:00:00 2001 From: Haoli Du Date: Tue, 13 Jul 2021 04:57:32 +0000 Subject: [PATCH 1/5] Allow custom faux mac prefix --- .github/workflows/main.yaml | 4 ++++ bin/run_controller | 2 ++ bin/run_faux | 11 +++++++---- bin/run_test_set | 7 +++++-- bin/setup_stack | 4 ++++ bin/stack_functions | 25 +++++++++++++++++++----- controller/bin/rename_site_config | 5 +++++ etc/start_faux | 4 ++-- testing/test_access | 32 +++++++++++++++---------------- testing/test_flat | 2 +- testing/test_fot | 18 ++++++++--------- topo/dva/forch/behaviors.yaml | 2 +- 12 files changed, 76 insertions(+), 40 deletions(-) create mode 100755 controller/bin/rename_site_config diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml index bed0ee6f2..6b7ffe0f4 100644 --- a/.github/workflows/main.yaml +++ b/.github/workflows/main.yaml @@ -73,8 +73,12 @@ jobs: - name: run python tests run: testing/python_test test_fot - name: setup fot stack + env: + FAUX_MAC_PREFIX: 9a:99:57:1e run: bin/setup_stack devices 5 skip-conn-check dhcp fot - name: run fot integration tests + env: + FAUX_MAC_PREFIX: 9a:99:57:1e run: timeout 20m bin/run_test_set fot - name: setup vxlan stack run: bin/setup_stack devices 5 skip-conn-check dhcp fot vxlan diff --git a/bin/run_controller b/bin/run_controller index 19a4dc978..312ad2039 100755 --- a/bin/run_controller +++ b/bin/run_controller @@ -153,6 +153,8 @@ if [[ -z $vxlan ]]; then docker exec $CONTAINER ip link set data0 up fi +docker exec $CONTAINER /root/bin/rename_site_config $CLEAN_MAC_PREFIX + echo Container $CONTAINER started as $cid while [ ! -e $INSTDIR/$FAUCET_SOCK ]; do diff --git a/bin/run_faux b/bin/run_faux index 422887cb9..337cbc054 100755 --- a/bin/run_faux +++ b/bin/run_faux @@ -2,13 +2,16 @@ ROOT=$(realpath $(dirname $0)/..) postfix= -intf_mac=9a:02:57:1e:8f:00 docker_args= container_prefix=forch-faux image=forch/faux net_opt=--net=none port_num=0 +source bin/stack_functions +set_faux_mac_prefix + +intf_mac=$FAUX_MAC_PREFIX:8f:00 cd $ROOT # If the first argument is a number, then it's a port designation. @@ -22,7 +25,7 @@ if [ $# -gt 0 ] && [ $(($1)) -gt 0 -o "$1" == 0 ]; then mac_port_num=$port_num fi postfix=-$port_num - intf_mac=9a:02:57:1e:$(printf %02x $mac_prefix):$(printf %02x $mac_port_num) + intf_mac=$FAUX_MAC_PREFIX:$(printf %02x $mac_prefix):$(printf %02x $mac_port_num) shift fi @@ -40,7 +43,7 @@ if docker container inspect $CONTAINER --format '{{ .Name }}' > /dev/null 2>&1; docker rm -f $CONTAINER fi -docker_args="$docker_args -e LOCAL_IF=$realintf -e FAUX_NUM=$port_num" +docker_args="$docker_args -e LOCAL_IF=$realintf -e FAUX_NUM=$port_num -e FAUX_MAC_PREFIX=$FAUX_MAC_PREFIX" cid=$(docker run -d --privileged --name $CONTAINER --hostname $CONTAINER $net_opt $docker_args $image ./start_faux $FAUX_ARGS) pid=$(docker inspect --format="{{ .State.Pid }}" $cid) @@ -49,7 +52,7 @@ intf=faux$postfix echo Removing old interface $intf sudo ip link del $intf 2>/dev/null || true -echo Adding new interface to $pid... +echo Adding new interface $intf_mac to $pid... sudo ip link add $intf type veth peer name faux-eth0 addr $intf_mac netns $pid sudo ip link set $intf up diff --git a/bin/run_test_set b/bin/run_test_set index e01d30bbd..06a1a4648 100755 --- a/bin/run_test_set +++ b/bin/run_test_set @@ -10,15 +10,18 @@ if [ -z "$TEST_SET" ]; then fi echo Running $TEST_SET tests... +source bin/stack_functions +set_faux_mac_prefix OUT_DIR=test_out/ rm -rf $OUT_DIR mkdir -p $OUT_DIR echo Writing output to $OUT_DIR -GOLDEN_RESULTS=etc/test_$TEST_SET.out +GOLDEN_RESULTS=$OUT_DIR/golden_test_$TEST_SET.out TEST_RESULTS=$OUT_DIR/test_$TEST_SET.out - +sed "s/9a:02:57:1e/$FAUX_MAC_PREFIX/g" etc/test_$TEST_SET.out > $GOLDEN_RESULTS +sed -i "s/9a02571e/$CLEAN_MAC_PREFIX/g" $GOLDEN_RESULTS testing/test_${TEST_SET} pwd diff --git a/bin/setup_stack b/bin/setup_stack index abf09cfdc..6c10039c7 100755 --- a/bin/setup_stack +++ b/bin/setup_stack @@ -89,6 +89,7 @@ fi rm -rf tcpdump # Clean out directory source bin/stack_functions +set_faux_mac_prefix ########################################################### @@ -173,6 +174,9 @@ if [ -z "$remote" ]; then cp topo/$mode/forch/* $container_inst/forch/ cp topo/$mode/faucet/* $container_inst/faucet/ + + find $container_inst/ -name *.yaml -exec sed -i "s/9a:02:57:1e/$FAUX_MAC_PREFIX/" {} \; + docker kill $container || true if [ -n "$fot" ]; then diff --git a/bin/stack_functions b/bin/stack_functions index 475972993..dbad9e7d9 100644 --- a/bin/stack_functions +++ b/bin/stack_functions @@ -119,6 +119,21 @@ function add_oeth { sudo ovs-vsctl add-port $br_a $iface_a -- set interface $iface_a ofport_request=$pt_a } +function set_faux_mac_prefix { + if [ -z $FAUX_MAC_PREFIX ]; then + FAUX_MAC_PREFIX=9a:02:57:1e + fi + + correct_mac_prefix=`echo $FAUX_MAC_PREFIX | egrep '([0-9a-zA-Z]{2}:){3}[0-9a-zA-Z]{2}'` + if [ -z $correct_mac_prefix ]; then + echo "$FAUX_MAC_PREFIX is an invalid mac prefix. FUAX_MAC_PREFIX should be in the format 'XX:XX:XX:XX'" + false + fi + CLEAN_MAC_PREFIX=`echo $FAUX_MAC_PREFIX | sed 's/://g'` + export FAUX_MAC_PREFIX=$FAUX_MAC_PREFIX + export CLEAN_MAC_PREFIX=$CLEAN_MAC_PREFIX +} + function add_faux { switch=$1 port=$2 @@ -405,9 +420,9 @@ function test_forch { fetch_forch cpn_state fetch_forch process_state fetch_forch list_hosts '' 1 - fetch_forch list_hosts ?eth_src=9a:02:57:1e:8f:01 2 - fetch_forch host_path '?eth_src=9a:02:57:1e:8f:01ð_dst=9a:02:57:1e:8f:02' 1 - fetch_forch host_path '?eth_src=9a:02:57:1e:8f:01&to_egress=true' 2 + fetch_forch list_hosts ?eth_src=$FAUX_MAC_PREFIX:8f:01 2 + fetch_forch host_path "?eth_src=$FAUX_MAC_PREFIX:8f:01ð_dst=$FAUX_MAC_PREFIX:8f:02" 1 + fetch_forch host_path "?eth_src=$FAUX_MAC_PREFIX:8f:01&to_egress=true" 2 echo @system_state$fdesc | tee -a $TEST_RESULTS api_result=$fout_dir/system_state.json @@ -463,9 +478,9 @@ function test_forch { echo @list_hosts$fdesc | tee -a $TEST_RESULTS api_result=$fout_dir/list_hosts1.json - jq '.eth_srcs."9a:02:57:1e:8f:01".url' $api_result | tee -a $TEST_RESULTS + jq ".eth_srcs.'$FAUX_MAC_PREFIX:8f:01'.url" $api_result | tee -a $TEST_RESULTS api_result=$fout_dir/list_hosts2.json - jq '.eth_dsts."9a:02:57:1e:8f:02".url' $api_result | tee -a $TEST_RESULTS + jq ".eth_dsts.'$FAUX_MAC_PREFIX:8f:02'.url" $api_result | tee -a $TEST_RESULTS echo @host_path$fdesc | tee -a $TEST_RESULTS api_result=$fout_dir/host_path1.json diff --git a/controller/bin/rename_site_config b/controller/bin/rename_site_config new file mode 100755 index 000000000..a7634942c --- /dev/null +++ b/controller/bin/rename_site_config @@ -0,0 +1,5 @@ +#!/bin/sh + +for f in `find /site/mac_addrs/ -name '9a02571*'`; do + cp -r $f `echo $f | sed -e "s/9a02571e/$1/g"` +done diff --git a/etc/start_faux b/etc/start_faux index c38d56e82..6b21617ff 100755 --- a/etc/start_faux +++ b/etc/start_faux @@ -52,8 +52,8 @@ ip route if [ -n "${options[dnsmasq]}" ]; then echo Configuring dnsmasq... echo dhcp-range=192.168.1.10,192.168.1.255 >> /etc/dnsmasq.conf - echo dhcp-host=9a:02:57:1e:8f:01,192.168.1.1 >> /etc/dnsmasq.conf - echo dhcp-host=9a:02:57:1e:8f:02,192.168.1.2 >> /etc/dnsmasq.conf + echo dhcp-host=$FAUX_MAC_PREFIX:8f:01,192.168.1.1 >> /etc/dnsmasq.conf + echo dhcp-host=$FAUX_MAC_PREFIX:8f:02,192.168.1.2 >> /etc/dnsmasq.conf dnsmasq --log-facility=/tmp/dnsmasq.log --log-dhcp fi diff --git a/testing/test_access b/testing/test_access index 53301a74d..63a7d5d3b 100755 --- a/testing/test_access +++ b/testing/test_access @@ -26,9 +26,9 @@ function test_access { adesc=access-$1 echo Starting $adesc test... | tee -a $TEST_RESULTS metrics=$(wget localhost:$FAUCET_VARZ_PORT -O- 2>/dev/null) - grep 'nz-kiwi-t2sw1' <<< $metrics | grep -F 'vid="100"' | grep -F ' 1.0' | grep -oF '9a:02:57:1e:8f:01' | tee -a $TEST_RESULTS - grep 'nz-kiwi-t2sw2' <<< $metrics | grep -F 'vid="300"' | grep -F ' 1.0' | grep -oF '9a:02:57:1e:8f:02' | tee -a $TEST_RESULTS - grep 'nz-kiwi-t2sw3' <<< $metrics | grep -F 'vid="300"' | grep -F ' 1.0' | grep -oF '9a:02:57:1e:8f:03' | tee -a $TEST_RESULTS + grep 'nz-kiwi-t2sw1' <<< $metrics | grep -F 'vid="100"' | grep -F ' 1.0' | grep -oF "$FAUX_MAC_PREFIX:8f:01" | tee -a $TEST_RESULTS + grep 'nz-kiwi-t2sw2' <<< $metrics | grep -F 'vid="300"' | grep -F ' 1.0' | grep -oF "$FAUX_MAC_PREFIX:8f:02" | tee -a $TEST_RESULTS + grep 'nz-kiwi-t2sw3' <<< $metrics | grep -F 'vid="300"' | grep -F ' 1.0' | grep -oF "$FAUX_MAC_PREFIX:8f:03" | tee -a $TEST_RESULTS } function test_dva { @@ -80,16 +80,16 @@ function test_dva { api_result=$fout_dir/list_hosts.json echo "@list_hosts $fdesc" | tee -a $TEST_RESULTS - jq '.eth_srcs."9a:02:57:1e:8f:01".vlan.vlan_id' $api_result | tee -a $TEST_RESULTS - jq '.eth_srcs."9a:02:57:1e:8f:01".dva_state' $api_result | tee -a $TEST_RESULTS - jq '.eth_srcs."9a:02:57:1e:8f:01".acls[0].rules[0].description' $api_result | tee -a $TEST_RESULTS - jq '.eth_srcs."9a:02:57:1e:8f:03".vlan.vlan_id' $api_result | tee -a $TEST_RESULTS - jq '.eth_srcs."9a:02:57:1e:8f:03".dva_state' $api_result | tee -a $TEST_RESULTS - jq '.eth_srcs."9a:02:57:1e:8f:03".radius_result.access' $api_result | tee -a $TEST_RESULTS - jq '.eth_srcs."9a:02:57:1e:8f:03".radius_result.segment' $api_result | tee -a $TEST_RESULTS - jq '.eth_srcs."9a:02:57:1e:8f:03".radius_result.role' $api_result | tee -a $TEST_RESULTS + jq ".eth_srcs.'$FAUX_MAC_PREFIX:8f:01'.vlan.vlan_id" $api_result | tee -a $TEST_RESULTS + jq ".eth_srcs.'$FAUX_MAC_PREFIX:8f:01'.dva_state" $api_result | tee -a $TEST_RESULTS + jq ".eth_srcs.'$FAUX_MAC_PREFIX:8f:01'.acls[0].rules[0].description" $api_result | tee -a $TEST_RESULTS + jq ".eth_srcs.'$FAUX_MAC_PREFIX:8f:03'.vlan.vlan_id" $api_result | tee -a $TEST_RESULTS + jq ".eth_srcs.'$FAUX_MAC_PREFIX:8f:03'.dva_state" $api_result | tee -a $TEST_RESULTS + jq ".eth_srcs.'$FAUX_MAC_PREFIX:8f:03'.radius_result.access" $api_result | tee -a $TEST_RESULTS + jq ".eth_srcs.'$FAUX_MAC_PREFIX:8f:03'.radius_result.segment" $api_result | tee -a $TEST_RESULTS + jq ".eth_srcs.'$FAUX_MAC_PREFIX:8f:03'.radius_result.role" $api_result | tee -a $TEST_RESULTS if [ -z "$skip_pkt_count" ]; then - jq '.eth_srcs."9a:02:57:1e:8f:03".acls[0].rules[0].packet_count' $api_result | tee -a $TEST_RESULTS + jq ".eth_srcs.'$FAUX_MAC_PREFIX:8f:03'.acls[0].rules[0].packet_count" $api_result | tee -a $TEST_RESULTS fi } @@ -106,11 +106,11 @@ function test_forch_varz { vlan_4096_count=$(grep 'dataplane_packet_count_vlan' <<< $metrics | grep 'vlan="4096"' | awk '{print $2}') echo $((${vlan_4096_count%.0} > 40)) | tee -a $TEST_RESULTS - grep 'device_state' <<< $metrics | grep '9a:02:57:1e:8f:01' | awk '{print $2}' | tee -a $TEST_RESULTS - grep 'device_state' <<< $metrics | grep '9a:02:57:1e:8f:02' | awk '{print $2}' | tee -a $TEST_RESULTS - grep 'device_state' <<< $metrics | grep '9a:02:57:1e:8f:03' | awk '{print $2}' | tee -a $TEST_RESULTS + grep 'device_state' <<< $metrics | grep "$FAUX_MAC_PREFIX:8f:01" | awk '{print $2}' | tee -a $TEST_RESULTS + grep 'device_state' <<< $metrics | grep "$FAUX_MAC_PREFIX:8f:02" | awk '{print $2}' | tee -a $TEST_RESULTS + grep 'device_state' <<< $metrics | grep "$FAUX_MAC_PREFIX:8f:03" | awk '{print $2}' | tee -a $TEST_RESULTS - grep 'static_mac_vlan' <<< $metrics | grep '9a:02:57:1e:8f:01' | awk '{print $2}' | tee -a $TEST_RESULTS + grep 'static_mac_vlan' <<< $metrics | grep "$FAUX_MAC_PREFIX:8f:01" | awk '{print $2}' | tee -a $TEST_RESULTS } echo %%% initial | tee -a $TEST_RESULTS diff --git a/testing/test_flat b/testing/test_flat index d1b2b86a1..5ee2fcddf 100755 --- a/testing/test_flat +++ b/testing/test_flat @@ -42,7 +42,7 @@ function test_apis { # test list_hosts for device_num in $(seq 1 $devices); do - test_list_hosts $fout_dir/list_hosts.json "9a:02:57:1e:8f:0$device_num" + test_list_hosts $fout_dir/list_hosts.json "$FAUX_MAC_PREFIX:8f:0$device_num" done # test switch_state diff --git a/testing/test_fot b/testing/test_fot index 25b91e9fc..91cb08182 100755 --- a/testing/test_fot +++ b/testing/test_fot @@ -76,30 +76,30 @@ vlan=$($YQ '.dps."nz-kiwi-t2sw1".interfaces."1".native_vlan' $BEHAVIORAL_CONFIG) echo $(( (vlan > 271) + (vlan > 276) )) | tee -a $TEST_RESULTS echo $(( (vlan > 271) + (vlan > 276) )) | tee -a $TEST_RESULTS -monitor_daq_log "Send device result 9a:02:57:1e:8f:01 passed" -monitor_daq_log "Send device result 9a:02:57:1e:8f:02 failed" -monitor_daq_log "Target device 9a02571e8f03 test hold running" -monitor_daq_log "Target device 9a02571e8f05 test hold running" +monitor_daq_log "Send device result $FAUX_MAC_PREFIX:8f:01 passed" +monitor_daq_log "Send device result $FAUX_MAC_PREFIX:8f:02 failed" +monitor_daq_log "Target device ${CLEAN_MAC_PREFIX}8f03 test hold running" +monitor_daq_log "Target device ${CLEAN_MAC_PREFIX}8f05 test hold running" echo `timestamp` stopping forch-faux-3 docker stop forch-faux-3 # Remove device 3 to generate port-down event. -log_count=$(fgrep "9a:02:57:1e:8f:04" $DAQ_BASE/cmdrun.log | wc -l) +log_count=$(fgrep "$FAUX_MAC_PREFIX:8f:04" $DAQ_BASE/cmdrun.log | wc -l) echo Device 04 log count $log_count | tee -a $TEST_RESULTS report_vlans -monitor_forch_log "Device 9a:02:57:1e:8f:04 is entering operational state from unauthenticated state" +monitor_forch_log "Device $FAUX_MAC_PREFIX:8f:04 is entering operational state from unauthenticated state" # Check if it's running in client/server or server/client mode and adjust expectations accordingly. sserv_mode=$(fgrep ssserv $DAQ_BASE/cmdrun.log | wc -l) if [[ $sserv_mode == 0 ]]; then - monitor_daq_log "Remaining target sets: \[9a02571e8f05\]" + monitor_daq_log "Remaining target sets: \[${CLEAN_MAC_PREFIX}8f05\]" expected_timeouts=0 # Device 8f:05 doesn't timeout in this mode, so add artificial result for later on. - echo "9a02571e8f05: ['9a02571e8f05:hold:DaqException']" | sudo tee -a $DAQ_BASE/result.log + echo "${CLEAN_MAC_PREFIX}8f05: ['${CLEAN_MAC_PREFIX}8f05:hold:DaqException']" | sudo tee -a $DAQ_BASE/result.log else - monitor_forch_log "Device 9a:02:57:1e:8f:03 disconnected" + monitor_forch_log "Device $FAUX_MAC_PREFIX:8f:03 disconnected" monitor_daq_log "Remaining target sets: \[\]" expected_timeouts=2 fi diff --git a/topo/dva/forch/behaviors.yaml b/topo/dva/forch/behaviors.yaml index 10ba4f6ea..7105f0903 100644 --- a/topo/dva/forch/behaviors.yaml +++ b/topo/dva/forch/behaviors.yaml @@ -1,5 +1,5 @@ device_mac_behaviors: - "9A:02:57:1E:8F:01": + "9a:02:57:1e:8f:01": segment: INFRA role: hello_world.foo.bar#bazqux@quuxquuz123 "02:03:04:00:00:03": From e6f3c5cfd836dc4798e288700731ce005ac43fdb Mon Sep 17 00:00:00 2001 From: Haoli Du Date: Tue, 13 Jul 2021 16:21:12 +0000 Subject: [PATCH 2/5] Restore test_access and test_flat --- bin/run_controller | 4 +++- testing/test_access | 32 ++++++++++++++++---------------- testing/test_flat | 2 +- 3 files changed, 20 insertions(+), 18 deletions(-) diff --git a/bin/run_controller b/bin/run_controller index 312ad2039..de0d312df 100755 --- a/bin/run_controller +++ b/bin/run_controller @@ -153,7 +153,9 @@ if [[ -z $vxlan ]]; then docker exec $CONTAINER ip link set data0 up fi -docker exec $CONTAINER /root/bin/rename_site_config $CLEAN_MAC_PREFIX +if [ $CLEAN_MAC_PREFIX != "9a02571e" ]; then + docker exec $CONTAINER /root/bin/rename_site_config $CLEAN_MAC_PREFIX +fi echo Container $CONTAINER started as $cid diff --git a/testing/test_access b/testing/test_access index 63a7d5d3b..53301a74d 100755 --- a/testing/test_access +++ b/testing/test_access @@ -26,9 +26,9 @@ function test_access { adesc=access-$1 echo Starting $adesc test... | tee -a $TEST_RESULTS metrics=$(wget localhost:$FAUCET_VARZ_PORT -O- 2>/dev/null) - grep 'nz-kiwi-t2sw1' <<< $metrics | grep -F 'vid="100"' | grep -F ' 1.0' | grep -oF "$FAUX_MAC_PREFIX:8f:01" | tee -a $TEST_RESULTS - grep 'nz-kiwi-t2sw2' <<< $metrics | grep -F 'vid="300"' | grep -F ' 1.0' | grep -oF "$FAUX_MAC_PREFIX:8f:02" | tee -a $TEST_RESULTS - grep 'nz-kiwi-t2sw3' <<< $metrics | grep -F 'vid="300"' | grep -F ' 1.0' | grep -oF "$FAUX_MAC_PREFIX:8f:03" | tee -a $TEST_RESULTS + grep 'nz-kiwi-t2sw1' <<< $metrics | grep -F 'vid="100"' | grep -F ' 1.0' | grep -oF '9a:02:57:1e:8f:01' | tee -a $TEST_RESULTS + grep 'nz-kiwi-t2sw2' <<< $metrics | grep -F 'vid="300"' | grep -F ' 1.0' | grep -oF '9a:02:57:1e:8f:02' | tee -a $TEST_RESULTS + grep 'nz-kiwi-t2sw3' <<< $metrics | grep -F 'vid="300"' | grep -F ' 1.0' | grep -oF '9a:02:57:1e:8f:03' | tee -a $TEST_RESULTS } function test_dva { @@ -80,16 +80,16 @@ function test_dva { api_result=$fout_dir/list_hosts.json echo "@list_hosts $fdesc" | tee -a $TEST_RESULTS - jq ".eth_srcs.'$FAUX_MAC_PREFIX:8f:01'.vlan.vlan_id" $api_result | tee -a $TEST_RESULTS - jq ".eth_srcs.'$FAUX_MAC_PREFIX:8f:01'.dva_state" $api_result | tee -a $TEST_RESULTS - jq ".eth_srcs.'$FAUX_MAC_PREFIX:8f:01'.acls[0].rules[0].description" $api_result | tee -a $TEST_RESULTS - jq ".eth_srcs.'$FAUX_MAC_PREFIX:8f:03'.vlan.vlan_id" $api_result | tee -a $TEST_RESULTS - jq ".eth_srcs.'$FAUX_MAC_PREFIX:8f:03'.dva_state" $api_result | tee -a $TEST_RESULTS - jq ".eth_srcs.'$FAUX_MAC_PREFIX:8f:03'.radius_result.access" $api_result | tee -a $TEST_RESULTS - jq ".eth_srcs.'$FAUX_MAC_PREFIX:8f:03'.radius_result.segment" $api_result | tee -a $TEST_RESULTS - jq ".eth_srcs.'$FAUX_MAC_PREFIX:8f:03'.radius_result.role" $api_result | tee -a $TEST_RESULTS + jq '.eth_srcs."9a:02:57:1e:8f:01".vlan.vlan_id' $api_result | tee -a $TEST_RESULTS + jq '.eth_srcs."9a:02:57:1e:8f:01".dva_state' $api_result | tee -a $TEST_RESULTS + jq '.eth_srcs."9a:02:57:1e:8f:01".acls[0].rules[0].description' $api_result | tee -a $TEST_RESULTS + jq '.eth_srcs."9a:02:57:1e:8f:03".vlan.vlan_id' $api_result | tee -a $TEST_RESULTS + jq '.eth_srcs."9a:02:57:1e:8f:03".dva_state' $api_result | tee -a $TEST_RESULTS + jq '.eth_srcs."9a:02:57:1e:8f:03".radius_result.access' $api_result | tee -a $TEST_RESULTS + jq '.eth_srcs."9a:02:57:1e:8f:03".radius_result.segment' $api_result | tee -a $TEST_RESULTS + jq '.eth_srcs."9a:02:57:1e:8f:03".radius_result.role' $api_result | tee -a $TEST_RESULTS if [ -z "$skip_pkt_count" ]; then - jq ".eth_srcs.'$FAUX_MAC_PREFIX:8f:03'.acls[0].rules[0].packet_count" $api_result | tee -a $TEST_RESULTS + jq '.eth_srcs."9a:02:57:1e:8f:03".acls[0].rules[0].packet_count' $api_result | tee -a $TEST_RESULTS fi } @@ -106,11 +106,11 @@ function test_forch_varz { vlan_4096_count=$(grep 'dataplane_packet_count_vlan' <<< $metrics | grep 'vlan="4096"' | awk '{print $2}') echo $((${vlan_4096_count%.0} > 40)) | tee -a $TEST_RESULTS - grep 'device_state' <<< $metrics | grep "$FAUX_MAC_PREFIX:8f:01" | awk '{print $2}' | tee -a $TEST_RESULTS - grep 'device_state' <<< $metrics | grep "$FAUX_MAC_PREFIX:8f:02" | awk '{print $2}' | tee -a $TEST_RESULTS - grep 'device_state' <<< $metrics | grep "$FAUX_MAC_PREFIX:8f:03" | awk '{print $2}' | tee -a $TEST_RESULTS + grep 'device_state' <<< $metrics | grep '9a:02:57:1e:8f:01' | awk '{print $2}' | tee -a $TEST_RESULTS + grep 'device_state' <<< $metrics | grep '9a:02:57:1e:8f:02' | awk '{print $2}' | tee -a $TEST_RESULTS + grep 'device_state' <<< $metrics | grep '9a:02:57:1e:8f:03' | awk '{print $2}' | tee -a $TEST_RESULTS - grep 'static_mac_vlan' <<< $metrics | grep "$FAUX_MAC_PREFIX:8f:01" | awk '{print $2}' | tee -a $TEST_RESULTS + grep 'static_mac_vlan' <<< $metrics | grep '9a:02:57:1e:8f:01' | awk '{print $2}' | tee -a $TEST_RESULTS } echo %%% initial | tee -a $TEST_RESULTS diff --git a/testing/test_flat b/testing/test_flat index 5ee2fcddf..5c87f8bd1 100755 --- a/testing/test_flat +++ b/testing/test_flat @@ -42,7 +42,7 @@ function test_apis { # test list_hosts for device_num in $(seq 1 $devices); do - test_list_hosts $fout_dir/list_hosts.json "$FAUX_MAC_PREFIX:8f:0$device_num" + test_list_hosts $fout_dir/list_hosts.json "9a:02:57:1e:8f:0$device_num" done # test switch_state From b765a5e54ba8271620774f9ac5777807a8038654 Mon Sep 17 00:00:00 2001 From: Haoli Du Date: Tue, 13 Jul 2021 17:07:25 +0000 Subject: [PATCH 3/5] restore test_forch fn --- bin/stack_functions | 12 ++++++------ testing/test_flat | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/bin/stack_functions b/bin/stack_functions index dbad9e7d9..08517c1fc 100644 --- a/bin/stack_functions +++ b/bin/stack_functions @@ -126,7 +126,7 @@ function set_faux_mac_prefix { correct_mac_prefix=`echo $FAUX_MAC_PREFIX | egrep '([0-9a-zA-Z]{2}:){3}[0-9a-zA-Z]{2}'` if [ -z $correct_mac_prefix ]; then - echo "$FAUX_MAC_PREFIX is an invalid mac prefix. FUAX_MAC_PREFIX should be in the format 'XX:XX:XX:XX'" + echo "$FAUX_MAC_PREFIX is an invalid mac prefix. FAUX_MAC_PREFIX should be in the format 'XX:XX:XX:XX'" false fi CLEAN_MAC_PREFIX=`echo $FAUX_MAC_PREFIX | sed 's/://g'` @@ -420,9 +420,9 @@ function test_forch { fetch_forch cpn_state fetch_forch process_state fetch_forch list_hosts '' 1 - fetch_forch list_hosts ?eth_src=$FAUX_MAC_PREFIX:8f:01 2 - fetch_forch host_path "?eth_src=$FAUX_MAC_PREFIX:8f:01ð_dst=$FAUX_MAC_PREFIX:8f:02" 1 - fetch_forch host_path "?eth_src=$FAUX_MAC_PREFIX:8f:01&to_egress=true" 2 + fetch_forch list_hosts ?eth_src=9a:02:57:1e:8f:01 2 + fetch_forch host_path '?eth_src=9a:02:57:1e:8f:01ð_dst=9a:02:57:1e:8f:02' 1 + fetch_forch host_path '?eth_src=9a:02:57:1e:8f:01&to_egress=true' 2 echo @system_state$fdesc | tee -a $TEST_RESULTS api_result=$fout_dir/system_state.json @@ -478,9 +478,9 @@ function test_forch { echo @list_hosts$fdesc | tee -a $TEST_RESULTS api_result=$fout_dir/list_hosts1.json - jq ".eth_srcs.'$FAUX_MAC_PREFIX:8f:01'.url" $api_result | tee -a $TEST_RESULTS + jq '.eth_srcs."9a:02:57:1e:8f:01".url' $api_result | tee -a $TEST_RESULTS api_result=$fout_dir/list_hosts2.json - jq ".eth_dsts.'$FAUX_MAC_PREFIX:8f:02'.url" $api_result | tee -a $TEST_RESULTS + jq '.eth_dsts."9a:02:57:1e:8f:02".url' $api_result | tee -a $TEST_RESULTS echo @host_path$fdesc | tee -a $TEST_RESULTS api_result=$fout_dir/host_path1.json diff --git a/testing/test_flat b/testing/test_flat index 5c87f8bd1..d1b2b86a1 100755 --- a/testing/test_flat +++ b/testing/test_flat @@ -42,7 +42,7 @@ function test_apis { # test list_hosts for device_num in $(seq 1 $devices); do - test_list_hosts $fout_dir/list_hosts.json "9a:02:57:1e:8f:0$device_num" + test_list_hosts $fout_dir/list_hosts.json "9a:02:57:1e:8f:0$device_num" done # test switch_state From 3730904d9f365837331e128d33a24a8a0b294ba4 Mon Sep 17 00:00:00 2001 From: Haoli Du Date: Tue, 13 Jul 2021 21:17:39 +0000 Subject: [PATCH 4/5] Unparametrized testing and made faux-mac-prefix an arg for setup_stack --- .github/workflows/main.yaml | 10 +++------- bin/run_controller | 2 +- bin/run_faux | 4 ++-- bin/run_test_set | 7 ++----- bin/setup_stack | 7 ++++++- bin/stack_functions | 4 +++- etc/start_faux | 1 + etc/test_fot.out | 8 ++++---- testing/test_fot | 18 +++++++++--------- 9 files changed, 31 insertions(+), 30 deletions(-) diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml index 6b7ffe0f4..35dd01c7a 100644 --- a/.github/workflows/main.yaml +++ b/.github/workflows/main.yaml @@ -73,19 +73,15 @@ jobs: - name: run python tests run: testing/python_test test_fot - name: setup fot stack - env: - FAUX_MAC_PREFIX: 9a:99:57:1e - run: bin/setup_stack devices 5 skip-conn-check dhcp fot + run: bin/setup_stack devices 5 faux-mac-prefix "9a:99:57:1e" skip-conn-check dhcp fot - name: run fot integration tests - env: - FAUX_MAC_PREFIX: 9a:99:57:1e run: timeout 20m bin/run_test_set fot - name: setup vxlan stack - run: bin/setup_stack devices 5 skip-conn-check dhcp fot vxlan + run: bin/setup_stack devices 5 faux-mac-prefix "9a:99:57:1e" skip-conn-check dhcp fot vxlan - name: run vxlan integration tests run: timeout 20m bin/run_test_set fot - name: setup dts - run: bin/setup_stack devices 5 skip-conn-check dhcp fot dts localhost + run: bin/setup_stack devices 5 faux-mac-prefix "9a:99:57:1e" skip-conn-check dhcp fot dts localhost - name: run dts integration tests run: timeout 20m bin/run_test_set fot - name: post-run logs diff --git a/bin/run_controller b/bin/run_controller index de0d312df..e958d789c 100755 --- a/bin/run_controller +++ b/bin/run_controller @@ -153,7 +153,7 @@ if [[ -z $vxlan ]]; then docker exec $CONTAINER ip link set data0 up fi -if [ $CLEAN_MAC_PREFIX != "9a02571e" ]; then +if [ $CLEAN_MAC_PREFIX != "$DEFAULT_CLEAN_MAC_PREFIX" ]; then docker exec $CONTAINER /root/bin/rename_site_config $CLEAN_MAC_PREFIX fi diff --git a/bin/run_faux b/bin/run_faux index 337cbc054..4c81b20c7 100755 --- a/bin/run_faux +++ b/bin/run_faux @@ -43,9 +43,9 @@ if docker container inspect $CONTAINER --format '{{ .Name }}' > /dev/null 2>&1; docker rm -f $CONTAINER fi -docker_args="$docker_args -e LOCAL_IF=$realintf -e FAUX_NUM=$port_num -e FAUX_MAC_PREFIX=$FAUX_MAC_PREFIX" +docker_args="$docker_args -e LOCAL_IF=$realintf -e FAUX_NUM=$port_num" -cid=$(docker run -d --privileged --name $CONTAINER --hostname $CONTAINER $net_opt $docker_args $image ./start_faux $FAUX_ARGS) +cid=$(docker run -d --privileged --name $CONTAINER --hostname $CONTAINER $net_opt $docker_args $image ./start_faux $FAUX_ARGS faux-mac-prefix=$FAUX_MAC_PREFIX) pid=$(docker inspect --format="{{ .State.Pid }}" $cid) intf=faux$postfix diff --git a/bin/run_test_set b/bin/run_test_set index 06a1a4648..e01d30bbd 100755 --- a/bin/run_test_set +++ b/bin/run_test_set @@ -10,18 +10,15 @@ if [ -z "$TEST_SET" ]; then fi echo Running $TEST_SET tests... -source bin/stack_functions -set_faux_mac_prefix OUT_DIR=test_out/ rm -rf $OUT_DIR mkdir -p $OUT_DIR echo Writing output to $OUT_DIR -GOLDEN_RESULTS=$OUT_DIR/golden_test_$TEST_SET.out +GOLDEN_RESULTS=etc/test_$TEST_SET.out TEST_RESULTS=$OUT_DIR/test_$TEST_SET.out -sed "s/9a:02:57:1e/$FAUX_MAC_PREFIX/g" etc/test_$TEST_SET.out > $GOLDEN_RESULTS -sed -i "s/9a02571e/$CLEAN_MAC_PREFIX/g" $GOLDEN_RESULTS + testing/test_${TEST_SET} pwd diff --git a/bin/setup_stack b/bin/setup_stack index 6c10039c7..086da8d3a 100755 --- a/bin/setup_stack +++ b/bin/setup_stack @@ -27,6 +27,11 @@ if [ "$1" == "devices" ]; then shift 2 fi +if [ "$1" == "faux-mac-prefix" ]; then + export FAUX_MAC_PREFIX="$2" + shift 2 +fi + if [ "$1" == "switches" ]; then switches=$2 shift 2 @@ -175,7 +180,7 @@ if [ -z "$remote" ]; then cp topo/$mode/forch/* $container_inst/forch/ cp topo/$mode/faucet/* $container_inst/faucet/ - find $container_inst/ -name *.yaml -exec sed -i "s/9a:02:57:1e/$FAUX_MAC_PREFIX/" {} \; + find $container_inst/ -name *.yaml -exec sed -i "s/$DEFAULT_MAC_PREFIX/$FAUX_MAC_PREFIX/" {} \; docker kill $container || true diff --git a/bin/stack_functions b/bin/stack_functions index 08517c1fc..17afe7ac8 100644 --- a/bin/stack_functions +++ b/bin/stack_functions @@ -120,8 +120,10 @@ function add_oeth { } function set_faux_mac_prefix { + export DEFAULT_MAC_PREFIX="9a:02:57:1e" + export DEFAULT_CLEAN_MAC_PREFIX="9a02571e" if [ -z $FAUX_MAC_PREFIX ]; then - FAUX_MAC_PREFIX=9a:02:57:1e + FAUX_MAC_PREFIX=$DEFAULT_MAC_PREFIX fi correct_mac_prefix=`echo $FAUX_MAC_PREFIX | egrep '([0-9a-zA-Z]{2}:){3}[0-9a-zA-Z]{2}'` diff --git a/etc/start_faux b/etc/start_faux index 6b21617ff..065c76c42 100755 --- a/etc/start_faux +++ b/etc/start_faux @@ -17,6 +17,7 @@ for option in $*; do done IFACE=faux-eth0 +FAUX_MAC_PREFIX="${options[faux-mac-prefix]}" PREFIX=$(($FAUX_NUM/256 + 1)) SUFFIX=$(($FAUX_NUM%256)) IPADDR=192.168.$PREFIX.$SUFFIX diff --git a/etc/test_fot.out b/etc/test_fot.out index 885a33058..3595d71cf 100644 --- a/etc/test_fot.out +++ b/etc/test_fot.out @@ -8,9 +8,9 @@ Device 04 log count 0 275 100 274 -9a02571e8f01: [] -9a02571e8f02: [] -9a02571e8f03: ['9a02571e8f03:hold:DaqException'] -9a02571e8f05: ['9a02571e8f05:hold:DaqException'] +9a99571e8f01: [] +9a99571e8f02: [] +9a99571e8f03: ['9a99571e8f03:hold:DaqException'] +9a99571e8f05: ['9a99571e8f05:hold:DaqException'] 5 packets transmitted, 5 received, 0% packet loss, XXX 5 packets transmitted, 0 received, XX errors, 100% packet loss, XXX diff --git a/testing/test_fot b/testing/test_fot index 91cb08182..25cd118b8 100755 --- a/testing/test_fot +++ b/testing/test_fot @@ -76,30 +76,30 @@ vlan=$($YQ '.dps."nz-kiwi-t2sw1".interfaces."1".native_vlan' $BEHAVIORAL_CONFIG) echo $(( (vlan > 271) + (vlan > 276) )) | tee -a $TEST_RESULTS echo $(( (vlan > 271) + (vlan > 276) )) | tee -a $TEST_RESULTS -monitor_daq_log "Send device result $FAUX_MAC_PREFIX:8f:01 passed" -monitor_daq_log "Send device result $FAUX_MAC_PREFIX:8f:02 failed" -monitor_daq_log "Target device ${CLEAN_MAC_PREFIX}8f03 test hold running" -monitor_daq_log "Target device ${CLEAN_MAC_PREFIX}8f05 test hold running" +monitor_daq_log "Send device result 9a:99:57:1e:8f:01 passed" +monitor_daq_log "Send device result 9a:99:57:1e:8f:02 failed" +monitor_daq_log "Target device 9a99571e8f03 test hold running" +monitor_daq_log "Target device 9a99571e8f05 test hold running" echo `timestamp` stopping forch-faux-3 docker stop forch-faux-3 # Remove device 3 to generate port-down event. -log_count=$(fgrep "$FAUX_MAC_PREFIX:8f:04" $DAQ_BASE/cmdrun.log | wc -l) +log_count=$(fgrep "9a:99:57:1e:8f:04" $DAQ_BASE/cmdrun.log | wc -l) echo Device 04 log count $log_count | tee -a $TEST_RESULTS report_vlans -monitor_forch_log "Device $FAUX_MAC_PREFIX:8f:04 is entering operational state from unauthenticated state" +monitor_forch_log "Device 9a:99:57:1e:8f:04 is entering operational state from unauthenticated state" # Check if it's running in client/server or server/client mode and adjust expectations accordingly. sserv_mode=$(fgrep ssserv $DAQ_BASE/cmdrun.log | wc -l) if [[ $sserv_mode == 0 ]]; then - monitor_daq_log "Remaining target sets: \[${CLEAN_MAC_PREFIX}8f05\]" + monitor_daq_log "Remaining target sets: \[9a99571e8f05\]" expected_timeouts=0 # Device 8f:05 doesn't timeout in this mode, so add artificial result for later on. - echo "${CLEAN_MAC_PREFIX}8f05: ['${CLEAN_MAC_PREFIX}8f05:hold:DaqException']" | sudo tee -a $DAQ_BASE/result.log + echo "9a99571e8f05: ['9a99571e8f05:hold:DaqException']" | sudo tee -a $DAQ_BASE/result.log else - monitor_forch_log "Device $FAUX_MAC_PREFIX:8f:03 disconnected" + monitor_forch_log "Device 9a:99:57:1e:8f:03 disconnected" monitor_daq_log "Remaining target sets: \[\]" expected_timeouts=2 fi From 8e545478124fd7363c890a9e764497d10ad41a77 Mon Sep 17 00:00:00 2001 From: Haoli Du Date: Thu, 15 Jul 2021 01:02:41 +0000 Subject: [PATCH 5/5] Fix integration tests and Move site config custom faux mac device logic into controller startup script --- bin/run_controller | 6 +----- bin/run_faux | 3 +-- bin/setup_scale | 1 + controller/bin/controller_go | 4 ++++ controller/bin/rename_site_config | 10 +++++++--- etc/start_faux | 5 +++-- 6 files changed, 17 insertions(+), 12 deletions(-) diff --git a/bin/run_controller b/bin/run_controller index e958d789c..4d6a9b77d 100755 --- a/bin/run_controller +++ b/bin/run_controller @@ -116,7 +116,7 @@ if [ -n "$gauge_prom_pt" ]; then fi forch_port="-p 500$faucet_id:9019" -docker_envs="--env RUN_MODE=$run_mode" +docker_envs="--env RUN_MODE=$run_mode --env CLEAN_MAC_PREFIX=$CLEAN_MAC_PREFIX" if [[ -n $vxlan ]]; then # Extract the local src IP address that can be used as return address. @@ -153,10 +153,6 @@ if [[ -z $vxlan ]]; then docker exec $CONTAINER ip link set data0 up fi -if [ $CLEAN_MAC_PREFIX != "$DEFAULT_CLEAN_MAC_PREFIX" ]; then - docker exec $CONTAINER /root/bin/rename_site_config $CLEAN_MAC_PREFIX -fi - echo Container $CONTAINER started as $cid while [ ! -e $INSTDIR/$FAUCET_SOCK ]; do diff --git a/bin/run_faux b/bin/run_faux index 4c81b20c7..4d1f0c9ef 100755 --- a/bin/run_faux +++ b/bin/run_faux @@ -28,7 +28,6 @@ if [ $# -gt 0 ] && [ $(($1)) -gt 0 -o "$1" == 0 ]; then intf_mac=$FAUX_MAC_PREFIX:$(printf %02x $mac_prefix):$(printf %02x $mac_port_num) shift fi - FAUX_ARGS="$*" # Check that image exists so docker doesn't pull down random one from dockerhub @@ -45,7 +44,7 @@ fi docker_args="$docker_args -e LOCAL_IF=$realintf -e FAUX_NUM=$port_num" -cid=$(docker run -d --privileged --name $CONTAINER --hostname $CONTAINER $net_opt $docker_args $image ./start_faux $FAUX_ARGS faux-mac-prefix=$FAUX_MAC_PREFIX) +cid=$(docker run -d --privileged --name $CONTAINER --hostname $CONTAINER $net_opt $docker_args $image ./start_faux $FAUX_ARGS "faux-mac-prefix=$FAUX_MAC_PREFIX" ) pid=$(docker inspect --format="{{ .State.Pid }}" $cid) intf=faux$postfix diff --git a/bin/setup_scale b/bin/setup_scale index 6fb66f28b..34929050b 100755 --- a/bin/setup_scale +++ b/bin/setup_scale @@ -40,6 +40,7 @@ if [ -n "$1" ]; then fi source bin/stack_functions +set_faux_mac_prefix ########################################################### diff --git a/controller/bin/controller_go b/controller/bin/controller_go index 87c430744..f168eb537 100755 --- a/controller/bin/controller_go +++ b/controller/bin/controller_go @@ -83,6 +83,10 @@ else ifconfig data0 up fi +if [ -n "$CLEAN_MAC_PREFIX" ]; then + bin/rename_site_config $CLEAN_MAC_PREFIX +fi + echo Forch config cat $FORCH_CONFIG diff --git a/controller/bin/rename_site_config b/controller/bin/rename_site_config index a7634942c..35e0ba817 100755 --- a/controller/bin/rename_site_config +++ b/controller/bin/rename_site_config @@ -1,5 +1,9 @@ #!/bin/sh -for f in `find /site/mac_addrs/ -name '9a02571*'`; do - cp -r $f `echo $f | sed -e "s/9a02571e/$1/g"` -done +default_mac_prefix="9a02571e" + +if [ "$1" != $default_mac_prefix ]; then + for f in `find /site/mac_addrs/ -name "$default_mac_prefix*"`; do + cp -r $f `echo $f | sed -e "s/$default_mac_prefix/$1/g"` + done +fi diff --git a/etc/start_faux b/etc/start_faux index 065c76c42..0eb3ea200 100755 --- a/etc/start_faux +++ b/etc/start_faux @@ -17,12 +17,13 @@ for option in $*; do done IFACE=faux-eth0 -FAUX_MAC_PREFIX="${options[faux-mac-prefix]}" +FAUX_MAC_PREFIX="${options['faux-mac-prefix']}" PREFIX=$(($FAUX_NUM/256 + 1)) SUFFIX=$(($FAUX_NUM%256)) IPADDR=192.168.$PREFIX.$SUFFIX GATEWAY=192.168.1.0 +echo $FAUX_MAC_PREFIX while ! ip link show $IFACE; do sleep 2 done @@ -43,7 +44,7 @@ else ip route add default via $GATEWAY fi -if [ -n "${option[ping]}" ]; then +if [ -n "${options[ping]}" ]; then ping -c 10 $GATEWAY & fi