]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blobdiff - config/cfgroot/network-functions.pl
geoip: ship database 20191217
[people/pmueller/ipfire-2.x.git] / config / cfgroot / network-functions.pl
index 66f1ed554ab12041c31cc0b3163f9e1c8a75710f..8649d05023adebc4256d1600c94d8f74482ec8a3 100644 (file)
@@ -108,10 +108,14 @@ sub network_equal {
        my $network1 = shift;
        my $network2 = shift;
 
-       my $bin1 = &network2bin($network1);
-       my $bin2 = &network2bin($network2);
+       my @bin1 = &network2bin($network1);
+       my @bin2 = &network2bin($network2);
 
-       if ($bin1 eq $bin2) {
+       if (!defined $bin1 || !defined $bin2) {
+               return undef;
+       }
+
+       if ($bin1[0] eq $bin2[0] && $bin1[1] eq $bin2[1]) {
                return 1;
        }
 
@@ -133,6 +137,10 @@ sub network2bin($) {
        my $address_bin = &ip2bin($address);
        my $netmask_bin = &ip2bin($netmask);
 
+       if (!defined $address_bin || !defined $netmask_bin) {
+               return undef;
+       }
+
        my $network_start = $address_bin & $netmask_bin;
 
        return ($network_start, $netmask_bin);
@@ -374,6 +382,68 @@ sub wifi_get_signal_level($) {
 
        return $signal_level;
 }
+
+sub get_hardware_address($) {
+       my $ip_address = shift;
+       my $ret;
+
+       open(FILE, "/proc/net/arp") or die("Could not read ARP table");
+
+       while (<FILE>) {
+               my ($ip_addr, $hwtype, $flags, $hwaddr, $mask, $device) = split(/\s+/, $_);
+               if ($ip_addr eq $ip_address) {
+                       $ret = $hwaddr;
+                       last;
+               }
+       }
+
+       close(FILE);
+
+       return $ret;
+}
+
+sub get_nic_property {
+       my $nicname = shift;
+       my $property = shift;
+       my $result;
+
+       open(FILE, "/sys/class/net/$nicname/$property") or die("Could not read property");
+       $result = <FILE>;
+       close(FILE);
+
+       chomp($result);
+
+       return $result;
+}
+
+sub valid_mac($) {
+       my $mac = shift;
+
+       return $mac =~ /^([0-9A-Fa-f]{2}[:]){5}([0-9A-Fa-f]{2})$/;
+}
+
+sub random_mac {
+       my $address = "02";
+
+       for my $i (0 .. 4) {
+               $address = sprintf("$address:%02x", int(rand(255)));
+       }
+
+       return $address;
+}
+
+sub get_mac_by_name($) {
+       my $mac = shift;
+
+       if ((!&valid_mac($mac)) && ($mac ne "")) {
+               if (-e "/sys/class/net/$mac/") {
+                       $mac = get_nic_property($mac, "address");
+               }
+       }
+
+       return $mac;
+}
+
 1;
 
 # Remove the next line to enable the testsuite
@@ -437,7 +507,7 @@ sub testsuite() {
        assert(!$result);
 
        $result = &network_equal("192.168.0.1/24", "192.168.0.XXX/24");
-       assert($result);
+       assert(!$result);
 
        $result = &ip_address_in_network("10.0.1.4", "10.0.0.0/8");
        assert($result);