1#!/bin/bash 2 3TFTP_EXEC_DIR="$(pwd)/build/test" 4TFTP_WORK_DIR="${TFTP_EXEC_DIR}/tmp" 5TFTP_WORK_SUBDIR="${TFTP_WORK_DIR}/subdir" 6TFTP_WORK_FILE="test.img" 7 8 9 10function tftp_setup() { 11 dd if=/dev/urandom bs=1000 count=10 of=${1}/$TFTP_WORK_FILE 12} 13 14function tftp_cleanup() { 15 echo CLEANUP 16 pwd;ls 17 killall -wq picoapp.elf 18 rm -rf $TFTP_WORK_DIR 19 if [ $1 ]; then 20 exit $1 21 fi 22} 23 24if ! [ -x "$(command -v vde_switch)" ]; then 25 echo 'VDE Switch is not installed.' >&2 26fi 27 28if [ ! -e test/vde_sock_start_user.sh ]; then 29 echo "VDE SOCK START FILE NOT FOUND. NO VDE SETUP. EXITING" 30 exit 1 31else 32 echo "VDE SOCK START SCRIPT STARTED." 33 ./test/vde_sock_start_user.sh 34fi 35 36rm -f /tmp/pico-mem-report-* 37sleep 2 38ulimit -c unlimited 39killall -wq picoapp.elf 40killall -wq picoapp6.elf 41 42 43echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 44echo "~~~ 6LoWPAN PING 1HOP (1500B) ~~~" 45echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 46(build/test/picoapp6.elf -6 0,0,0) & 47pids="$! " 48sleep 1 49(build/test/picoapp6.elf -6 1,2,1 -a noop) & 50pids+="$! " 51sleep 1 52build/test/picoapp6.elf -6 2,1,0 -a ping,2aaa:abcd:0000:0000:0200:00aa:ab00:0001,1500,0,1 || exit 1 53#TODO roll out this check for all "daemon" processes 54for pid in $pids; do ps -o pid= -p $pid || exit 1; done # check whether daemon processes didn't die from e.g. ASAN 55killall -w picoapp6.elf -s SIGQUIT 56 57echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 58echo "~~~ 6LoWPAN UDP 1HOP (1400B) ~~~" 59echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 60#TODO are these "daemon" processes that need to be killed, or are they intended to halt on their own, giving a status code? 61(build/test/picoapp6.elf -6 0,0,0) & 62sleep 1 63(build/test/picoapp6.elf -6 1,2,1 -a udpecho,::0,6667,) & 64sleep 1 65build/test/picoapp6.elf -6 2,1,0 -a udpclient,2aaa:abcd:0000:0000:0200:00aa:ab00:0001,6667,6667,1400,10,1, || exit 1 66killall -w picoapp6.elf -s SIGQUIT 67 68echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 69echo "~~~ MULTICAST6 TEST ~~~" 70echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 71(./build/test/picoapp6.elf --vde pic1,/tmp/pic0.ctl,aaaa::2,ffff::, -a mcastreceive_ipv6,aaaa::2,ff00::e007:707,6667,6667,) & 72(./build/test/picoapp6.elf --vde pic2,/tmp/pic0.ctl,aaaa::3,ffff::, -a mcastreceive_ipv6,aaaa::3,ff00::e007:707,6667,6667,) & 73(./build/test/picoapp6.elf --vde pic3,/tmp/pic0.ctl,aaaa::4,ffff::, -a mcastreceive_ipv6,aaaa::4,ff00::e007:707,6667,6667,) & 74sleep 2 75 ./build/test/picoapp6.elf --vde pic0,/tmp/pic0.ctl,aaaa::1,ffff::, -a mcastsend_ipv6,aaaa::1,ff00::e007:707,6667,6667,|| exit 1 76killall -w picoapp6.elf -s SIGQUIT 77 78echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 79echo "~~~ PING6 LOCALHOST TEST ~~~" 80echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 81./build/test/picoapp6.elf --loop -a ping,::1,,,, || exit 1 82killall -w picoapp6.elf 83 84echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 85echo "~~~ PING6 TEST ~~~" 86echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 87(./build/test/picoapp6.elf --vde pic0,/tmp/pic0.ctl,aaaa::1,ffff::,,,,) & 88./build/test/picoapp6.elf --vde pic0,/tmp/pic0.ctl,aaaa::2,ffff::,,, -a ping,aaaa::1,,,, || exit 1 89killall -w picoapp6.elf 90 91echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 92echo "~~~ PING6 TEST (aborted in 4 seconds...) ~~~" 93echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 94(./build/test/picoapp6.elf --vde pic0,/tmp/pic0.ctl,aaaa::1,ffff::,,,,) & 95(./build/test/picoapp6.elf --vde pic0,/tmp/pic0.ctl,aaaa::2,ffff::,,, -a ping,aaaa::1,64,4,,) & 96sleep 7 97killall -w picoapp6.elf 98 99echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 100echo "~~~ TCP6 TEST ~~~" 101echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 102(./build/test/picoapp6.elf --vde pic0,/tmp/pic0.ctl,aaaa::1,ffff::,,, -a tcpbench,r,6667,,) & 103./build/test/picoapp6.elf --vde pic0,/tmp/pic0.ctl,aaaa::2,ffff::,,, -a tcpbench,t,aaaa::1,6667,, || exit 1 104killall -w picoapp6.elf 105 106echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 107echo "~~~ TCP6 TEST (with 2% packet loss on both directions) ~~~" 108echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 109(./build/test/picoapp6.elf --vde pic0,/tmp/pic0.ctl,aaaa::1,ffff::,,2,2, -a tcpbench,r,6667,,) & 110./build/test/picoapp6.elf --vde pic0,/tmp/pic0.ctl,aaaa::2,ffff::,,, -a tcpbench,t,aaaa::1,6667,, || exit 1 111killall -w picoapp6.elf 112 113echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 114echo "~~~ TCP6 TEST (nagle) ~~~" 115echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 116(./build/test/picoapp6.elf --vde pic0,/tmp/pic0.ctl,aaaa::1,ffff::,,, -a tcpbench,r,6667,n,) & 117./build/test/picoapp6.elf --vde pic0,/tmp/pic0.ctl,aaaa::2,ffff::,,, -a tcpbench,t,aaaa::1,6667,n, || exit 1 118killall -w picoapp6.elf 119 120echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 121echo "~~~ UDP6 TEST ~~~" 122echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 123(./build/test/picoapp6.elf --vde pic0,/tmp/pic0.ctl,aaaa::1,ffff::,,, -a udpecho,::0,6667,) & 124pids="$! " 125./build/test/picoapp6.elf --vde pic0,/tmp/pic0.ctl,aaaa::2,ffff::,,, -a udpclient,aaaa::1,6667,6667,1400,100,10, || exit 1 126wait $pids || exit 1 127killall -w picoapp6.elf 128 129echo 130echo 131echo 132echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 133echo "~~~ IPV6 FWD TCP TEST ~~~" 134echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 135(./build/test/picoapp6.elf --vde pic0,/tmp/pic1.ctl,2001:aabb::2,ffff:ffff::,2001:aabb::ff,, -a tcpbench,r,6667,,) & 136(./build/test/picoapp6.elf --vde pic0,/tmp/pic0.ctl,2001:aaaa::ff,ffff:ffff::,,, --vde pic1,/tmp/pic1.ctl,2001:aabb::ff,ffff:ffff::,,, -a noop,) & 137./build/test/picoapp6.elf --vde pic0,/tmp/pic0.ctl,2001:aaaa::1,ffff:ffff::,2001:aaaa::ff,, -a tcpbench,t,2001:aabb::2,6667,, || exit 1 138sleep 2 139killall -w picoapp6.elf 140 141 142echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 143echo "~~~ MULTICAST TEST ~~~" 144echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 145(./build/test/picoapp.elf --vde pic1:/tmp/pic0.ctl:10.40.0.3:255.255.0.0: -a mcastreceive:10.40.0.3:224.7.7.7:6667:6667:) & 146(./build/test/picoapp.elf --vde pic2:/tmp/pic0.ctl:10.40.0.4:255.255.0.0: -a mcastreceive:10.40.0.4:224.7.7.7:6667:6667:) & 147(./build/test/picoapp.elf --vde pic3:/tmp/pic0.ctl:10.40.0.5:255.255.0.0: -a mcastreceive:10.40.0.5:224.7.7.7:6667:6667:) & 148sleep 2 149./build/test/picoapp.elf --vde pic0:/tmp/pic0.ctl:10.40.0.2:255.255.0.0: -a mcastsend:10.40.0.2:224.7.7.7:6667:6667: || exit 1 150killall -w picoapp.elf 151 152echo 153echo 154echo 155echo 156echo 157 158echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 159echo "~~~ IPV4 tests! ~~~" 160echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 161 162echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 163echo "~~~ PING LOCALHOST TEST ~~~" 164echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 165./build/test/picoapp.elf --loop -a ping:127.0.0.1:::: || exit 1 166 167echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 168echo "~~~ PING TEST ~~~" 169echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 170(./build/test/picoapp.elf --vde pic0:/tmp/pic0.ctl:10.40.0.8:255.255.0.0:::) & 171./build/test/picoapp.elf --vde pic0:/tmp/pic0.ctl:10.40.0.9:255.255.0.0::: -a ping:10.40.0.8:::: || exit 1 172killall -w picoapp.elf 173 174echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 175echo "~~~ PING TEST -- Aborted in 4 seconds ~~~" 176echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 177(./build/test/picoapp.elf --vde pic0:/tmp/pic0.ctl:10.40.0.8:255.255.0.0:::) & 178(./build/test/picoapp.elf --vde pic0:/tmp/pic0.ctl:10.40.0.9:255.255.0.0::: -a ping:10.40.0.8:64:4::) & 179sleep 7 180killall -w picoapp.elf 181 182echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 183echo "~~~ TCP TEST ~~~" 184echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 185(./build/test/picoapp.elf --vde pic0:/tmp/pic0.ctl:10.40.0.8:255.255.0.0:::: -a tcpbench:r:6667::) & 186./build/test/picoapp.elf --vde pic0:/tmp/pic0.ctl:10.40.0.9:255.255.0.0::: -a tcpbench:t:10.40.0.8:6667:: || exit 1 187killall -w picoapp.elf 188 189echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 190echo "~~~ TCP TEST (with global route) ~~~" 191echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 192(./build/test/picoapp.elf --vde pic0:/tmp/pic0.ctl:10.40.0.8:255.255.0.0:::: --vde pic1:/tmp/pic1.ctl:10.50.0.10:255.255.0.0:10.50.0.1: -a tcpbench:r:6667::) & 193./build/test/picoapp.elf --vde pic0:/tmp/pic0.ctl:10.40.0.9:255.255.0.0::: -a tcpbench:t:10.40.0.8:6667:: || exit 1 194killall -w picoapp.elf 195 196echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 197echo "~~~ TCP TEST (with 2% packet loss on both directions) ~~~" 198echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 199(./build/test/picoapp.elf --vde pic0:/tmp/pic0.ctl:10.40.0.8:255.255.0.0::2:2: -a tcpbench:r:6667::) & 200./build/test/picoapp.elf --vde pic0:/tmp/pic0.ctl:10.40.0.9:255.255.0.0::: -a tcpbench:t:10.40.0.8:6667:: || exit 1 201killall -w picoapp.elf 202 203echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 204echo "~~~ TCP TEST (nagle) ~~~" 205echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 206(./build/test/picoapp.elf --vde pic0:/tmp/pic0.ctl:10.40.0.8:255.255.0.0::: -a tcpbench:r:6667:n:) & 207./build/test/picoapp.elf --vde pic0:/tmp/pic0.ctl:10.40.0.9:255.255.0.0::: -a tcpbench:t:10.40.0.8:6667:n: || exit 1 208killall -w picoapp.elf 209 210echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 211echo "~~~ UDP TEST ~~~" 212echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 213(./build/test/picoapp.elf --vde pic0:/tmp/pic0.ctl:10.40.0.8:255.255.0.0::: -a udpecho:10.40.0.8:6667:) & 214pids="$! " 215./build/test/picoapp.elf --vde pic0:/tmp/pic0.ctl:10.40.0.9:255.255.0.0::: -a udpclient:10.40.0.8:6667:6667:1400:100:10: || exit 1 216wait $pids || exit 1 217 218echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 219echo "~~~ UDP TEST with fragmentation ~~~" 220echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 221(./build/test/picoapp.elf --vde pic0:/tmp/pic0.ctl:10.40.0.8:255.255.0.0::: -a udpecho:10.40.0.8:6667:) & 222pids="$! " 223./build/test/picoapp.elf --vde pic0:/tmp/pic0.ctl:10.40.0.9:255.255.0.0::: -a udpclient:10.40.0.8:6667:6667:4500:100:10: || exit 1 224wait $pids || exit 1 225 226echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 227echo "~~~ NAT TCP TEST ~~~" 228echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 229(./build/test/picoapp.elf --vde pic0:/tmp/pic0.ctl:10.40.0.10:255.255.0.0::: --vde pic1:/tmp/pic1.ctl:10.50.0.10:255.255.0.0: -a natbox:10.50.0.10) & 230sleep 2 231(./build/test/picoapp.elf --vde pic0:/tmp/pic1.ctl:10.50.0.8:255.255.0.0::: -a tcpbench:r:6667:) & 232sleep 2 233./build/test/picoapp.elf --vde pic0:/tmp/pic0.ctl:10.40.0.9:255.255.0.0:10.40.0.10::: -a tcpbench:t:10.50.0.8:6667: || exit 1 234killall -w picoapp.elf 235 236echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 237echo "~~~ NAT UDP TEST ~~~" 238echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 239(./build/test/picoapp.elf --vde pic0:/tmp/pic0.ctl:10.40.0.10:255.255.0.0::: --vde pic1:/tmp/pic1.ctl:10.50.0.10:255.255.0.0::: -a natbox:10.50.0.10) & 240(./build/test/picoapp.elf --vde pic0:/tmp/pic1.ctl:10.50.0.8:255.255.0.0::: -a udpecho:10.50.0.8:6667:) & 241./build/test/picoapp.elf --vde pic0:/tmp/pic0.ctl:10.40.0.9:255.255.0.0:10.40.0.10::: -a udpclient:10.50.0.8:6667:6667:1400:100:10: || exit 1 242#sometimes udpecho finishes before reaching wait %2 243#wait %2 244killall -w picoapp.elf 245 246echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 247echo "~~~ MULTICAST TEST ~~~" 248echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 249(./build/test/picoapp.elf --vde pic1:/tmp/pic0.ctl:10.40.0.3:255.255.0.0::: -a mcastreceive:10.40.0.3:224.7.7.7:6667:6667:) & 250(./build/test/picoapp.elf --vde pic2:/tmp/pic0.ctl:10.40.0.4:255.255.0.0::: -a mcastreceive:10.40.0.4:224.7.7.7:6667:6667:) & 251(./build/test/picoapp.elf --vde pic3:/tmp/pic0.ctl:10.40.0.5:255.255.0.0::: -a mcastreceive:10.40.0.5:224.7.7.7:6667:6667:) & 252sleep 2 253./build/test/picoapp.elf --vde pic0:/tmp/pic0.ctl:10.40.0.2:255.255.0.0::: -a mcastsend:10.40.0.2:224.7.7.7:6667:6667: || exit 1 254killall -w picoapp.elf 255 256killall -w picoapp.elf 257 258echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 259echo "~~~ DHCP TEST ~~~" 260echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 261(./build/test/picoapp.elf --vde pic0:/tmp/pic0.ctl:10.40.0.1:255.255.0.0::: -a dhcpserver:pic0:10.40.0.1:255.255.255.0:64:128:) & 262./build/test/picoapp.elf --barevde pic0:/tmp/pic0.ctl: -a dhcpclient:pic0 || exit 1 263killall -w picoapp.elf 264 265echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 266echo "~~~ DHCP DUAL TEST ~~~" 267echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 268(./build/test/picoapp.elf --vde pic0:/tmp/pic0.ctl:10.40.0.2:255.255.0.0::: -a dhcpserver:pic0:10.40.0.2:255.255.255.0:64:128:) & 269(./build/test/picoapp.elf --vde pic1:/tmp/pic1.ctl:10.50.0.2:255.255.0.0::: -a dhcpserver:pic1:10.50.0.2:255.255.255.0:64:128:) & 270./build/test/picoapp.elf --barevde pic0:/tmp/pic0.ctl: --barevde pic1:/tmp/pic1.ctl: -a dhcpclient:pic0:pic1: || exit 1 271killall -w picoapp.elf 272 273#TO DO: the ping address 169.254.22.5 is hardcoded in the slaacv4 test. Nice to pass that by parameter 274echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 275echo "~~~ SLAACV4 TEST ~~~" 276echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 277(./build/test/picoapp.elf --vde pic0:/tmp/pic0.ctl:169.254.22.5:255.255.0.0:::) & 278./build/test/picoapp.elf --barevde pic0:/tmp/pic0.ctl: -a slaacv4:pic0 || exit 1 279killall -w picoapp.elf 280 281 282./build/test/picoapp.elf --vde pic0:/tmp/pic0.ctl:10.40.0.2:255.255.0.0:10.40.0.1::: -a udpdnsclient:www.google.be:173.194.67.94:: & 283./build/test/picoapp.elf --vde pic0:/tmp/pic0.ctl:10.40.0.2:255.255.0.0:10.40.0.1::: -a udpdnsclient:ipv6.google.be:doesntmatter:ipv6: & 284./build/test/picoapp.elf --vde pic0:/tmp/pic0.ctl:10.50.0.2:255.255.0.0:10.50.0.1::: -a sntp:0.europe.pool.ntp.org & 285sleep 20 286killall -w picoapp.elf 287 288 289echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 290echo "~~~ MDNS TEST ~~~" 291echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 292#retrieve a local mdns host name from the host 293(./build/test/picoapp.elf --vde pic0:/tmp/pic0.ctl:10.50.0.2:255.255.255.0:10.50.0.1: --app mdns:hostfoo.local:hostbar.local:) & 294(./build/test/picoapp.elf --vde pic0:/tmp/pic0.ctl:10.50.0.3:255.255.255.0:10.50.0.1: --app mdns:hostbar.local:hostfoo.local:) & 295(./build/test/picoapp.elf --vde pic0:/tmp/pic0.ctl:10.50.0.2:255.255.255.0:10.50.0.1: --app mdns:hostfoobar.local:nonexisting.local:) & 296sleep 10 297killall -w picoapp.elf 298 299echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 300echo "~~~ DNS_SD TEST ~~~" 301echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 302#register a service 303(./build/test/picoapp.elf --vde pic0:/tmp/pic0.ctl:10.50.0.2:255.255.255.0:10.50.0.1: --app dns_sd:host.local:WebServer) & 304(./build/test/picoapp.elf --vde pic0:/tmp/pic0.ctl:10.50.0.3:255.255.255.0:10.50.0.1: --app dns_sd:host.local:WebServer) & 305sleep 30 306killall -w picoapp.elf 307 308sleep 1 309sync 310 311 312# TFTP TEST BEGINS... 313 314if [ ! -d $TFTP_WORK_DIR ]; then 315 mkdir $TFTP_WORK_DIR || exit 1 316fi 317if [ ! -d ${TFTP_WORK_SUBDIR}/server ]; then 318 mkdir $TFTP_WORK_SUBDIR || exit 1 319fi 320 321pushd $TFTP_WORK_DIR 322 323echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 324echo "~~~ TFTP GET TEST ~~~" 325echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 326tftp_setup $TFTP_WORK_DIR 327(${TFTP_EXEC_DIR}/picoapp.elf --vde pic0:/tmp/pic0.ctl:10.50.0.2:255.255.255.0:10.50.0.1: --app tftp:S:) & 328cd $TFTP_WORK_SUBDIR 329sleep 2 330${TFTP_EXEC_DIR}/picoapp.elf --vde pic0:/tmp/pic0.ctl:10.50.0.3:255.255.255.0:10.50.0.1: --app tftp:R:${TFTP_WORK_FILE}:10.50.0.2: || tftp_cleanup 1 331sleep 3 332killall -w picoapp.elf 333 334sleep 1 335 336rm $TFTP_WORK_FILE 337 338echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 339echo "~~~ TFTP PUT TEST ~~~" 340echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 341(${TFTP_EXEC_DIR}/picoapp.elf --vde pic0:/tmp/pic0.ctl:10.50.0.2:255.255.255.0:10.50.0.1: --app tftp:S:) & 342cd $TFTP_WORK_DIR 343tftp_setup $TFTP_WORK_DIR 344sleep 2 345${TFTP_EXEC_DIR}/picoapp.elf --vde pic0:/tmp/pic0.ctl:10.50.0.3:255.255.255.0:10.50.0.1: --app tftp:T:${TFTP_WORK_FILE}:10.50.0.2: || tftp_cleanup 1 346sleep 3 347 348tftp_cleanup 349popd 350# TFTP TEST ENDS. 351 352MAXMEM=`cat /tmp/pico-mem-report-* | sort -r -n |head -1` 353echo 354echo 355echo 356echo "MAX memory used: $MAXMEM" 357rm -f /tmp/pico-mem-report-* 358 359./test/vde_sock_start_user.sh stop 360echo "SUCCESS!" 361