summaryrefslogtreecommitdiffstats
path: root/etc/inc/pfsense-utils.inc
diff options
context:
space:
mode:
authorScott Ullrich <sullrich@pfsense.org>2007-05-23 22:35:35 +0000
committerScott Ullrich <sullrich@pfsense.org>2007-05-23 22:35:35 +0000
commitab32f64827ed584ce81e474d18e199b1615a0e62 (patch)
tree8106f9b7fc59310afcec48f9c394909646a0af7f /etc/inc/pfsense-utils.inc
parent8e752040487bf904dc50c8f1a50feacc09503f3f (diff)
downloadpfsense-ab32f64827ed584ce81e474d18e199b1615a0e62.zip
pfsense-ab32f64827ed584ce81e474d18e199b1615a0e62.tar.gz
* Add functions required for dashboard * Killing trailing space
Diffstat (limited to 'etc/inc/pfsense-utils.inc')
-rw-r--r--etc/inc/pfsense-utils.inc199
1 files changed, 198 insertions, 1 deletions
diff --git a/etc/inc/pfsense-utils.inc b/etc/inc/pfsense-utils.inc
index db12e05..e33a0d8 100644
--- a/etc/inc/pfsense-utils.inc
+++ b/etc/inc/pfsense-utils.inc
@@ -3406,6 +3406,203 @@ function interface_has_gateway($friendly) {
}
}
+//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 }'");
+}
+
/* check if the wan interface is up
* Wait for a maximum of 10 seconds
* If the interface is up before then continue
@@ -3425,4 +3622,4 @@ function is_wan_interface_up($interface) {
return false;
}
-?>
+?> \ No newline at end of file
OpenPOWER on IntegriCloud