diff options
author | Scott Dale <sdale@pfsense.org> | 2007-04-24 23:18:48 +0000 |
---|---|---|
committer | Scott Dale <sdale@pfsense.org> | 2007-04-24 23:18:48 +0000 |
commit | 6189988d3c448b9df4abfb66e589374c4eab7c59 (patch) | |
tree | b0f777097fe23c60b7b85316554f6468597d70b8 | |
parent | 0975fe8a7ea0ed09f26b510979626db0c1137ff3 (diff) | |
download | pfsense-6189988d3c448b9df4abfb66e589374c4eab7c59.zip pfsense-6189988d3c448b9df4abfb66e589374c4eab7c59.tar.gz |
Move interface info function for global use
-rw-r--r-- | etc/inc/pfsense-utils.inc | 195 | ||||
-rwxr-xr-x | usr/local/www/status_interfaces.php | 191 |
2 files changed, 195 insertions, 191 deletions
diff --git a/etc/inc/pfsense-utils.inc b/etc/inc/pfsense-utils.inc index 51a87e8..0c4f17f 100644 --- a/etc/inc/pfsense-utils.inc +++ b/etc/inc/pfsense-utils.inc @@ -3442,5 +3442,200 @@ function isAjax() { return isset ($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest'; } +//returns interface information +function get_interface_info($ifdescr) { + global $config, $linkinfo, $netstatrninfo; + + $ifinfo = array(); + + /* find out interface name */ + $ifinfo['hwif'] = $config['interfaces'][$ifdescr]['if']; + if ($ifdescr == "wan") + $ifinfo['if'] = get_real_wan_interface(); + else + $ifinfo['if'] = $ifinfo['hwif']; + + /* run netstat to determine link info */ + + unset($linkinfo); + exec("/usr/bin/netstat -I " . $ifinfo['hwif'] . " -nWb -f link", $linkinfo); + $linkinfo = preg_split("/\s+/", $linkinfo[1]); + if (preg_match("/\*$/", $linkinfo[0])) { + $ifinfo['status'] = "down"; + } else { + $ifinfo['status'] = "up"; + } + + if (!strstr($ifinfo['if'],'tun')) { + $ifinfo['macaddr'] = $linkinfo[3]; + $ifinfo['inpkts'] = $linkinfo[4]; + $ifinfo['inerrs'] = $linkinfo[5]; + $ifinfo['inbytes'] = $linkinfo[6]; + $ifinfo['outpkts'] = $linkinfo[7]; + $ifinfo['outerrs'] = $linkinfo[8]; + $ifinfo['outbytes'] = $linkinfo[9]; + $ifinfo['collisions'] = $linkinfo[10]; + } else { + $ifinfo['inpkts'] = $linkinfo[3]; + $ifinfo['inbytes'] = $linkinfo[5]; + $ifinfo['outpkts'] = $linkinfo[6]; + $ifinfo['outbytes'] = $linkinfo[8]; + } + + /* DHCP? -> see if dhclient is up */ + if (($ifdescr == "wan") && ($config['interfaces']['wan']['ipaddr'] == "dhcp")) { + /* see if dhclient is up */ + if (is_dhcp_running("wan") == true) + $ifinfo['dhcplink'] = "up"; + else + $ifinfo['dhcplink'] = "down"; + } + /* loop through optional interfaces looking to see if they are dhcp */ + for ($j = 1; isset($config['interfaces']['opt' . $j]); $j++) { + $ifdescrs['opt' . $j] = $config['interfaces']['opt' . $j]['descr']; + if (($ifdescr == "opt{$j}") && ($config['interfaces']['opt' . $j]['ipaddr'] == "dhcp")) { + /* see if dhclient is up */ + if (is_dhcp_running("opt{$j}") == true) + $ifinfo['dhcplink'] = "up"; + else + $ifinfo['dhcplink'] = "down"; + } + } + + /* PPPoE interface? -> get status from virtual interface */ + if (($ifdescr == "wan") && ($config['interfaces']['wan']['ipaddr'] == "pppoe")) { + unset($linkinfo); + exec("/usr/bin/netstat -I " . $ifinfo['if'] . " -nWb -f link", $linkinfo); + $linkinfo = preg_split("/\s+/", $linkinfo[1]); + if (preg_match("/\*$/", $linkinfo[0])) { + $ifinfo['pppoelink'] = "down"; + } else { + /* get PPPoE link status for dial on demand */ + $ifconfiginfo = ""; + unset($ifconfiginfo); + exec("/sbin/ifconfig " . $ifinfo['if'], $ifconfiginfo); + + $ifinfo['pppoelink'] = "up"; + + foreach ($ifconfiginfo as $ici) { + if (strpos($ici, 'LINK0') !== false) + $ifinfo['pppoelink'] = "down"; + } + } + } + + /* PPTP interface? -> get status from virtual interface */ + if (($ifdescr == "wan") && ($config['interfaces']['wan']['ipaddr'] == "pptp")) { + unset($linkinfo); + exec("/usr/bin/netstat -I " . $ifinfo['if'] . " -nWb -f link", $linkinfo); + $linkinfo = preg_split("/\s+/", $linkinfo[1]); + if (preg_match("/\*$/", $linkinfo[0])) { + $ifinfo['pptplink'] = "down"; + } else { + /* get PPTP link status for dial on demand */ + unset($ifconfiginfo); + exec("/sbin/ifconfig " . $ifinfo['if'], $ifconfiginfo); + + $ifinfo['pptplink'] = "up"; + + foreach ($ifconfiginfo as $ici) { + if (strpos($ici, 'LINK0') !== false) + $ifinfo['pptplink'] = "down"; + } + } + } + + if ($ifinfo['status'] == "up") { + /* try to determine media with ifconfig */ + unset($ifconfiginfo); + exec("/sbin/ifconfig " . $ifinfo['hwif'], $ifconfiginfo); + $matches = ""; + foreach ($ifconfiginfo as $ici) { + + /* don't list media/speed for wireless cards, as it always + displays 2 Mbps even though clients can connect at 11 Mbps */ + if (preg_match("/media: .*? \((.*?)\)/", $ici, $matches)) { + $ifinfo['media'] = $matches[1]; + } else if (preg_match("/media: Ethernet (.*)/", $ici, $matches)) { + $ifinfo['media'] = $matches[1]; + } else if (preg_match("/media: IEEE 802.11 Wireless Ethernet (.*)/", $ici, $matches)) { + $ifinfo['media'] = $matches[1]; + } + + if (preg_match("/status: (.*)$/", $ici, $matches)) { + if ($matches[1] != "active") + $ifinfo['status'] = $matches[1]; + } + if (preg_match("/channel (\S*)/", $ici, $matches)) { + $ifinfo['channel'] = $matches[1]; + } + if (preg_match("/ssid (\".*?\"|\S*)/", $ici, $matches)) { + if ($matches[1][0] == '"') + $ifinfo['ssid'] = substr($matches[1], 1, -1); + else + $ifinfo['ssid'] = $matches[1]; + } + } + + if ($ifinfo['pppoelink'] != "down" && $ifinfo['pptplink'] != "down") { + /* try to determine IP address and netmask with ifconfig */ + unset($ifconfiginfo); + exec("/sbin/ifconfig " . $ifinfo['if'], $ifconfiginfo); + + foreach ($ifconfiginfo as $ici) { + if (preg_match("/inet (\S+)/", $ici, $matches)) { + $ifinfo['ipaddr'] = $matches[1]; + } + if (preg_match("/netmask (\S+)/", $ici, $matches)) { + if (preg_match("/^0x/", $matches[1])) + $ifinfo['subnet'] = long2ip(hexdec($matches[1])); + } + } + + if ($ifdescr == "wan") { + /* run netstat to determine the default gateway */ + unset($netstatrninfo); + exec("/usr/bin/netstat -rnf inet", $netstatrninfo); + + foreach ($netstatrninfo as $nsr) { + if (preg_match("/^default\s*(\S+)/", $nsr, $matches)) { + $ifinfo['gateway'] = $matches[1]; + } + } + } else { + /* deterimine interface gateway */ + $int = convert_friendly_interface_to_real_interface_name($ifdescr); + $gw = get_interface_gateway($int); + if($gw) + $ifinfo['gateway'] = $gw; + } + } + } + + $bridge = ""; + $int = ""; + $int = convert_friendly_interface_to_real_interface_name($ifdescr); + $bridge = link_int_to_bridge_interface($int); + if($bridge) { + $bridge_text = `/sbin/ifconfig {$bridge}`; + if(stristr($bridge_text, "blocking") <> false) { + $ifinfo['bridge'] = "<b><font color='red'>blocking</font></b> - check for ethernet loops"; + $ifinfo['bridgeint'] = $bridge; + } else if(stristr($bridge_text, "learning") <> false) { + $ifinfo['bridge'] = "learning"; + $ifinfo['bridgeint'] = $bridge; + } else if(stristr($bridge_text, "forwarding") <> false) { + $ifinfo['bridge'] = "forwarding"; + $ifinfo['bridgeint'] = $bridge; + } + } + + return $ifinfo; +} + +//returns cpu speed of processor. Good for determining capabilities of machine +function get_cpu_speed() { + return exec("sysctl hw.clockrate | awk '{ print $2 }'"); +} ?> diff --git a/usr/local/www/status_interfaces.php b/usr/local/www/status_interfaces.php index ec2e148..f6d842e 100755 --- a/usr/local/www/status_interfaces.php +++ b/usr/local/www/status_interfaces.php @@ -59,197 +59,6 @@ if ($_POST) { } } -function get_interface_info($ifdescr) { - - global $config, $linkinfo, $netstatrninfo; - - $ifinfo = array(); - - /* find out interface name */ - $ifinfo['hwif'] = $config['interfaces'][$ifdescr]['if']; - if ($ifdescr == "wan") - $ifinfo['if'] = get_real_wan_interface(); - else - $ifinfo['if'] = $ifinfo['hwif']; - - /* run netstat to determine link info */ - - unset($linkinfo); - exec("/usr/bin/netstat -I " . $ifinfo['hwif'] . " -nWb -f link", $linkinfo); - $linkinfo = preg_split("/\s+/", $linkinfo[1]); - if (preg_match("/\*$/", $linkinfo[0])) { - $ifinfo['status'] = "down"; - } else { - $ifinfo['status'] = "up"; - } - - if (!strstr($ifinfo['if'],'tun')) { - $ifinfo['macaddr'] = $linkinfo[3]; - $ifinfo['inpkts'] = $linkinfo[4]; - $ifinfo['inerrs'] = $linkinfo[5]; - $ifinfo['inbytes'] = $linkinfo[6]; - $ifinfo['outpkts'] = $linkinfo[7]; - $ifinfo['outerrs'] = $linkinfo[8]; - $ifinfo['outbytes'] = $linkinfo[9]; - $ifinfo['collisions'] = $linkinfo[10]; - } else { - $ifinfo['inpkts'] = $linkinfo[3]; - $ifinfo['inbytes'] = $linkinfo[5]; - $ifinfo['outpkts'] = $linkinfo[6]; - $ifinfo['outbytes'] = $linkinfo[8]; - } - - /* DHCP? -> see if dhclient is up */ - if (($ifdescr == "wan") && ($config['interfaces']['wan']['ipaddr'] == "dhcp")) { - /* see if dhclient is up */ - if (is_dhcp_running("wan") == true) - $ifinfo['dhcplink'] = "up"; - else - $ifinfo['dhcplink'] = "down"; - } - /* loop through optional interfaces looking to see if they are dhcp */ - for ($j = 1; isset($config['interfaces']['opt' . $j]); $j++) { - $ifdescrs['opt' . $j] = $config['interfaces']['opt' . $j]['descr']; - if (($ifdescr == "opt{$j}") && ($config['interfaces']['opt' . $j]['ipaddr'] == "dhcp")) { - /* see if dhclient is up */ - if (is_dhcp_running("opt{$j}") == true) - $ifinfo['dhcplink'] = "up"; - else - $ifinfo['dhcplink'] = "down"; - } - } - - /* PPPoE interface? -> get status from virtual interface */ - if (($ifdescr == "wan") && ($config['interfaces']['wan']['ipaddr'] == "pppoe")) { - unset($linkinfo); - exec("/usr/bin/netstat -I " . $ifinfo['if'] . " -nWb -f link", $linkinfo); - $linkinfo = preg_split("/\s+/", $linkinfo[1]); - if (preg_match("/\*$/", $linkinfo[0])) { - $ifinfo['pppoelink'] = "down"; - } else { - /* get PPPoE link status for dial on demand */ - $ifconfiginfo = ""; - unset($ifconfiginfo); - exec("/sbin/ifconfig " . $ifinfo['if'], $ifconfiginfo); - - $ifinfo['pppoelink'] = "up"; - - foreach ($ifconfiginfo as $ici) { - if (strpos($ici, 'LINK0') !== false) - $ifinfo['pppoelink'] = "down"; - } - } - } - - /* PPTP interface? -> get status from virtual interface */ - if (($ifdescr == "wan") && ($config['interfaces']['wan']['ipaddr'] == "pptp")) { - unset($linkinfo); - exec("/usr/bin/netstat -I " . $ifinfo['if'] . " -nWb -f link", $linkinfo); - $linkinfo = preg_split("/\s+/", $linkinfo[1]); - if (preg_match("/\*$/", $linkinfo[0])) { - $ifinfo['pptplink'] = "down"; - } else { - /* get PPTP link status for dial on demand */ - unset($ifconfiginfo); - exec("/sbin/ifconfig " . $ifinfo['if'], $ifconfiginfo); - - $ifinfo['pptplink'] = "up"; - - foreach ($ifconfiginfo as $ici) { - if (strpos($ici, 'LINK0') !== false) - $ifinfo['pptplink'] = "down"; - } - } - } - - if ($ifinfo['status'] == "up") { - /* try to determine media with ifconfig */ - unset($ifconfiginfo); - exec("/sbin/ifconfig " . $ifinfo['hwif'], $ifconfiginfo); - $matches = ""; - foreach ($ifconfiginfo as $ici) { - - /* don't list media/speed for wireless cards, as it always - displays 2 Mbps even though clients can connect at 11 Mbps */ - if (preg_match("/media: .*? \((.*?)\)/", $ici, $matches)) { - $ifinfo['media'] = $matches[1]; - } else if (preg_match("/media: Ethernet (.*)/", $ici, $matches)) { - $ifinfo['media'] = $matches[1]; - } else if (preg_match("/media: IEEE 802.11 Wireless Ethernet (.*)/", $ici, $matches)) { - $ifinfo['media'] = $matches[1]; - } - - if (preg_match("/status: (.*)$/", $ici, $matches)) { - if ($matches[1] != "active") - $ifinfo['status'] = $matches[1]; - } - if (preg_match("/channel (\S*)/", $ici, $matches)) { - $ifinfo['channel'] = $matches[1]; - } - if (preg_match("/ssid (\".*?\"|\S*)/", $ici, $matches)) { - if ($matches[1][0] == '"') - $ifinfo['ssid'] = substr($matches[1], 1, -1); - else - $ifinfo['ssid'] = $matches[1]; - } - } - - if ($ifinfo['pppoelink'] != "down" && $ifinfo['pptplink'] != "down") { - /* try to determine IP address and netmask with ifconfig */ - unset($ifconfiginfo); - exec("/sbin/ifconfig " . $ifinfo['if'], $ifconfiginfo); - - foreach ($ifconfiginfo as $ici) { - if (preg_match("/inet (\S+)/", $ici, $matches)) { - $ifinfo['ipaddr'] = $matches[1]; - } - if (preg_match("/netmask (\S+)/", $ici, $matches)) { - if (preg_match("/^0x/", $matches[1])) - $ifinfo['subnet'] = long2ip(hexdec($matches[1])); - } - } - - if ($ifdescr == "wan") { - /* run netstat to determine the default gateway */ - unset($netstatrninfo); - exec("/usr/bin/netstat -rnf inet", $netstatrninfo); - - foreach ($netstatrninfo as $nsr) { - if (preg_match("/^default\s*(\S+)/", $nsr, $matches)) { - $ifinfo['gateway'] = $matches[1]; - } - } - } else { - /* deterimine interface gateway */ - $int = convert_friendly_interface_to_real_interface_name($ifdescr); - $gw = get_interface_gateway($int); - if($gw) - $ifinfo['gateway'] = $gw; - } - } - } - - $bridge = ""; - $int = ""; - $int = convert_friendly_interface_to_real_interface_name($ifdescr); - $bridge = link_int_to_bridge_interface($int); - if($bridge) { - $bridge_text = `/sbin/ifconfig {$bridge}`; - if(stristr($bridge_text, "blocking") <> false) { - $ifinfo['bridge'] = "<b><font color='red'>blocking</font></b> - check for ethernet loops"; - $ifinfo['bridgeint'] = $bridge; - } else if(stristr($bridge_text, "learning") <> false) { - $ifinfo['bridge'] = "learning"; - $ifinfo['bridgeint'] = $bridge; - } else if(stristr($bridge_text, "forwarding") <> false) { - $ifinfo['bridge'] = "forwarding"; - $ifinfo['bridgeint'] = $bridge; - } - } - - return $ifinfo; -} - $pgtitle = "Status: Interfaces"; include("head.inc"); |