1e8db04c3SNick Hibma#!/bin/sh 2e8db04c3SNick Hibma# 3e8db04c3SNick Hibma# Copyright (c) 2018-2020 Retina b.v. 4e8db04c3SNick Hibma# All rights reserved. 5e8db04c3SNick Hibma# 6e8db04c3SNick Hibma# Redistribution and use in source and binary forms, with or without 7e8db04c3SNick Hibma# modification, are permitted provided that the following conditions 8e8db04c3SNick Hibma# are met: 9e8db04c3SNick Hibma# 1. Redistributions of source code must retain the above copyright 10e8db04c3SNick Hibma# notice, this list of conditions and the following disclaimer. 11e8db04c3SNick Hibma# 2. Redistributions in binary form must reproduce the above copyright 12e8db04c3SNick Hibma# notice, this list of conditions and the following disclaimer in the 13e8db04c3SNick Hibma# documentation and/or other materials provided with the distribution. 14e8db04c3SNick Hibma# 3. Neither the name of the University nor the names of its contributors 15e8db04c3SNick Hibma# may be used to endorse or promote products derived from this software 16e8db04c3SNick Hibma# without specific prior written permission. 17e8db04c3SNick Hibma# 18e8db04c3SNick Hibma# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 19e8db04c3SNick Hibma# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20e8db04c3SNick Hibma# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21e8db04c3SNick Hibma# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 22e8db04c3SNick Hibma# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 23e8db04c3SNick Hibma# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 24e8db04c3SNick Hibma# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 25e8db04c3SNick Hibma# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 26e8db04c3SNick Hibma# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 27e8db04c3SNick Hibma# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 28e8db04c3SNick Hibma# SUCH DAMAGE. 29e8db04c3SNick Hibma# 30e8db04c3SNick Hibma 317dd1f932SAlex Richardsonset -e 327dd1f932SAlex Richardson 33e8db04c3SNick Hibmaprogname="$(basename $0 .sh)" 34e8db04c3SNick Hibmaentries_lst="/tmp/$progname.entries.lst" 35e8db04c3SNick Hibmaentries2_lst="/tmp/$progname.entries2.lst" 36e8db04c3SNick Hibma 37e8db04c3SNick HibmaHOOKS=3 38e8db04c3SNick HibmaHOOKSADD=42 39e8db04c3SNick HibmaITERATIONS=7 40e8db04c3SNick HibmaSUBITERATIONS=71 41e8db04c3SNick Hibma 42e8db04c3SNick Hibmafind_iface () { 43e8db04c3SNick Hibma # Figure out the first ethernet interface 44e8db04c3SNick Hibma ifconfig -u -l ether | awk '{print $1}' 45e8db04c3SNick Hibma} 46e8db04c3SNick Hibma 47e8db04c3SNick Hibmaloaded_modules='' 48e8db04c3SNick Hibmaload_modules () { 4965f4ff4eSAlex Richardson for kmod in "$@"; do 50e8db04c3SNick Hibma if ! kldstat -q -m $kmod; then 51e8db04c3SNick Hibma test_comment "Loading $kmod..." 52e8db04c3SNick Hibma kldload $kmod 53e8db04c3SNick Hibma loaded_modules="$loaded_modules $kmod" 54e8db04c3SNick Hibma fi 55e8db04c3SNick Hibma done 56e8db04c3SNick Hibma} 57e8db04c3SNick Hibmaunload_modules () { 58e8db04c3SNick Hibma for kmod in $loaded_modules; do 59e8db04c3SNick Hibma # These cannot be unloaded 60e8db04c3SNick Hibma test $kmod = 'ng_ether' -o $kmod = 'ng_socket' \ 61e8db04c3SNick Hibma && continue 62e8db04c3SNick Hibma 63e8db04c3SNick Hibma test_comment "Unloading $kmod..." 64e8db04c3SNick Hibma kldunload $kmod 65e8db04c3SNick Hibma done 66e8db04c3SNick Hibma loaded_modules='' 67e8db04c3SNick Hibma} 68e8db04c3SNick Hibma 69e8db04c3SNick Hibmaconfigure_nodes () { 70e8db04c3SNick Hibma ngctl mkpeer $eth: macfilter lower ether # Connect the lower hook of the ether instance $eth to the ether hook of a new macfilter instance 71e8db04c3SNick Hibma ngctl name $eth:lower MF # Give the macfilter instance a name 72e8db04c3SNick Hibma ngctl mkpeer $eth: one2many upper one # Connect the upper hook of the ether instance $eth to the one hook of a new one2many instance 73e8db04c3SNick Hibma ngctl name $eth:upper O2M # Give the one2many instance a name 74e8db04c3SNick Hibma ngctl msg O2M: setconfig "{ xmitAlg=3 failAlg=1 enabledLinks=[ 1 1 ] }" # XMIT_FAILOVER -> send replies always out many0 75e8db04c3SNick Hibma 76e8db04c3SNick Hibma ngctl connect MF: O2M: default many0 # Connect macfilter:default to the many0 hook of a one2many instance 77e8db04c3SNick Hibma for i in $(seq 1 1 $HOOKS); do 78e8db04c3SNick Hibma ngctl connect MF: O2M: out$i many$i 79e8db04c3SNick Hibma done 80e8db04c3SNick Hibma} 81e8db04c3SNick Hibma 82e8db04c3SNick Hibmadeconfigure_nodes () { 83e8db04c3SNick Hibma ngctl shutdown MF: 84e8db04c3SNick Hibma ngctl shutdown O2M: 85e8db04c3SNick Hibma} 86e8db04c3SNick Hibma 87e8db04c3SNick Hibmacleanup () { 88e8db04c3SNick Hibma test_title "Cleaning up" 89e8db04c3SNick Hibma 90e8db04c3SNick Hibma deconfigure_nodes 91e8db04c3SNick Hibma unload_modules 92e8db04c3SNick Hibma 93e8db04c3SNick Hibma rm -f $entries_lst $entries2_lst 94e8db04c3SNick Hibma} 95e8db04c3SNick Hibma 96e8db04c3SNick HibmaTSTNR=0 97e8db04c3SNick HibmaTSTFAILS=0 98e8db04c3SNick HibmaTSTSUCCS=0 99e8db04c3SNick Hibma 10065f4ff4eSAlex Richardson_test_next () { TSTNR=$((TSTNR + 1)); } 10165f4ff4eSAlex Richardson_test_succ () { TSTSUCCS=$((TSTSUCCS + 1)); } 10265f4ff4eSAlex Richardson_test_fail () { TSTFAILS=$((TSTFAILS + 1)); } 103e8db04c3SNick Hibma 104e8db04c3SNick Hibmatest_cnt () { echo "1..${1:-$TSTNR}"; } 105e8db04c3SNick Hibmatest_title () { 106e8db04c3SNick Hibma local msg="$1" 107e8db04c3SNick Hibma 108e8db04c3SNick Hibma printf '### %s ' "$msg" 10965f4ff4eSAlex Richardson printf '#%.0s' $(seq $((80 - ${#msg} - 5))) 110e8db04c3SNick Hibma printf "\n" 111e8db04c3SNick Hibma} 112e8db04c3SNick Hibmatest_comment () { echo "# $1"; } 113e8db04c3SNick Hibmatest_bailout () { echo "Bail out!${1+:- $1}"; exit 1; } 114e8db04c3SNick Hibmatest_bail_on_fail () { test $TSTFAILS -eq 0 || test_bailout $1; } 115e8db04c3SNick Hibmatest_ok () { 116e8db04c3SNick Hibma local msg="$1" 117e8db04c3SNick Hibma 118e8db04c3SNick Hibma _test_next 119e8db04c3SNick Hibma _test_succ 120e8db04c3SNick Hibma echo "ok $TSTNR - $msg" 121e8db04c3SNick Hibma 122e8db04c3SNick Hibma return 0 123e8db04c3SNick Hibma} 124e8db04c3SNick Hibmatest_not_ok () { 125e8db04c3SNick Hibma local msg="$1" 126e8db04c3SNick Hibma 127e8db04c3SNick Hibma _test_next 1287dd1f932SAlex Richardson _test_fail 129e8db04c3SNick Hibma echo "not ok $TSTNR - $msg" 130e8db04c3SNick Hibma 131e8db04c3SNick Hibma return 1 132e8db04c3SNick Hibma} 133e8db04c3SNick Hibmatest_eq () { 134e8db04c3SNick Hibma local v1="$1" v2="$2" msg="$3" 135e8db04c3SNick Hibma 136e8db04c3SNick Hibma if [ "$v1" = "$v2" ]; then 137e8db04c3SNick Hibma test_ok "$v1 $msg" 138e8db04c3SNick Hibma else 139e8db04c3SNick Hibma test_not_ok "$v1 vs $v2 $msg" 140e8db04c3SNick Hibma fi 141e8db04c3SNick Hibma} 142e8db04c3SNick Hibmatest_ne () { 143e8db04c3SNick Hibma local v1="$1" v2="$2" msg="$3" 144e8db04c3SNick Hibma 145e8db04c3SNick Hibma if [ "$v1" != "$v2" ]; then 146e8db04c3SNick Hibma test_ok "$v1 $msg" 147e8db04c3SNick Hibma else 148e8db04c3SNick Hibma test_not_ok "$v1 vs $v2 $msg" 149e8db04c3SNick Hibma fi 150e8db04c3SNick Hibma} 151e8db04c3SNick Hibmatest_lt () { 152e8db04c3SNick Hibma local v1=$1 v2=$2 msg="$3" 153e8db04c3SNick Hibma 154e8db04c3SNick Hibma if [ "$v1" -lt "$v2" ]; then 155e8db04c3SNick Hibma test_ok "$v1 $msg" 156e8db04c3SNick Hibma else 157e8db04c3SNick Hibma test_not_ok "$v1 >= $v2 $msg" 158e8db04c3SNick Hibma fi 159e8db04c3SNick Hibma} 160e8db04c3SNick Hibmatest_le () { 161e8db04c3SNick Hibma local v1=$1 v2=$2 msg="$3" 162e8db04c3SNick Hibma 163e8db04c3SNick Hibma if [ "$v1" -le "$v2" ]; then 164e8db04c3SNick Hibma test_ok "$v1 $msg" 165e8db04c3SNick Hibma else 166e8db04c3SNick Hibma test_not_ok "$v1 >= $v2 $msg" 167e8db04c3SNick Hibma fi 168e8db04c3SNick Hibma} 169e8db04c3SNick Hibmatest_gt () { 170e8db04c3SNick Hibma local v1=$1 v2=$2 msg="$3" 171e8db04c3SNick Hibma 172e8db04c3SNick Hibma if [ "$v1" -gt "$v2" ]; then 173e8db04c3SNick Hibma test_ok "$v1 $msg" 174e8db04c3SNick Hibma else 175e8db04c3SNick Hibma test_not_ok "$v1 <= $v2 $msg" 176e8db04c3SNick Hibma fi 177e8db04c3SNick Hibma} 178e8db04c3SNick Hibmatest_ge () { 179e8db04c3SNick Hibma local v1=$1 v2=$2 msg="$3" 180e8db04c3SNick Hibma 181e8db04c3SNick Hibma if [ "$v1" -ge "$v2" ]; then 182e8db04c3SNick Hibma test_ok "$v1 $msg" 183e8db04c3SNick Hibma else 184e8db04c3SNick Hibma test_not_ok "$v1 <= $v2 $msg" 185e8db04c3SNick Hibma fi 186e8db04c3SNick Hibma} 1877dd1f932SAlex Richardsontest_failure () { 1887dd1f932SAlex Richardson msg=$1 1897dd1f932SAlex Richardson shift 1907dd1f932SAlex Richardson if ! "$@"; then 1917dd1f932SAlex Richardson test_ok "$msg - \"$@\" failed as expected" 1927dd1f932SAlex Richardson else 1937dd1f932SAlex Richardson test_not_ok "$msg - expected \"$@\" to fail but succeeded" 1947dd1f932SAlex Richardson fi 1957dd1f932SAlex Richardson} 1967dd1f932SAlex Richardsontest_success () { 1977dd1f932SAlex Richardson msg=$1 1987dd1f932SAlex Richardson shift 1997dd1f932SAlex Richardson if ! "$@"; then 2007dd1f932SAlex Richardson test_not_ok "$msg - \"$@\" failed unexpectedly" 2017dd1f932SAlex Richardson else 2027dd1f932SAlex Richardson test_ok "$msg - \"$@\" succeeded" 2037dd1f932SAlex Richardson fi 2047dd1f932SAlex Richardson} 205e8db04c3SNick Hibma 206e8db04c3SNick Hibmagethooks () { 207e8db04c3SNick Hibma ngctl msg MF: 'gethooks' \ 208e8db04c3SNick Hibma | perl -ne '$h{$1}=1 while s/hookname="(.*?)"//; sub END {print join(":", sort keys %h)."\n"}' 209e8db04c3SNick Hibma} 210e8db04c3SNick Hibma 211e8db04c3SNick Hibmacountmacs () { 212e8db04c3SNick Hibma local hookname=${1:-'[^"]*'} 213e8db04c3SNick Hibma 214e8db04c3SNick Hibma ngctl msg MF: 'gethooks' \ 215e8db04c3SNick Hibma | perl -ne 'sub BEGIN {$c=0} $c += $1 while s/hookname="'$hookname'" hookid=\d+ maccnt=(\d+)//; sub END {print "$c\n"}' 216e8db04c3SNick Hibma} 217e8db04c3SNick Hibmarandomedge () { 218e8db04c3SNick Hibma local edge="out$(seq 0 1 $HOOKS | sort -R | head -1)" 219e8db04c3SNick Hibma test $edge = 'out0' \ 220e8db04c3SNick Hibma && echo default \ 221e8db04c3SNick Hibma || echo $edge 222e8db04c3SNick Hibma} 223e8db04c3SNick Hibmagenmac () { 224e8db04c3SNick Hibma echo "00:00:00:00:$(printf "%02x" $1):$(printf "%02x" $2)" 225e8db04c3SNick Hibma} 226e8db04c3SNick Hibma 227e8db04c3SNick Hibma 228e8db04c3SNick Hibma 229e8db04c3SNick Hibma################################################################################ 230e8db04c3SNick Hibma### Start ###################################################################### 231e8db04c3SNick Hibma################################################################################ 232e8db04c3SNick Hibma 233e8db04c3SNick Hibmatest_title "Setting up system..." 234e8db04c3SNick Hibmaload_modules netgraph ng_socket ng_ether ng_macfilter ng_one2many 235e8db04c3SNick Hibmaeth=$(find_iface) 2367dd1f932SAlex Richardsonif [ -z "$eth" ]; then 2376f30d1c8SAlex Richardson echo "1..0 # SKIP could not find a valid interface" 2387dd1f932SAlex Richardson echo "Available interfaces:" 2397dd1f932SAlex Richardson ifconfig 2407dd1f932SAlex Richardson exit 1 2417dd1f932SAlex Richardsonfi 242e8db04c3SNick Hibmatest_comment "Using $eth..." 243e8db04c3SNick Hibma 244e8db04c3SNick Hibma 245e8db04c3SNick Hibmatest_title "Configuring netgraph nodes..." 246e8db04c3SNick Hibmaconfigure_nodes 247e8db04c3SNick Hibma 248e8db04c3SNick Hibmatrap 'exit 99' 1 2 3 13 14 15 249e8db04c3SNick Hibmatrap 'cleanup' EXIT 250e8db04c3SNick Hibma 251e8db04c3SNick Hibmacreated_hooks=$(gethooks) 252e8db04c3SNick Hibmarc=0 253e8db04c3SNick Hibma 25465f4ff4eSAlex Richardson# Update this number when adding new tests 25565f4ff4eSAlex Richardsontest_cnt 46 256e8db04c3SNick Hibma 257e8db04c3SNick Hibma 258e8db04c3SNick Hibma################################################################################ 259e8db04c3SNick Hibma### Tests ###################################################################### 260e8db04c3SNick Hibma################################################################################ 261e8db04c3SNick Hibma 262e8db04c3SNick Hibma################################################################################ 263e8db04c3SNick Hibmatest_title "Test: Duplicate default hook" 2647dd1f932SAlex Richardsontest_failure "duplicate connect of default hook" ngctl connect MF: O2M: default many99 265e8db04c3SNick Hibma 266e8db04c3SNick Hibma################################################################################ 267e8db04c3SNick Hibmatest_title "Test: Add and remove hooks" 2687dd1f932SAlex Richardsontest_success "connect MF:xxx1 to O2M:many$((HOOKS + 1))" ngctl connect MF: O2M: xxx1 many$((HOOKS + 1)) 2697dd1f932SAlex Richardsontest_success "connect MF:xxx2 to O2M:many$((HOOKS + 2))" ngctl connect MF: O2M: xxx2 many$((HOOKS + 2)) 2707dd1f932SAlex Richardsontest_success "connect MF:xxx3 to O2M:many$((HOOKS + 3))" ngctl connect MF: O2M: xxx3 many$((HOOKS + 3)) 271e8db04c3SNick Hibmahooks=$(gethooks) 272e8db04c3SNick Hibmatest_eq $created_hooks:xxx1:xxx2:xxx3 $hooks 'hooks after adding xxx1-3' 273e8db04c3SNick Hibma 2747dd1f932SAlex Richardsontest_success "rmhook MF:xxx$i" ngctl rmhook MF: xxx1 275e8db04c3SNick Hibmahooks=$(gethooks) 276e8db04c3SNick Hibmatest_eq $created_hooks:xxx2:xxx3 $hooks 'hooks after removing xxx1' 2777dd1f932SAlex Richardsontest_success "rmhook MF:xxx$i" ngctl rmhook MF: xxx2 278e8db04c3SNick Hibmahooks=$(gethooks) 279e8db04c3SNick Hibmatest_eq $created_hooks:xxx3 $hooks 'hooks after removing xxx2' 2807dd1f932SAlex Richardsontest_success "rmhook MF:xxx$i" ngctl rmhook MF: xxx3 281e8db04c3SNick Hibmahooks=$(gethooks) 282e8db04c3SNick Hibmatest_eq $created_hooks $hooks 'hooks after removing xxx3' 283e8db04c3SNick Hibma 284e8db04c3SNick Hibmatest_bail_on_fail 285e8db04c3SNick Hibma 286e8db04c3SNick Hibma################################################################################ 287e8db04c3SNick Hibmatest_title "Test: Add many hooks" 288e8db04c3SNick Hibmaadded_hooks="" 289e8db04c3SNick Hibmafor i in $(seq 10 1 $HOOKSADD); do 290e8db04c3SNick Hibma added_hooks="$added_hooks:xxx$i" 29165f4ff4eSAlex Richardson ngctl connect MF: O2M: xxx$i many$((HOOKS + i)) 292e8db04c3SNick Hibmadone 293e8db04c3SNick Hibmahooks=$(gethooks) 294e8db04c3SNick Hibmatest_eq $created_hooks$added_hooks $hooks 'hooks after adding many hooks' 295e8db04c3SNick Hibma 296e8db04c3SNick Hibmafor h in $(echo $added_hooks | perl -ne 'chomp; %h=map { $_=>1 } split /:/; print "$_\n" for grep {$_} keys %h'); do 297e8db04c3SNick Hibma ngctl rmhook MF: $h 298e8db04c3SNick Hibmadone 299e8db04c3SNick Hibmahooks=$(gethooks) 300e8db04c3SNick Hibmatest_eq $created_hooks $hooks 'hooks after adding many hooks' 301e8db04c3SNick Hibma 302e8db04c3SNick Hibmatest_bail_on_fail 303e8db04c3SNick Hibma 304e8db04c3SNick Hibma 305e8db04c3SNick Hibma################################################################################ 306e8db04c3SNick Hibmatest_title "Test: Adding many MACs..." 307e8db04c3SNick HibmaI=1 308e8db04c3SNick Hibmafor i in $(seq $ITERATIONS | sort -R); do 30965f4ff4eSAlex Richardson test_comment "Iteration $I/$ITERATIONS..." 310e8db04c3SNick Hibma for j in $(seq 0 1 $SUBITERATIONS); do 311e8db04c3SNick Hibma test $i = 2 && edge='out2' || edge='out1' 312e8db04c3SNick Hibma ether=$(genmac $j $i) 313e8db04c3SNick Hibma 314e8db04c3SNick Hibma ngctl msg MF: 'direct' "{ hookname=\"$edge\" ether=$ether }" 315e8db04c3SNick Hibma done 31665f4ff4eSAlex Richardson I=$((I + 1)) 317e8db04c3SNick Hibmadone 318e8db04c3SNick Hibma 319e8db04c3SNick Hibman=$(countmacs out1) 32065f4ff4eSAlex Richardsonn2=$(( ( ITERATIONS - 1 ) * ( SUBITERATIONS + 1 ) )) 321e8db04c3SNick Hibmatest_eq $n $n2 'MACs in table for out1' 322e8db04c3SNick Hibman=$(countmacs out2) 32365f4ff4eSAlex Richardsonn2=$(( 1 * ( SUBITERATIONS + 1 ) )) 324e8db04c3SNick Hibmatest_eq $n $n2 'MACs in table for out2' 325e8db04c3SNick Hibman=$(countmacs out3) 326e8db04c3SNick Hibman2=0 327e8db04c3SNick Hibmatest_eq $n $n2 'MACs in table for out3' 328e8db04c3SNick Hibma 329e8db04c3SNick Hibmatest_bail_on_fail 330e8db04c3SNick Hibma 331e8db04c3SNick Hibma 332e8db04c3SNick Hibma################################################################################ 333e8db04c3SNick Hibmatest_title "Test: Changing hooks for MACs..." 334e8db04c3SNick Hibmafor i in $(seq $ITERATIONS); do 335e8db04c3SNick Hibma edge='out3' 336e8db04c3SNick Hibma ether=$(genmac 0 $i) 337e8db04c3SNick Hibma 338e8db04c3SNick Hibma ngctl msg MF: 'direct' "{ hookname=\"$edge\" ether=$ether }" 339e8db04c3SNick Hibmadone 340e8db04c3SNick Hibma 341e8db04c3SNick Hibman=$(countmacs out1) 34265f4ff4eSAlex Richardsonn2=$(( ( ITERATIONS - 1 ) * ( SUBITERATIONS + 1 - 1 ) )) 343e8db04c3SNick Hibmatest_eq $n $n2 'MACs in table for out1' 344e8db04c3SNick Hibman=$(countmacs out2) 34565f4ff4eSAlex Richardsonn2=$(( 1 * ( SUBITERATIONS + 1 - 1 ) )) 346e8db04c3SNick Hibmatest_eq $n $n2 'MACs in table for out2' 347e8db04c3SNick Hibman=$(countmacs out3) 348e8db04c3SNick Hibman2=$ITERATIONS 349e8db04c3SNick Hibmatest_eq $n $n2 'MACs in table for out3' 350e8db04c3SNick Hibma 351e8db04c3SNick Hibmatest_bail_on_fail 352e8db04c3SNick Hibma 353e8db04c3SNick Hibma 354e8db04c3SNick Hibma################################################################################ 355e8db04c3SNick Hibmatest_title "Test: Removing all MACs one by one..." 356e8db04c3SNick HibmaI=1 357e8db04c3SNick Hibmafor i in $(seq $ITERATIONS | sort -R); do 35865f4ff4eSAlex Richardson test_comment "Iteration $I/$ITERATIONS..." 359e8db04c3SNick Hibma for j in $(seq 0 1 $SUBITERATIONS | sort -R); do 360e8db04c3SNick Hibma edge="default" 361e8db04c3SNick Hibma ether=$(genmac $j $i) 362e8db04c3SNick Hibma 363e8db04c3SNick Hibma ngctl msg MF: 'direct' "{ hookname=\"$edge\" ether=$ether }" 364e8db04c3SNick Hibma done 365e8db04c3SNick Hibma I=$(($I + 1)) 366e8db04c3SNick Hibmadone 367e8db04c3SNick Hibman=$(countmacs) 368e8db04c3SNick Hibman2=0 369e8db04c3SNick Hibmatest_eq $n $n2 'MACs in table' 370e8db04c3SNick Hibma 371e8db04c3SNick Hibmatest_bail_on_fail 372e8db04c3SNick Hibma 373e8db04c3SNick Hibma 374e8db04c3SNick Hibma################################################################################ 375e8db04c3SNick Hibmatest_title "Test: Randomly adding MACs on random hooks..." 376e8db04c3SNick Hibmarm -f $entries_lst 377e8db04c3SNick Hibmafor i in $(seq $ITERATIONS); do 37865f4ff4eSAlex Richardson test_comment "Iteration $i/$ITERATIONS..." 379e8db04c3SNick Hibma for j in $(seq 0 1 $SUBITERATIONS | sort -R); do 380e8db04c3SNick Hibma edge=$(randomedge) 381e8db04c3SNick Hibma ether=$(genmac $j $i) 382e8db04c3SNick Hibma 383e8db04c3SNick Hibma ngctl msg MF: 'direct' "{ hookname=\"$edge\" ether=$ether }" 384e8db04c3SNick Hibma 385e8db04c3SNick Hibma echo $ether $edge >> $entries_lst 386e8db04c3SNick Hibma done 387e8db04c3SNick Hibma 388e8db04c3SNick Hibma n=$(countmacs) 389e8db04c3SNick Hibmadone 390e8db04c3SNick Hibma 391e8db04c3SNick Hibman=$(countmacs out1) 392e8db04c3SNick Hibman2=$(grep -c ' out1' $entries_lst) 393e8db04c3SNick Hibmatest_eq $n $n2 'MACs in table for out1' 394e8db04c3SNick Hibman=$(countmacs out2) 395e8db04c3SNick Hibman2=$(grep -c ' out2' $entries_lst) 396e8db04c3SNick Hibmatest_eq $n $n2 'MACs in table for out2' 397e8db04c3SNick Hibman=$(countmacs out3) 398e8db04c3SNick Hibman2=$(grep -c ' out3' $entries_lst) 399e8db04c3SNick Hibmatest_eq $n $n2 'MACs in table for out3' 400e8db04c3SNick Hibma 401e8db04c3SNick Hibmatest_bail_on_fail 402e8db04c3SNick Hibma 403e8db04c3SNick Hibma 404e8db04c3SNick Hibma################################################################################ 405e8db04c3SNick Hibmatest_title "Test: Randomly changing MAC assignments..." 406e8db04c3SNick Hibmarm -f $entries2_lst 407e8db04c3SNick Hibmafor i in $(seq $ITERATIONS); do 40865f4ff4eSAlex Richardson test_comment "Iteration $i/$ITERATIONS..." 409e8db04c3SNick Hibma cat $entries_lst | while read ether edge; do 410e8db04c3SNick Hibma edge2=$(randomedge) 411e8db04c3SNick Hibma 412e8db04c3SNick Hibma ngctl msg MF: 'direct' "{ hookname=\"$edge2\" ether=$ether }" 413e8db04c3SNick Hibma 414e8db04c3SNick Hibma echo $ether $edge2 >> $entries2_lst 415e8db04c3SNick Hibma done 416e8db04c3SNick Hibma 417e8db04c3SNick Hibma n=$(countmacs out1) 418e8db04c3SNick Hibma n2=$(grep -c ' out1' $entries2_lst) 419e8db04c3SNick Hibma test_eq $n $n2 'MACs in table for out1' 420e8db04c3SNick Hibma n=$(countmacs out2) 421e8db04c3SNick Hibma n2=$(grep -c ' out2' $entries2_lst) 422e8db04c3SNick Hibma test_eq $n $n2 'MACs in table for out2' 423e8db04c3SNick Hibma n=$(countmacs out3) 424e8db04c3SNick Hibma n2=$(grep -c ' out3' $entries2_lst) 425e8db04c3SNick Hibma test_eq $n $n2 'MACs in table for out3' 426e8db04c3SNick Hibma 427e8db04c3SNick Hibma test_bail_on_fail 428e8db04c3SNick Hibma 429e8db04c3SNick Hibma mv $entries2_lst $entries_lst 430e8db04c3SNick Hibmadone 431e8db04c3SNick Hibma 432e8db04c3SNick Hibma 433e8db04c3SNick Hibma################################################################################ 434e8db04c3SNick Hibmatest_title "Test: Resetting macfilter..." 4357dd1f932SAlex Richardsontest_success "**** reset failed" ngctl msg MF: reset 436e8db04c3SNick Hibmatest_eq $(countmacs) 0 'MACs in table' 437e8db04c3SNick Hibma 438e8db04c3SNick Hibmatest_bail_on_fail 439e8db04c3SNick Hibma 440e8db04c3SNick Hibma 441e8db04c3SNick Hibma################################################################################ 442e8db04c3SNick Hibma 443e8db04c3SNick Hibmaexit 0 444