Blame contrib/iptables_acc_snmp/iptables_acc_snmp

Packit 667938
#!/usr/bin/perl
Packit 667938
Packit 667938
my ($req,$place,$returnOID,$mode, $IPTABLES,@counters);
Packit 667938
Packit 667938
$IPTABLES = "iptables"; # cmdline to iptables
Packit 667938
$place=".1.3.6.1.4.1.2055";
Packit 667938
Packit 667938
@counters = loadChains();
Packit 667938
Packit 667938
main();
Packit 667938
Packit 667938
Packit 667938
sub main {
Packit 667938
	my ($mode,$req);
Packit 667938
	if (scalar(@ARGV) == 2) {
Packit 667938
		($mode,$req) = @ARGV;
Packit 667938
	} else {
Packit 667938
		($req) = @ARGV;
Packit 667938
	}
Packit 667938
	
Packit 667938
	SWITCH: for ($mode) {
Packit 667938
		/-s/ && exit;
Packit 667938
		/-n/ && do {
Packit 667938
			SWITCH: for ($req) {
Packit 667938
				/$place$/ && do {
Packit 667938
					$returnOID = "$place.1";				
Packit 667938
					last SWITCH;
Packit 667938
				};
Packit 667938
				/$place\.1$/ && do {
Packit 667938
					$returnOID = "$place.2.1.1.1";
Packit 667938
					last SWITCH;
Packit 667938
				};
Packit 667938
				/$place\.2$/ && do {
Packit 667938
					$returnOID = "$place.2.1.1.1";
Packit 667938
					last SWITCH;
Packit 667938
				};
Packit 667938
				/$place\.2\.1$/ && do {
Packit 667938
					$returnOID = "$place.2.1.1.1";
Packit 667938
					last SWITCH;
Packit 667938
				};
Packit 667938
				/$place\.2\.1\.1$/ && do {
Packit 667938
					$returnOID = "$place.2.1.1.1";
Packit 667938
					last SWITCH;
Packit 667938
				};
Packit 667938
				/$place\.2\.1\.1\.(.*)$/ && do {
Packit 667938
					if ($1 < scalar(@counters)-1) {
Packit 667938
						$returnOID = "$place.2.1.1." . ($1 + 1);
Packit 667938
					} else {
Packit 667938
						$returnOID = "$place.2.1.2.1";
Packit 667938
					}
Packit 667938
					last SWITCH;
Packit 667938
				};
Packit 667938
				/$place\.2\.1\.2\.(.*)$/ && do {
Packit 667938
					if ($1 < scalar(@counters)-1) {
Packit 667938
						$returnOID = "$place.2.1.2." . ($1 + 1);
Packit 667938
					} else {
Packit 667938
						exit;
Packit 667938
					}
Packit 667938
					last SWITCH;
Packit 667938
				};
Packit 667938
				exit;
Packit 667938
			}
Packit 667938
			last SWITCH;
Packit 667938
		};	
Packit 667938
		SWITCH: for ($req) {
Packit 667938
			/$place$/ && exit;
Packit 667938
			/$place\.2\.1$/ && exit;
Packit 667938
			/$place\.2\.1\.1$/ && exit;
Packit 667938
			/$place\.2\.1\.2$/ && exit;
Packit 667938
			$returnOID = $req;
Packit 667938
		}
Packit 667938
	}
Packit 667938
	print "$returnOID\n";
Packit 667938
	$_ = $returnOID;  		
Packit 667938
	SWITCH: {
Packit 667938
		/^$place\.1$/ && do {
Packit 667938
			print "string\n", getHostname() ;
Packit 667938
			last SWITCH;
Packit 667938
		};
Packit 667938
		/^$place\.2\.1\.(1|2)\.(.*)$/ && do {
Packit 667938
			($a, $b) = split ("=", @counters[$2]);
Packit 667938
			if ($1 == 1) {
Packit 667938
				print "string\n$a\n";
Packit 667938
			} else {
Packit 667938
				print "counter\n$b\n";			
Packit 667938
			}
Packit 667938
			last SWITCH;
Packit 667938
		};
Packit 667938
		/^$place\.2\.1\.1\.3\.1\.1\.(1|2|3)$/ && do {
Packit 667938
			print "integer\n$1\n";
Packit 667938
			last SWITCH;
Packit 667938
		};
Packit 667938
		/^$place\.2\.1\.1\.2\.(1|2|3)$/ && do {
Packit 667938
					SWITCH: for ($1) {
Packit 667938
						/1/ && do {
Packit 667938
							print "string\nfilter\n";
Packit 667938
							last SWITCH
Packit 667938
						};
Packit 667938
						/2/ && do {
Packit 667938
							print "string\nnat\n";
Packit 667938
							last SWITCH
Packit 667938
						};
Packit 667938
						/3/ && do {
Packit 667938
							print "string\nmangle\n";
Packit 667938
							last SWITCH
Packit 667938
						};
Packit 667938
					}
Packit 667938
					last SWITCH;
Packit 667938
		};
Packit 667938
		
Packit 667938
		 print "string\nack... $returnOID $req\n";
Packit 667938
	}
Packit 667938
}
Packit 667938
Packit 667938
sub getHostname {
Packit 667938
	return `/bin/hostname --fqdn`;
Packit 667938
}
Packit 667938
Packit 667938
sub getChainCount {
Packit 667938
	my ($table);
Packit 667938
	$table = shift();
Packit 667938
	return scalar(getChainNames($table));
Packit 667938
}
Packit 667938
sub getChainNames {
Packit 667938
	my (@bufLines,$table,@chains);
Packit 667938
	$table = shift();
Packit 667938
	@bufLines = `$IPTABLES -t $table -nL`;
Packit 667938
	foreach (@bufLines) {
Packit 667938
			if (/^Chain (.*) \((.*)$/) {
Packit 667938
			push (@chains, $1);
Packit 667938
		}
Packit 667938
	}
Packit 667938
	return @chains;
Packit 667938
}
Packit 667938
Packit 667938
sub getChainCounter {
Packit 667938
	my (@rules, @count, $value);
Packit 667938
	$table = shift();
Packit 667938
	$chain = shift();
Packit 667938
	@rules=`$IPTABLES -t $table -vnxL $chain`;
Packit 667938
	splice @rules, 0, 2;
Packit 667938
	$total=0;
Packit 667938
	foreach $value (@rules) {
Packit 667938
		@count=split(' ',$value);
Packit 667938
		$total += $count[1];
Packit 667938
	}
Packit 667938
	return $total;
Packit 667938
}
Packit 667938
Packit 667938
sub getChains {
Packit 667938
	my ($table, @result, @names, $counter, $name,@buf);
Packit 667938
	$table = shift();
Packit 667938
	@chains = getChainNames($table);
Packit 667938
	foreach $name (@chains) {
Packit 667938
		$counter = getChainCounter ($table, $name);
Packit 667938
		push (@result, "$table/$name=$counter");
Packit 667938
	}
Packit 667938
	return @result;
Packit 667938
}
Packit 667938
sub loadChains {
Packit 667938
	my (@result, @buf, $table);
Packit 667938
	foreach $table ("filter","nat","mangle") {
Packit 667938
		@buf = getChains ($table);
Packit 667938
		push (@result, @buf);
Packit 667938
	}
Packit 667938
	return @result;
Packit 667938
}