1*4882a593Smuzhiyun#!/bin/sh 2*4882a593Smuzhiyun 3*4882a593Smuzhiyunset -eu 4*4882a593Smuzhiyun 5*4882a593Smuzhiyunping_once() 6*4882a593Smuzhiyun{ 7*4882a593Smuzhiyun type ping${1} >/dev/null 2>&1 && PING="ping${1}" || PING="ping -${1}" 8*4882a593Smuzhiyun $PING -q -c 1 -W 1 ${2%%/*} >/dev/null 2>&1 9*4882a593Smuzhiyun} 10*4882a593Smuzhiyun 11*4882a593Smuzhiyunwait_for_ip() 12*4882a593Smuzhiyun{ 13*4882a593Smuzhiyun local _i 14*4882a593Smuzhiyun echo -n "Wait for testing IPv4/IPv6 to become available " 15*4882a593Smuzhiyun for _i in $(seq ${MAX_PING_TRIES}); do 16*4882a593Smuzhiyun echo -n "." 17*4882a593Smuzhiyun if ping_once 4 ${TEST_IPv4} && ping_once 6 ${TEST_IPv6}; then 18*4882a593Smuzhiyun echo " OK" 19*4882a593Smuzhiyun return 20*4882a593Smuzhiyun fi 21*4882a593Smuzhiyun done 22*4882a593Smuzhiyun echo 1>&2 "ERROR: Timeout waiting for test IP to become available." 23*4882a593Smuzhiyun exit 1 24*4882a593Smuzhiyun} 25*4882a593Smuzhiyun 26*4882a593Smuzhiyunsetup() 27*4882a593Smuzhiyun{ 28*4882a593Smuzhiyun # Create testing interfaces not to interfere with current environment. 29*4882a593Smuzhiyun ip link add dev ${TEST_IF} type veth peer name ${TEST_IF_PEER} 30*4882a593Smuzhiyun ip link set ${TEST_IF} up 31*4882a593Smuzhiyun ip link set ${TEST_IF_PEER} up 32*4882a593Smuzhiyun 33*4882a593Smuzhiyun ip -4 addr add ${TEST_IPv4} dev ${TEST_IF} 34*4882a593Smuzhiyun ip -6 addr add ${TEST_IPv6} dev ${TEST_IF} 35*4882a593Smuzhiyun wait_for_ip 36*4882a593Smuzhiyun} 37*4882a593Smuzhiyun 38*4882a593Smuzhiyuncleanup() 39*4882a593Smuzhiyun{ 40*4882a593Smuzhiyun ip link del ${TEST_IF} 2>/dev/null || : 41*4882a593Smuzhiyun ip link del ${TEST_IF_PEER} 2>/dev/null || : 42*4882a593Smuzhiyun} 43*4882a593Smuzhiyun 44*4882a593Smuzhiyunmain() 45*4882a593Smuzhiyun{ 46*4882a593Smuzhiyun trap cleanup EXIT 2 3 6 15 47*4882a593Smuzhiyun setup 48*4882a593Smuzhiyun ./test_sock_addr setup_done 49*4882a593Smuzhiyun} 50*4882a593Smuzhiyun 51*4882a593SmuzhiyunBASENAME=$(basename $0 .sh) 52*4882a593SmuzhiyunTEST_IF="${BASENAME}1" 53*4882a593SmuzhiyunTEST_IF_PEER="${BASENAME}2" 54*4882a593SmuzhiyunTEST_IPv4="127.0.0.4/8" 55*4882a593SmuzhiyunTEST_IPv6="::6/128" 56*4882a593SmuzhiyunMAX_PING_TRIES=5 57*4882a593Smuzhiyun 58*4882a593Smuzhiyunmain 59