mirror of
https://github.com/Telecominfraproject/wlan-lanforge-scripts.git
synced 2025-11-01 19:28:00 +00:00
Random ping utility, to be used by a Generic Endpoint
Signed-off-by: Jed Reynolds <jed@bitratchet.com>
This commit is contained in:
114
rping.bash
Executable file
114
rping.bash
Executable file
@@ -0,0 +1,114 @@
|
||||
#!/bin/bash
|
||||
|
||||
## ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ##
|
||||
## Ping a random ip every second, indefinitely. The ping command
|
||||
## has a deadline of *count* seconds and wait time of 1 second.
|
||||
## This script is aware of vrf_exec.bash and LF_NO_USE_VRF.
|
||||
##
|
||||
## Example Usage:
|
||||
##
|
||||
## Ping a random ip once from port br0 every second:
|
||||
## ./rping.bash -p br0 -c 1
|
||||
##
|
||||
## Default to eth1, ping 4 random IPs, ping each ip 10 times
|
||||
## ./rping.bash -r 4 -c 10
|
||||
##
|
||||
## Ping 4 random IPs, ping each ip 10 times, from port br1
|
||||
## ./rping.bash -r 4 -c 10 -pbr1
|
||||
##
|
||||
## ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ##
|
||||
# set -vux
|
||||
|
||||
HL="/home/lanforge"
|
||||
HL_VX="$HL/vrf_exec.bash"
|
||||
UV=1
|
||||
if [ -f $HL/LF_NO_USE_VRF ]; then
|
||||
UV=0
|
||||
fi
|
||||
if [ ! -x $HL_VX ]; then
|
||||
UV=0
|
||||
fi
|
||||
|
||||
usage() {
|
||||
echo "Usage: $0 [-p port] [-c count of pings per ip] [-r number random ips] [-d seconds duration]"
|
||||
}
|
||||
|
||||
PORT=eth1
|
||||
COUNT=1
|
||||
NUM_IP=0
|
||||
DURATION=0
|
||||
|
||||
while getopts "hi:c:d:p:" OPT; do
|
||||
case "${OPT}" in
|
||||
c) COUNT="${OPTARG}"
|
||||
;;
|
||||
d) DURATION="${OPTARG}"
|
||||
if (( $DURATION < 0 )); then
|
||||
echo "$0: duration cannot be negative"
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
h) usage
|
||||
exit 0
|
||||
;;
|
||||
i) NUM_IP="${OPTARG}"
|
||||
;;
|
||||
p) PORT="${OPTARG}"
|
||||
;;
|
||||
*) echo "Unknown option $OPT";
|
||||
usage
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [[ x$PORT == x ]]; then
|
||||
echo "$0: no port" >&2
|
||||
return 1
|
||||
fi
|
||||
|
||||
# this is unfiltered and will ping network numbers, broadcast numbers and
|
||||
# multicast addresses, if you need a specific range, you should add that
|
||||
# logic near here
|
||||
rand_ip() {
|
||||
printf "%d.%d.%d.%d" \
|
||||
"$((RANDOM % 256))" \
|
||||
"$((RANDOM % 256))" \
|
||||
"$((RANDOM % 256))" \
|
||||
"$((RANDOM % 256))"
|
||||
}
|
||||
|
||||
my_ping() {
|
||||
if [[ x$1 == x ]]; then
|
||||
echo "$0: my_ping: cannot ping empty ip" >&2
|
||||
return 1
|
||||
fi
|
||||
|
||||
if (($UV == 1)); then
|
||||
$HL_VX $PORT ping -c $COUNT -D -i1 -n -w$COUNT -W1 "$1"
|
||||
else
|
||||
ping -I$PORT -c $COUNT -D -i1 -n -w$COUNT -W1 "$1"
|
||||
fi
|
||||
}
|
||||
|
||||
IP_LIST=()
|
||||
if (( NUM_IP != 0 )); then
|
||||
for n in `seq 1 $NUM_IP`; do
|
||||
IP_LIST+=($(rand_ip))
|
||||
done
|
||||
fi
|
||||
|
||||
counter=0;
|
||||
mod=$NUM_IP
|
||||
while true; do
|
||||
if (( $NUM_IP > 0 )); then
|
||||
i=$(($counter % $NUM_IP))
|
||||
randi="${IP_LIST[$i]}"
|
||||
counter=$((counter++))
|
||||
else
|
||||
randi=$(rand_ip)
|
||||
fi
|
||||
my_ping "$randi"
|
||||
sleep 1
|
||||
done
|
||||
#
|
||||
Reference in New Issue
Block a user