mirror of
https://github.com/Telecominfraproject/wlan-lanforge-scripts.git
synced 2025-10-28 17:32:35 +00:00
124 lines
3.0 KiB
Perl
Executable File
124 lines
3.0 KiB
Perl
Executable File
#!/usr/bin/perl
|
|
|
|
# Un-buffer output
|
|
$| = 1;
|
|
|
|
use strict;
|
|
|
|
|
|
my $sleep_time = 30;
|
|
my $vlans = 100;
|
|
my $ip_base = "192.168.10";
|
|
my $gw = "192.168.10.1";
|
|
my $lsb_start = 10;
|
|
my $eth_dev = "eth0";
|
|
my $vid_base = 1000;
|
|
my $i;
|
|
my $vid;
|
|
my @pids = ();
|
|
my $peer = 0;
|
|
|
|
if ($ARGV[0] eq "p") {
|
|
# when running on peer machine...
|
|
print "Running in peer mode..\n";
|
|
$peer = 1;
|
|
$lsb_start += $vlans;
|
|
$gw = "192.168.10.250";
|
|
}
|
|
|
|
#`rmmod 8021q`;
|
|
#`modprobe 8021q`;
|
|
my $loop = 0;
|
|
while (1) {
|
|
print "Creating and configuring vlans..loop: $loop\n";
|
|
for ($i = 0; $i<$vlans; $i++) {
|
|
$vid = $vid_base + $i;
|
|
my $v = "$eth_dev.$vid";
|
|
my $lsb = $lsb_start + $i;
|
|
#print "Creating & configuring VLAN: $eth_dev.$vid\n";
|
|
`vconfig add $eth_dev $vid`;
|
|
#my $cmd = "ifconfig $v $ip_base.$lsb netmask 255.255.255.0 up";
|
|
#print "Configuring with command -:$cmd:-\n";
|
|
#`$cmd`;
|
|
|
|
my $tbl = $i + 1;
|
|
|
|
printAndExec("ip link set $v down");
|
|
printAndExec("ip link set $v up");
|
|
printAndExec("ip addr flush dev $v > /dev/null 2>&1");
|
|
printAndExec("ip address add $ip_base.$lsb/24 broadcast $ip_base.255 dev $v");
|
|
printAndExec("ip link set dev $v up");
|
|
printAndExec("ip ru add from $ip_base.$lsb/32 table $tbl");
|
|
printAndExec("ip route add $ip_base.0/24 via $ip_base.$lsb table $tbl");
|
|
printAndExec("ip route add 0/0 via $gw dev $v table $tbl");
|
|
printAndExec("echo 1 > /proc/sys/net/ipv4/conf/$v/arp_filter");
|
|
|
|
# Start traffic on interface
|
|
my $kidpid;
|
|
if (!defined($kidpid = fork())) {
|
|
# fork returned undef, so failed
|
|
die "Cannot fork: $!";
|
|
} elsif ($kidpid == 0) {
|
|
# fork returned 0, so this branch is child
|
|
while (1) {
|
|
my $url;
|
|
if ($peer) {
|
|
my $mip = $lsb - $vlans;
|
|
$url = "http://$ip_base.$mip/index.html";
|
|
}
|
|
else {
|
|
my $mip = $lsb + $vlans;
|
|
$url = "http://$ip_base.$mip/index.html";
|
|
#print "url: $url\n";
|
|
}
|
|
|
|
my $curl_cmd = "curl --interface $eth_dev.$vid --url $url -o $eth_dev.$vid.index.html > /dev/null 2>&1";
|
|
#print "Child process running: $curl_cmd\n";
|
|
system("$curl_cmd");
|
|
sleep(5);
|
|
}
|
|
} else {
|
|
# fork returned 0 nor undef
|
|
# so this branch is parent
|
|
@pids = (@pids, $kidpid);
|
|
# waitpid($kidpid, 0);
|
|
}
|
|
}
|
|
|
|
my $slp = (rand() * 1000000) % $sleep_time;
|
|
if ($slp < 3) {
|
|
$slp = 3;
|
|
}
|
|
print " Done creating vlans and starting curl processes, sleeping $slp seconds.\n";
|
|
# Sleep a while to wait for curl to do it's thing
|
|
sleep($slp);
|
|
|
|
print " Removing all VLANs.\n";
|
|
for ($i = 0; $i<$vlans; $i++) {
|
|
$vid = $vid_base + $i;
|
|
#print "Removing vlan: $eth_dev.$vid\n";
|
|
`vconfig rem $eth_dev.$vid`;
|
|
}#for
|
|
|
|
print " Killing all curl instances.\n";
|
|
for ($i = 0; $i<@pids; $i++) {
|
|
`kill -9 $pids[$i]`;
|
|
}
|
|
|
|
print " Done with loop: $loop\n";
|
|
$loop++;
|
|
}# while
|
|
|
|
|
|
|
|
sub printAndExec {
|
|
my $cmd = $_[0];
|
|
|
|
#print "$cmd\n";
|
|
# NOTE: If you use the single back-ticks here, it will hang, probably some
|
|
# signal problem...never figured out why really (ERESTARTSYS) was the error
|
|
# that perl hung on... --Ben
|
|
system("$cmd");
|
|
}
|
|
|