]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blobdiff - config/cfgroot/network-functions.pl
captive: Get MAC address of a device without calling arp
[people/pmueller/ipfire-2.x.git] / config / cfgroot / network-functions.pl
index db9d7dbfc30bb20c65d2b0588bee1b633b53604e..93b8190305abb93a7d29e0c8a117e22d7e46b6e9 100644 (file)
@@ -315,6 +315,85 @@ sub setup_upstream_proxy() {
        }
 }
 
+my %wireless_status = ();
+
+sub _get_wireless_status($) {
+       my $intf = shift;
+
+       if (!$wireless_status{$intf}) {
+               $wireless_status{$intf} = `iwconfig $intf`;
+       }
+
+       return $wireless_status{$intf};
+}
+
+sub wifi_get_essid($) {
+       my $status = &_get_wireless_status(shift);
+
+       my ($essid) = $status =~ /ESSID:\"(.*)\"/;
+
+       return $essid;
+}
+
+sub wifi_get_frequency($) {
+       my $status = &_get_wireless_status(shift);
+
+       my ($frequency) = $status =~ /Frequency:(\d+\.\d+ GHz)/;
+
+       return $frequency;
+}
+
+sub wifi_get_access_point($) {
+       my $status = &_get_wireless_status(shift);
+
+       my ($access_point) = $status =~ /Access Point: ([0-9A-F:]+)/;
+
+       return $access_point;
+}
+
+sub wifi_get_bit_rate($) {
+       my $status = &_get_wireless_status(shift);
+
+       my ($bit_rate) = $status =~ /Bit Rate=(\d+ [GM]b\/s)/;
+
+       return $bit_rate;
+}
+
+sub wifi_get_link_quality($) {
+       my $status = &_get_wireless_status(shift);
+
+       my ($cur, $max) = $status =~ /Link Quality=(\d+)\/(\d+)/;
+
+       return $cur * 100 / $max;
+}
+
+sub wifi_get_signal_level($) {
+       my $status = &_get_wireless_status(shift);
+
+       my ($signal_level) = $status =~ /Signal level=(\-\d+ dBm)/;
+
+       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;
+}
+
 1;
 
 # Remove the next line to enable the testsuite
@@ -368,12 +447,26 @@ sub testsuite() {
        $result = &find_next_ip_address("1.2.3.4", 2);
        assert($result eq "1.2.3.6");
 
+       $result = &network_equal("192.168.0.0/24", "192.168.0.0/255.255.255.0");
+       assert($result);
+
+       $result = &network_equal("192.168.0.0/24", "192.168.0.0/25");
+       assert(!$result);
+
+       $result = &network_equal("192.168.0.0/24", "192.168.0.128/25");
+       assert(!$result);
+
+       $result = &network_equal("192.168.0.1/24", "192.168.0.XXX/24");
+       assert($result);
+
        $result = &ip_address_in_network("10.0.1.4", "10.0.0.0/8");
        assert($result);
 
        $result = &ip_address_in_network("192.168.30.11", "192.168.30.0/255.255.255.0");
        assert($result);
 
+       print "Testsuite completed successfully!\n";
+
        return 0;
 }