aboutsummaryrefslogtreecommitdiff
path: root/contrib/ipfilter/mkfilters
diff options
context:
space:
mode:
authorGuido van Rooij <guido@FreeBSD.org>1999-11-08 20:51:23 +0000
committerGuido van Rooij <guido@FreeBSD.org>1999-11-08 20:51:23 +0000
commitc9bff7ba93205e0745fa8a309db3789ba1562f24 (patch)
treedbbb879c93cb0348e4c4fd6a3ef24f80198ce5a1 /contrib/ipfilter/mkfilters
parent9b632708fe7d7ae0badd09f08d11857ca24400f7 (diff)
downloadsrc-c9bff7ba93205e0745fa8a309db3789ba1562f24.tar.gz
src-c9bff7ba93205e0745fa8a309db3789ba1562f24.zip
Import of ipfilter 3.3.3 in anticipation of its revival.
More to come in the next days.
Notes
Notes: svn path=/vendor/ipfilter/dist/; revision=53024
Diffstat (limited to 'contrib/ipfilter/mkfilters')
-rw-r--r--contrib/ipfilter/mkfilters91
1 files changed, 67 insertions, 24 deletions
diff --git a/contrib/ipfilter/mkfilters b/contrib/ipfilter/mkfilters
index 53c9a7fef7e9..f0e6ff465940 100644
--- a/contrib/ipfilter/mkfilters
+++ b/contrib/ipfilter/mkfilters
@@ -1,30 +1,15 @@
#!/usr/local/bin/perl
# for best results, bring up all your interfaces before running this
-open(I, "ifconfig -a|") || die $!;
-while (<I>) {
- chop;
- if (/^[a-zA-Z]+\d+:/) {
- ($iface = $_) =~ s/^([a-zA-Z]+\d+).*/$1/;
- $ifaces{$iface} = $iface;
- next;
- }
- if (/inet/) {
- if (/\-\-\>/) { # PPP, (SLIP?)
- ($inet{$iface} = $_) =~ s/.*inet ([^ ]+) \-\-\> ([^ ]+).*/$1/;
- ($ppp{$iface} = $_) =~ s/.*inet ([^ ]+) \-\-\> ([^ ]+).*/$2/;
- } else {
- ($inet{$iface} = $_) =~ s/.*inet ([^ ]+).*/$1/;
- }
- }
- if (/netmask/) {
- ($mask = $_) =~ s/.*netmask ([^ ]+).*/$1/;
- $mask =~ s/^/0x/ if ($mask =~ /^[0-9a-f]*$/);
- $netmask{$iface} = $mask;
- }
- if (/broadcast/) {
- ($bcast{$iface} = $_) =~ s/.*broadcast ([^ ]+).*/$1/;
- }
+
+if ($^O =~ m/^irix/i)
+{
+ &irix_mkfilters || regular_mkfilters || die $!;
}
+else
+{
+ &regular_mkfilters || irix_mkfilters || die $!;
+}
+
foreach $i (keys %ifaces) {
$net{$i} = $inet{$i}."/".$netmask{$i} if (defined($inet{$i}));
}
@@ -71,3 +56,61 @@ foreach $i (keys %ifaces) {
}
}
}
+
+sub irix_mkfilters
+{
+ open(NETSTAT, "/usr/etc/netstat -i|") || return 0;
+
+ while (defined($line = <NETSTAT>))
+ {
+ if ($line =~ m/^Name/)
+ {
+ next;
+ }
+ elsif ($line =~ m/^(\S+)/)
+ {
+ open(I, "/usr/etc/ifconfig $1|") || return 0;
+ &scan_ifconfig;
+ close I; # being neat... - Allen
+ }
+ }
+ close NETSTAT; # again, being neat... - Allen
+ return 1;
+}
+
+sub regular_mkfilters
+{
+ open(I, "ifconfig -a|") || return 0;
+ &scan_ifconfig;
+ close I; # being neat... - Allen
+ return 1;
+}
+
+sub scan_ifconfig
+{
+ while (<I>) {
+ chop;
+ if (/^[a-zA-Z]+\d+:/) {
+ ($iface = $_) =~ s/^([a-zA-Z]+\d+).*/$1/;
+ $ifaces{$iface} = $iface;
+ next;
+ }
+ if (/inet/) {
+ if (/\-\-\>/) { # PPP, (SLIP?)
+ ($inet{$iface} = $_) =~ s/.*inet ([^ ]+) \-\-\> ([^ ]+).*/$1/;
+ ($ppp{$iface} = $_) =~ s/.*inet ([^ ]+) \-\-\> ([^ ]+).*/$2/;
+ } else {
+ ($inet{$iface} = $_) =~ s/.*inet ([^ ]+).*/$1/;
+ }
+ }
+ if (/netmask/) {
+ ($mask = $_) =~ s/.*netmask ([^ ]+).*/$1/;
+ $mask =~ s/^/0x/ if ($mask =~ /^[0-9a-f]*$/);
+ $netmask{$iface} = $mask;
+ }
+ if (/broadcast/) {
+ ($bcast{$iface} = $_) =~ s/.*broadcast ([^ ]+).*/$1/;
+ }
+ }
+}
+