mirror of
https://github.com/Telecominfraproject/wlan-lanforge-scripts.git
synced 2025-10-30 18:27:53 +00:00
arp-flood: much improved, causes a healthy arp storm
This commit is contained in:
109
arp-flood.sh
109
arp-flood.sh
@@ -8,9 +8,11 @@ mgr=localhost
|
|||||||
port=4001
|
port=4001
|
||||||
station=wlan0
|
station=wlan0
|
||||||
upstream=eth1
|
upstream=eth1
|
||||||
num_mvlans=20
|
num_mvlans=200
|
||||||
cxlist=()
|
cxlist=()
|
||||||
ports=($station)
|
ports=($station)
|
||||||
|
saved_gc_stale_time=`cat /proc/sys/net/ipv4/neigh/default/gc_stale_time`
|
||||||
|
saved_base_reachable_time_ms=`cat /proc/sys/net/ipv4/neigh/default/base_reachable_time_ms`
|
||||||
trap do_sigint ABRT
|
trap do_sigint ABRT
|
||||||
trap do_sigint INT
|
trap do_sigint INT
|
||||||
trap do_sigint KILL
|
trap do_sigint KILL
|
||||||
@@ -20,66 +22,117 @@ trap do_sigint SEGV
|
|||||||
trap do_sigint TERM
|
trap do_sigint TERM
|
||||||
|
|
||||||
function do_sigint() {
|
function do_sigint() {
|
||||||
echo ""
|
echo -en "\nDefaulting arp timings "
|
||||||
for cx in "${cxlist[@]}"; do
|
for ((i=0; i < num_mvlans; i++)); do
|
||||||
echo -n "stopping $cx "
|
mvlan="${upstream}#${i}"
|
||||||
fire_cmd set_cx_state default_tm $cx STOPPED >/dev/null
|
echo $saved_gc_stale_time > /proc/sys/net/ipv4/neigh/$mvlan/gc_stale_time
|
||||||
|
echo $saved_base_reachable_time_ms > /proc/sys/net/ipv4/neigh/$mvlan/base_reachable_time_ms
|
||||||
|
echo -n "."
|
||||||
done
|
done
|
||||||
|
echo ""
|
||||||
|
echo -en "\nStopping connections: "
|
||||||
|
fire_cmd stop_group udp-arp
|
||||||
|
#for cx in "${cxlist[@]}"; do
|
||||||
|
# echo -n ":"
|
||||||
|
# fire_cmd set_cx_state default_tm $cx STOPPED >/dev/null
|
||||||
|
#done
|
||||||
|
echo ""
|
||||||
|
fire_cmd clear_group udp-arp
|
||||||
|
echo -n "Removing connections: "
|
||||||
for cx in "${cxlist[@]}"; do
|
for cx in "${cxlist[@]}"; do
|
||||||
echo -n "removing $cx "
|
echo -n "x"
|
||||||
fire_cmd rm_cx default_tm $cx STOPPED >/dev/null
|
fire_cmd rm_cx default_tm $cx STOPPED >/dev/null
|
||||||
done
|
done
|
||||||
|
echo ""
|
||||||
|
echo -n "Removing endpoints: "
|
||||||
for cx in "${cxlist[@]}"; do
|
for cx in "${cxlist[@]}"; do
|
||||||
echo -n "removing $cx-A $cx-B "
|
echo -n "-"
|
||||||
fire_cmd rm_endp ${cx}-A STOPPED >/dev/null
|
fire_cmd rm_endp ${cx}-A STOPPED >/dev/null
|
||||||
fire_cmd rm_endp ${cx}-B STOPPED >/dev/null
|
fire_cmd rm_endp ${cx}-B STOPPED >/dev/null
|
||||||
done
|
done
|
||||||
|
echo ""
|
||||||
|
set +x
|
||||||
exit 0
|
exit 0
|
||||||
}
|
}
|
||||||
|
|
||||||
function fire_cmd() {
|
function fire_cmd() {
|
||||||
./lf_firemod.pl --mgr $mgr --mgr_port $port --quiet yes --action do_cmd \
|
./lf_firemod.pl --mgr $mgr --mgr_port $port --quiet yes \
|
||||||
--cmd "$*" \
|
--action do_cmd --cmd "$*" &>/dev/null
|
||||||
&>/dev/null
|
|
||||||
}
|
}
|
||||||
function fire_newcx() {
|
function fire_newcx() {
|
||||||
local cxname=$1; shift
|
local cxname=$1; shift
|
||||||
local sta=$1; shift
|
local sta=$1; shift
|
||||||
local eth=$1; shift
|
local eth=$1; shift
|
||||||
./lf_firemod.pl --mgr $mgr --mgr_port $port --action create_cx --quiet yes \
|
./lf_firemod.pl --mgr $mgr --mgr_port $port --action create_cx --quiet yes \
|
||||||
--cx_name $cxname --use_ports $sta,$eth --use_speeds 2600,2600 --endp_type udp \
|
--cx_name $cxname --use_ports $sta,$eth --use_speeds 11500,11500 --endp_type udp \
|
||||||
&>/dev/null
|
&>/dev/null
|
||||||
}
|
}
|
||||||
|
|
||||||
# create new set of vlans, this will also recreate them using random mac addresses
|
# create new set of vlans, this will also recreate them using random mac addresses
|
||||||
for i in `seq 0 $num_mvlans`; do
|
|
||||||
|
#num_vlans=$(( $num_mvlans - 1))
|
||||||
|
set -e
|
||||||
|
if (( num_mvlans < 1 )); then
|
||||||
|
echo "Too few vlans"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo -n "Removing old $num_mvlans macvlans: "
|
||||||
|
for ((i=0; i < num_mvlans; i++)); do
|
||||||
mvlan="${upstream}#${i}"
|
mvlan="${upstream}#${i}"
|
||||||
echo -n " $mvlan"
|
|
||||||
fire_cmd rm_vlan 1 1 $mvlan
|
fire_cmd rm_vlan 1 1 $mvlan
|
||||||
echo -n "-"
|
echo -n "-"
|
||||||
|
sleep 0.03
|
||||||
|
done
|
||||||
|
sleep 1
|
||||||
|
echo " Checking for $num_mvlans old vlans:"
|
||||||
|
while (./lf_portmod.pl --mgr localhost --list_port_names | grep -q "$upstream#"); do
|
||||||
|
sleep 1
|
||||||
|
echo -n ","
|
||||||
|
done
|
||||||
|
|
||||||
|
echo -n "Adding $num_mvlans new macvlans: "
|
||||||
|
for ((i=0; i < num_mvlans; i++)); do
|
||||||
fire_cmd add_mvlan 1 1 $upstream 'xx:xx:xx:*:*:xx' $i
|
fire_cmd add_mvlan 1 1 $upstream 'xx:xx:xx:*:*:xx' $i
|
||||||
echo -n "+"
|
echo -n ":"
|
||||||
fire_cmd set_port 1 1 "$mvlan" NA NA NA NA 2147483648 NA NA NA NA 67125250
|
sleep 0.05
|
||||||
echo -n "."
|
done
|
||||||
|
# "84033538"
|
||||||
|
for ((i=0; i < num_mvlans; i++)); do
|
||||||
|
mvlan="${upstream}#${i}"
|
||||||
|
fire_cmd set_port 1 1 "$mvlan" NA NA NA NA 2147483648 NA NA NA NA 75513858
|
||||||
|
echo -n "="
|
||||||
|
sleep 0.05
|
||||||
|
echo 1 > /proc/sys/net/ipv4/neigh/$mvlan/gc_stale_time
|
||||||
|
echo 1 > /proc/sys/net/ipv4/neigh/$mvlan/base_reachable_time
|
||||||
|
done
|
||||||
|
echo ""
|
||||||
|
fire_cmd add_group udp-arp
|
||||||
|
sleep 2
|
||||||
|
echo -n "Creating $num_mvlans connections: "
|
||||||
|
for ((i=0; i < num_mvlans; i++)); do
|
||||||
|
mvlan="${upstream}#${i}"
|
||||||
fire_newcx "udp-$i" $station $mvlan
|
fire_newcx "udp-$i" $station $mvlan
|
||||||
echo -n "o"
|
echo -n "+"
|
||||||
cxlist+=("udp-$i")
|
cxlist+=("udp-$i")
|
||||||
ports+=($mvlan)
|
ports+=($mvlan)
|
||||||
done
|
fire_cmd add_tgcx udp-arp "udp-$i"
|
||||||
sleep 4
|
|
||||||
for i in `seq 0 $num_mvlans`; do
|
|
||||||
echo -n "!"
|
|
||||||
fire_cmd set_cx_state default_tm "udp-$i" RUNNING
|
|
||||||
done
|
done
|
||||||
|
|
||||||
sleep 4
|
sleep 2
|
||||||
|
#for ((i=0; i < num_mvlans; i++)); do
|
||||||
|
#echo -n "="
|
||||||
|
#fire_cmd set_cx_state default_tm "udp-$i" RUNNING
|
||||||
|
#done
|
||||||
|
fire_cmd start_group udp-arp
|
||||||
|
sleep 2
|
||||||
echo ""
|
echo ""
|
||||||
echo -n "Starting arp flushing "
|
echo -n "Starting arp flushing: "
|
||||||
while : ; do
|
while : ; do
|
||||||
for p in "${ports[@]}"; do
|
for p in "${ports[@]}"; do
|
||||||
ip neigh flush dev $p@$upstream
|
ip neigh flush dev $p
|
||||||
|
|
||||||
done
|
done
|
||||||
echo -n "."
|
echo -n "!"
|
||||||
sleep 0.2
|
sleep 0.2
|
||||||
done
|
done
|
||||||
|
#
|
||||||
|
|||||||
Reference in New Issue
Block a user