mirror of
				https://github.com/Telecominfraproject/wlan-lanforge-scripts.git
				synced 2025-10-31 18:58:01 +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 | ||||
| station=wlan0 | ||||
| upstream=eth1 | ||||
| num_mvlans=20 | ||||
| num_mvlans=200 | ||||
| cxlist=() | ||||
| 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 INT | ||||
| trap do_sigint KILL | ||||
| @@ -20,66 +22,117 @@ trap do_sigint SEGV | ||||
| trap do_sigint TERM | ||||
|  | ||||
| function do_sigint() { | ||||
|     echo "" | ||||
|     for cx in "${cxlist[@]}"; do | ||||
|         echo -n "stopping $cx " | ||||
|         fire_cmd set_cx_state default_tm $cx STOPPED >/dev/null | ||||
|     echo -en "\nDefaulting arp timings " | ||||
|     for ((i=0; i < num_mvlans; i++)); do | ||||
|         mvlan="${upstream}#${i}" | ||||
|         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 | ||||
|     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 | ||||
|         echo -n "removing $cx " | ||||
|         echo -n "x" | ||||
|         fire_cmd rm_cx default_tm $cx STOPPED >/dev/null | ||||
|     done | ||||
|     echo "" | ||||
|     echo -n "Removing endpoints:   " | ||||
|     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}-B STOPPED >/dev/null | ||||
|     done | ||||
|     echo "" | ||||
|     set +x | ||||
|     exit 0 | ||||
| } | ||||
|  | ||||
| function fire_cmd() { | ||||
|     ./lf_firemod.pl --mgr $mgr --mgr_port $port --quiet yes --action do_cmd \ | ||||
|     --cmd "$*" \ | ||||
|      &>/dev/null | ||||
|     ./lf_firemod.pl --mgr $mgr --mgr_port $port --quiet yes \ | ||||
|          --action do_cmd --cmd "$*" &>/dev/null | ||||
| } | ||||
| function fire_newcx() { | ||||
|     local cxname=$1; shift | ||||
|     local sta=$1; shift | ||||
|     local eth=$1; shift | ||||
|     ./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 \ | ||||
|          &>/dev/null | ||||
|         --cx_name $cxname --use_ports $sta,$eth --use_speeds 11500,11500 --endp_type udp \ | ||||
|         &>/dev/null | ||||
| } | ||||
|  | ||||
| # 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}" | ||||
|     echo -n " $mvlan" | ||||
|     fire_cmd rm_vlan 1 1 $mvlan | ||||
|     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 | ||||
|     echo -n "+" | ||||
|     fire_cmd set_port 1 1 "$mvlan" NA NA NA NA 2147483648 NA NA NA NA 67125250 | ||||
|     echo -n "." | ||||
|     echo -n ":" | ||||
|     sleep 0.05 | ||||
| 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 | ||||
|     echo -n "o" | ||||
|     echo -n "+" | ||||
|     cxlist+=("udp-$i") | ||||
|     ports+=($mvlan) | ||||
| done | ||||
| sleep 4 | ||||
| for i in `seq 0 $num_mvlans`; do | ||||
|     echo -n "!" | ||||
|     fire_cmd set_cx_state default_tm "udp-$i" RUNNING | ||||
|     fire_cmd add_tgcx udp-arp "udp-$i" | ||||
| 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 -n "Starting arp flushing " | ||||
| echo -n "Starting arp flushing: " | ||||
| while : ; do | ||||
|     for p in "${ports[@]}"; do | ||||
|         ip neigh flush dev $p@$upstream | ||||
|  | ||||
|          ip neigh flush dev $p | ||||
|     done | ||||
|     echo -n "." | ||||
|     echo -n "!" | ||||
|     sleep 0.2 | ||||
| done | ||||
| # | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Jed Reynolds
					Jed Reynolds