mirror of
https://github.com/Telecominfraproject/wlan-lanforge-scripts.git
synced 2025-10-29 18:02:35 +00:00
More scripts from tools dir.
This commit is contained in:
123
test_refcnt.pl
Executable file
123
test_refcnt.pl
Executable file
@@ -0,0 +1,123 @@
|
||||
#!/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");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user