diff --git a/src/etc/inc/interfaces.inc b/src/etc/inc/interfaces.inc index 43c48f6a7..f025685b4 100644 --- a/src/etc/inc/interfaces.inc +++ b/src/etc/inc/interfaces.inc @@ -115,40 +115,6 @@ function does_interface_exist($interface, $flush = true) { return false; } -/* - * does_vip_exist($vip): return true or false if a vip is - * configured. - */ -function does_vip_exist($vip) { - global $config; - - if(!$vip) - return false; - - - switch ($vip['mode']) { - case "carp": - case "ipalias": - /* XXX: Make proper checks? */ - $realif = get_real_interface($vip['interface']); - if (!does_interface_exist($realif)) { - return false; - } - break; - case "proxyarp": - /* XXX: Implement this */ - default: - return false; - } - - $ifacedata = pfSense_getall_interface_addresses($realif); - foreach ($ifacedata as $vipips) { - if ($vipips == "{$vip['subnet']}/{$vip['subnet_bits']}") - return true; - } - - return false; -} function interface_netgraph_needed($interface = "wan") { global $config; @@ -157,10 +123,10 @@ function interface_netgraph_needed($interface = "wan") { if (!empty($config['pptpd']) && $config['pptpd']['mode'] == "server") $found = true; - if ($found == false && !empty($config['l2tp']) && + if (!$found && !empty($config['l2tp']) && $config['l2tp']['mode'] == "server") $found = true; - if ($found == false && is_array($config['pppoes']['pppoe'])) { + if (!$found && isset($config['pppoes']['pppoe']) && is_array($config['pppoes']['pppoe'])) { foreach ($config['pppoes']['pppoe'] as $pppoe) { if ($pppoe['mode'] != "server") continue; @@ -169,7 +135,7 @@ function interface_netgraph_needed($interface = "wan") { break; } } - if ($found == false) { + if (!$found) { if (!empty($config['interfaces'][$interface])) { switch ($config['interfaces'][$interface]['ipaddr']) { case "ppp": @@ -184,20 +150,10 @@ function interface_netgraph_needed($interface = "wan") { } } } - if ($found == false) { + if (!$found) { $realif = get_real_interface($interface); if (isset($config['ppps']['ppp'])) { foreach ($config['ppps']['ppp'] as $pppid => $ppp) { - -/* This if block doesn't do anything. It can be deleted. -PPP interfaces are found above in the previous if ($found == false) block. -This block of code is only entered for OPTx interfaces that are configured for PPPoE modem access, so $realif != $ppp['if'] - - if ($realif == $ppp['if']) { - $found = true; - break; - } -*/ $ports = explode(',',$ppp['ports']); foreach($ports as $pid => $port){ $port = get_real_interface($port); @@ -218,7 +174,7 @@ This block of code is only entered for OPTx interfaces that are configured for P } } - if ($found == false) { + if (!$found) { $realif = get_real_interface($interface); pfSense_ngctl_detach("{$realif}:", $realif); } @@ -377,7 +333,7 @@ function interface_qinq_configure(&$vlan, $fd = NULL) { interface_qinq2_configure($qinq, $fd, $macaddr); } } - if ($exec == true) { + if ($exec) { fclose($fd); mwexec('/usr/sbin/ngctl -f /tmp/netgraphcmd'); } @@ -396,7 +352,7 @@ function interfaces_qinq_configure() { global $config; if(file_exists("/var/run/booting")) echo gettext("Configuring QinQ interfaces..."); - if (is_array($config['qinqs']['qinqentry']) && count($config['qinqs']['qinqentry'])) { + if (isset($config['qinqs']['qinqentry']) && is_array($config['qinqs']['qinqentry'])) { foreach ($config['qinqs']['qinqentry'] as $qinq) { /* XXX: Maybe we should report any errors?! */ interface_qinq_configure($qinq); @@ -547,7 +503,7 @@ function interface_bridge_configure(&$bridge, $checkmember = 0) { else if (!empty($mtu) && $mtu < $smallermtu) $smallermtu = $mtu; } - if ($foundgif == false && $checkmember == 2) { + if (!$foundgif && $checkmember == 2) { return; } @@ -745,7 +701,7 @@ function interfaces_lagg_configure($realif = "") { if(file_exists("/var/run/booting")) echo gettext("Configuring LAGG interfaces..."); $i = 0; - if (is_array($config['laggs']['lagg']) && count($config['laggs']['lagg'])) { + if (isset($config['laggs']['lagg']) && is_array($config['laggs']['lagg'])) { foreach ($config['laggs']['lagg'] as $lagg) { if(empty($lagg['laggif'])) $lagg['laggif'] = "lagg{$i}"; @@ -851,7 +807,7 @@ function interface_lagg_configure(&$lagg) function interfaces_gre_configure($checkparent = 0, $realif = "") { global $config; - if (is_array($config['gres']['gre']) && count($config['gres']['gre'])) { + if (isset($config['gres']['gre']) && is_array($config['gres']['gre'])) { foreach ($config['gres']['gre'] as $i => $gre) { if (empty($gre['greif'])) $gre['greif'] = "gre{$i}"; @@ -1403,25 +1359,6 @@ function interface_bring_down($interface = "wan", $destroy = false, $ifacecfg = return; } -function interfaces_carp_set_maintenancemode($carp_maintenancemode){ - global $config; - if (isset($config["virtualip_carp_maintenancemode"]) && $carp_maintenancemode == false) { - unset($config["virtualip_carp_maintenancemode"]); - write_config("Leave CARP maintenance mode"); - } else - if (!isset($config["virtualip_carp_maintenancemode"]) && $carp_maintenancemode == true) { - $config["virtualip_carp_maintenancemode"] = true; - write_config("Enter CARP maintenance mode"); - } - - $viparr = &$config['virtualip']['vip']; - foreach ($viparr as $vip) { - if ($vip['mode'] == "carp") { - interface_carp_configure($vip); - } - } -} - function interfaces_ptpid_used($ptpid) { global $config; @@ -1447,7 +1384,7 @@ function getMPDCRONSettings($pppif) global $config; $cron_cmd_file = "/var/etc/pppoe_restart_{$pppif}"; - if (is_array($config['cron']['item'])) { + if (isset($config['cron']['item']) && is_array($config['cron']['item'])) { foreach ($config['cron']['item'] as $i => $item) { if (stripos($item['command'], $cron_cmd_file) !== false) return array("ID" => $i, "ITEM" => $item); @@ -1463,7 +1400,7 @@ function handle_pppoe_reset($post_array) { $pppif = "{$post_array['type']}{$post_array['ptpid']}"; $cron_cmd_file = "/var/etc/pppoe_restart_{$pppif}"; - if (!is_array($config['cron']['item'])) + if (!isset($config['cron']['item']) || !is_array($config['cron']['item'])) $config['cron']['item'] = array(); $itemhash = getMPDCRONSettings($pppif); @@ -1561,13 +1498,13 @@ function interface_ppps_configure($interface) symlink('/usr/local/sbin/mpd.script', '/var/etc/mpd.script'); } - if (is_array($config['ppps']['ppp']) && count($config['ppps']['ppp'])) { + if (isset($config['ppps']['ppp']) && is_array($config['ppps']['ppp'])) { foreach ($config['ppps']['ppp'] as $pppid => $ppp) { if ($ifcfg['if'] == $ppp['if']) break; } } - if (!$ppp || $ifcfg['if'] != $ppp['if']){ + if (!isset($ppp) || $ifcfg['if'] != $ppp['if']){ log_error(sprintf(gettext("Can't find PPP config for %s in interface_ppps_configure()."), $ifcfg['if'])); return 0; } @@ -2013,7 +1950,7 @@ function interfaces_carp_setup() unset($carp_sync_int); /* setup pfsync interface */ - if ($carp_sync_int && isset($pfsyncenabled)) { + if (!empty($carp_sync_int) && isset($pfsyncenabled)) { if (is_ipaddr($pfsyncpeerip)) $syncpeer = "syncpeer {$pfsyncpeerip}"; else @@ -2062,8 +1999,7 @@ function interface_proxyarp_configure($interface = '') } $paa = array(); - if (!empty($config['virtualip']) && is_array($config['virtualip']['vip'])) { - + if (isset($config['virtualip']['vip']) && is_array($config['virtualip']['vip'])) { /* group by interface */ foreach ($config['virtualip']['vip'] as $vipent) { if ($vipent['mode'] === "proxyarp") { @@ -2252,7 +2188,7 @@ function interface_wireless_clone($realif, $wlcfg) * If it has not been cloned then go ahead and clone it. */ $needs_clone = false; - if(is_array($wlcfg['wireless'])) + if(isset($wlcfg['wireless']) && is_array($wlcfg['wireless'])) $wlcfg_mode = $wlcfg['wireless']['mode']; else $wlcfg_mode = $wlcfg['mode']; @@ -2287,7 +2223,7 @@ function interface_wireless_clone($realif, $wlcfg) $needs_clone = true; } - if ($needs_clone == true) { + if ($needs_clone) { /* remove previous instance if it exists */ if (does_interface_exist($realif)) { legacy_interface_destroy($realif); @@ -2366,7 +2302,7 @@ function interface_sync_wireless_clones(&$ifcfg, $sync_changes = false) } // Sync the mode on the clone creation page with the configured mode on the interface - if (interface_is_wireless_clone($ifcfg['if']) && isset($config['wireless']['clone']) && is_array($config['wireless']['clone'])) { + if (stristr($ifcfg['if'], "_wlan") && isset($config['wireless']['clone']) && is_array($config['wireless']['clone'])) { foreach ($config['wireless']['clone'] as &$clone) { if ($clone['cloneif'] == $ifcfg['if']) { if ($sync_changes) { @@ -2845,7 +2781,7 @@ function find_dhcp6c_process($interface) function interface_vlan_mtu_configured($realhwif, $mtu) { global $config; - if (is_array($config['vlans']) && is_array($config['vlans']['vlan'])) { + if (isset($config['vlans']['vlan']) && is_array($config['vlans']['vlan'])) { foreach ($config['vlans']['vlan'] as $vlan) { if ($vlan['if'] != $realhwif) continue; @@ -2990,7 +2926,7 @@ function interface_configure($interface = 'wan', $reloadall = false, $linkupeven mwexec("/sbin/ifconfig " . escapeshellarg($realif) . " inet6 -accept_rtadv"); /* wireless configuration? */ - if (is_array($wancfg['wireless'])) + if (isset($wancfg['wireless']) && is_array($wancfg['wireless'])) interface_wireless_configure($realif, $wancfg, $wancfg['wireless']); $mac = get_interface_mac($realhwif); @@ -3000,7 +2936,7 @@ function interface_configure($interface = 'wan', $reloadall = false, $linkupeven * the interface config again, which attempts to spoof the MAC again, * which cycles the link again... */ - if ($wancfg['spoofmac'] && ($wancfg['spoofmac'] != $mac)) { + if (isset($wancfg['spoofmac']) && ($wancfg['spoofmac'] != $mac)) { mwexec("/sbin/ifconfig " . escapeshellarg($realhwif) . " link " . escapeshellarg($wancfg['spoofmac'])); @@ -3008,7 +2944,7 @@ function interface_configure($interface = 'wan', $reloadall = false, $linkupeven * All vlans need to spoof their parent mac address, too. see * ticket #1514: http://cvstrac.pfsense.com/tktview?tn=1514,33 */ - if (is_array($config['vlans']['vlan'])) { + if (isset($config['vlans']['vlan']) && is_array($config['vlans']['vlan'])) { foreach ($config['vlans']['vlan'] as $vlan) { if ($vlan['if'] == $realhwif) mwexec("/sbin/ifconfig " . escapeshellarg($vlan['vlanif']) . @@ -3032,12 +2968,14 @@ function interface_configure($interface = 'wan', $reloadall = false, $linkupeven } /* media */ - if ($wancfg['media'] || $wancfg['mediaopt']) { + if (isset($wancfg['media']) || isset($wancfg['mediaopt'])) { $cmd = "/sbin/ifconfig " . escapeshellarg($realhwif); - if ($wancfg['media']) + if (isset($wancfg['media'])) { $cmd .= " media " . escapeshellarg($wancfg['media']); - if ($wancfg['mediaopt']) + } + if (isset($wancfg['mediaopt'])) { $cmd .= " mediaopt " . escapeshellarg($wancfg['mediaopt']); + } mwexec($cmd); } $options = pfSense_get_interface_addresses($realhwif); @@ -3082,30 +3020,31 @@ function interface_configure($interface = 'wan', $reloadall = false, $linkupeven break; } - switch ($wancfg['ipaddrv6']) { - case 'slaac': - case 'dhcp6': - interface_dhcpv6_configure($interface, $wancfg); - break; - case '6rd': - interface_6rd_configure($interface, $wancfg); - break; - case '6to4': - interface_6to4_configure($interface, $wancfg); - break; - case 'track6': - interface_track6_configure($interface, $wancfg, $linkupevent); - break; - default: - /* XXX: Kludge for now related to #3280 */ - if (!in_array($tunnelif, array("gif", "gre", "ovp"))) { - if (is_ipaddrv6($wancfg['ipaddrv6']) && $wancfg['subnetv6'] <> "") { - mwexec("/sbin/ifconfig " . escapeshellarg($realif) . " inet6 {$wancfg['ipaddrv6']} prefixlen " . escapeshellarg($wancfg['subnetv6'])); + if (isset($wancfg['ipaddrv6'])) { + switch ($wancfg['ipaddrv6']) { + case 'slaac': + case 'dhcp6': + interface_dhcpv6_configure($interface, $wancfg); + break; + case '6rd': + interface_6rd_configure($interface, $wancfg); + break; + case '6to4': + interface_6to4_configure($interface, $wancfg); + break; + case 'track6': + interface_track6_configure($interface, $wancfg, $linkupevent); + break; + default: + /* XXX: Kludge for now related to #3280 */ + if (!in_array($tunnelif, array("gif", "gre", "ovp"))) { + if (is_ipaddrv6($wancfg['ipaddrv6']) && $wancfg['subnetv6'] <> "") { + mwexec("/sbin/ifconfig " . escapeshellarg($realif) . " inet6 {$wancfg['ipaddrv6']} prefixlen " . escapeshellarg($wancfg['subnetv6'])); + } } + break; } - break; } - if (!empty($wancfg['mtu'])) { if (stristr($realif, "_vlan")) { $assignedparent = convert_real_interface_to_friendly_interface_name($realhwif); @@ -4273,13 +4212,6 @@ function get_parent_interface($interface, $avoidrecurse = false) { return $parents; } -function interface_is_wireless_clone($wlif) { - if(!stristr($wlif, "_wlan")) { - return false; - } else { - return true; - } -} function interface_get_wireless_base($wlif) { if(!stristr($wlif, "_wlan")) { @@ -4438,111 +4370,6 @@ function guess_interface_from_ip($ipaddress) { return $ret; } -/* - * find_ip_interface($ip): return the interface where an ip is defined - * (or if $bits is specified, where an IP within the subnet is defined) - */ -function find_ip_interface($ip, $bits = null) { - if (!is_ipaddr($ip)) - return false; - - $isv6ip = is_ipaddrv6($ip); - - /* if list */ - $ifdescrs = get_configured_interface_list(); - - foreach ($ifdescrs as $ifdescr => $ifname) { - $ifip = ($isv6ip) ? get_interface_ipv6($ifname) : get_interface_ip($ifname); - if (is_null($ifip)) - continue; - if (is_null($bits)) { - if ($ip == $ifip) { - $int = get_real_interface($ifname); - return $int; - } - } - else { - if (ip_in_subnet($ifip, $ip . "/" . $bits)) { - $int = get_real_interface($ifname); - return $int; - } - } - } - - return false; -} - -/* - * find_virtual_ip_alias($ip): return the virtual IP alias where an IP is found - * (or if $bits is specified, where an IP within the subnet is found) - */ -function find_virtual_ip_alias($ip, $bits = null) -{ - global $config; - - if (!isset($config['virtualip']['vip'])) { - return false; - } - if (!is_ipaddr($ip)) { - return false; - } - - $isv6ip = is_ipaddrv6($ip); - - foreach ($config['virtualip']['vip'] as $vip) { - if ($vip['mode'] === "ipalias") { - if (is_ipaddrv6($vip['subnet']) != $isv6ip) - continue; - if (is_null($bits)) { - if (ip_in_subnet($ip, $vip['subnet'] . "/" . $vip['subnet_bits'])) { - return $vip; - } - } - else { - if (($isv6ip && check_subnetsv6_overlap($ip, $bits, $vip['subnet'], $vip['subnet_bits'])) - || (!$isv6ip && check_subnets_overlap($ip, $bits, $vip['subnet'], $vip['subnet_bits']))) { - return $vip; - } - } - } - } - return false; -} - -/* - * find_carp_interface($ip): return the carp interface where an ip is defined - */ -function find_carp_interface($ip) -{ - global $config; - - if (isset($config['virtualip']['vip'])) { - foreach ($config['virtualip']['vip'] as $vip) { - if ($vip['mode'] == "carp") { - if(is_ipaddrv4($ip)) { - $carp_ip = get_interface_ip($vip['interface']); - } - if(is_ipaddrv6($ip)) { - $carp_ip = get_interface_ipv6($vip['interface']); - } - exec("/sbin/ifconfig", $output, $return); - foreach($output as $line) { - $elements = preg_split("/[ ]+/i", $line); - if(strstr($elements[0], "vip")) - $curif = str_replace(":", "", $elements[0]); - if(stristr($line, $ip)) { - $if = $curif; - continue; - } - } - - if ($if) { - return $if; - } - } - } - } -} /****f* interfaces/link_ip_to_carp_interface @@ -4721,7 +4548,6 @@ function link_interface_to_gif($interface) */ function find_interface_ip($interface, $flush = false) { global $interface_ip_arr_cache; - global $interface_sn_arr_cache; $interface = str_replace("\n", "", $interface); @@ -4731,8 +4557,9 @@ function find_interface_ip($interface, $flush = false) { /* Setup IP cache */ if (!isset($interface_ip_arr_cache[$interface]) or $flush) { $ifinfo = pfSense_get_interface_addresses($interface); - $interface_ip_arr_cache[$interface] = $ifinfo['ipaddr']; - $interface_sn_arr_cache[$interface] = $ifinfo['subnetbits']; + if (isset($ifinfo['ipaddr'])) { + $interface_ip_arr_cache[$interface] = $ifinfo['ipaddr']; + } } return $interface_ip_arr_cache[$interface]; @@ -4794,16 +4621,14 @@ function find_interface_ipv6_ll($interface, $flush = false) { function find_interface_subnet($interface, $flush = false) { global $interface_sn_arr_cache; - global $interface_ip_arr_cache; $interface = str_replace("\n", "", $interface); if (does_interface_exist($interface) == false) return; - if (!isset($interface_sn_arr_cache[$interface]) or $flush) { + if (!isset($interface_sn_arr_cache[$interface]) || $flush) { $ifinfo = pfSense_get_interface_addresses($interface); - if (isset($ifinfo['ipaddr'])) { - $interface_ip_arr_cache[$interface] = $ifinfo['ipaddr']; + if (isset($ifinfo['subnetbits'])) { $interface_sn_arr_cache[$interface] = $ifinfo['subnetbits']; return $interface_sn_arr_cache[$interface]; } @@ -5047,72 +4872,7 @@ function is_interface_wireless($interface) return true; } -function get_wireless_modes($interface) { - /* return wireless modes and channels */ - $wireless_modes = array(); - $cloned_interface = get_real_interface($interface); - - if($cloned_interface && is_interface_wireless($cloned_interface)) { - $chan_list = "/sbin/ifconfig {$cloned_interface} list chan"; - $stack_list = "/usr/bin/awk -F\"Channel \" '{ gsub(/\\*/, \" \"); print \$2 \"\\\n\" \$3 }'"; - $format_list = "/usr/bin/awk '{print \$5 \" \" \$6 \",\" \$1}'"; - - $interface_channels = ""; - exec("$chan_list | $stack_list | sort -u | $format_list 2>&1", $interface_channels); - $interface_channel_count = count($interface_channels); - - $c = 0; - while ($c < $interface_channel_count) { - $channel_line = explode(",", $interface_channels["$c"]); - $wireless_mode = trim($channel_line[0]); - $wireless_channel = trim($channel_line[1]); - if(trim($wireless_mode) != "") { - /* if we only have 11g also set 11b channels */ - if($wireless_mode == "11g") { - if(!isset($wireless_modes["11b"])) - $wireless_modes["11b"] = array(); - } else if($wireless_mode == "11g ht") { - if(!isset($wireless_modes["11b"])) - $wireless_modes["11b"] = array(); - if(!isset($wireless_modes["11g"])) - $wireless_modes["11g"] = array(); - $wireless_mode = "11ng"; - } else if($wireless_mode == "11a ht") { - if(!isset($wireless_modes["11a"])) - $wireless_modes["11a"] = array(); - $wireless_mode = "11na"; - } - $wireless_modes["$wireless_mode"]["$c"] = $wireless_channel; - } - $c++; - } - } - return($wireless_modes); -} - -/* return channel numbers, frequency, max txpower, and max regulation txpower */ -function get_wireless_channel_info($interface) { - $wireless_channels = array(); - - $cloned_interface = get_real_interface($interface); - - if($cloned_interface && is_interface_wireless($cloned_interface)) { - $chan_list = "/sbin/ifconfig {$cloned_interface} list txpower"; - $stack_list = "/usr/bin/awk -F\"Channel \" '{ gsub(/\\*/, \" \"); print \$2 \"\\\n\" \$3 }'"; - $format_list = "/usr/bin/awk '{print \$1 \",\" \$3 \" \" \$4 \",\" \$5 \",\" \$7}'"; - - $interface_channels = ""; - exec("$chan_list | $stack_list | sort -u | $format_list 2>&1", $interface_channels); - - foreach ($interface_channels as $channel_line) { - $channel_line = explode(",", $channel_line); - if(!isset($wireless_channels[$channel_line[0]])) - $wireless_channels[$channel_line[0]] = $channel_line; - } - } - return($wireless_channels); -} /****f* interfaces/get_interface_mtu * NAME diff --git a/src/etc/inc/xmlrpc/legacy.inc b/src/etc/inc/xmlrpc/legacy.inc index f2061b04b..dd817c9e1 100644 --- a/src/etc/inc/xmlrpc/legacy.inc +++ b/src/etc/inc/xmlrpc/legacy.inc @@ -43,6 +43,42 @@ function xmlrpc_publishable_legacy() return $publish; } +/* + * does_vip_exist($vip): return true or false if a vip is + * configured. + */ +function does_vip_exist($vip) { + global $config; + + if(!$vip) + return false; + + + switch ($vip['mode']) { + case "carp": + case "ipalias": + /* XXX: Make proper checks? */ + $realif = get_real_interface($vip['interface']); + if (!does_interface_exist($realif)) { + return false; + } + break; + case "proxyarp": + /* XXX: Implement this */ + default: + return false; + } + + $ifacedata = pfSense_getall_interface_addresses($realif); + foreach ($ifacedata as $vipips) { + if ($vipips == "{$vip['subnet']}/{$vip['subnet_bits']}") + return true; + } + + return false; +} + + /** * @param null $category * @return mixed diff --git a/src/www/carp_status.php b/src/www/carp_status.php index c36a91226..cd7dbcf20 100644 --- a/src/www/carp_status.php +++ b/src/www/carp_status.php @@ -30,6 +30,26 @@ require_once("guiconfig.inc"); require_once("globals.inc"); +function interfaces_carp_set_maintenancemode($carp_maintenancemode){ + global $config; + if (isset($config["virtualip_carp_maintenancemode"]) && $carp_maintenancemode == false) { + unset($config["virtualip_carp_maintenancemode"]); + write_config("Leave CARP maintenance mode"); + } else + if (!isset($config["virtualip_carp_maintenancemode"]) && $carp_maintenancemode == true) { + $config["virtualip_carp_maintenancemode"] = true; + write_config("Enter CARP maintenance mode"); + } + + $viparr = &$config['virtualip']['vip']; + foreach ($viparr as $vip) { + if ($vip['mode'] == "carp") { + interface_carp_configure($vip); + } + } +} + + unset($interface_arr_cache); unset($carp_interface_count_cache); unset($interface_ip_arr_cache); diff --git a/src/www/interfaces.php b/src/www/interfaces.php index 65f8a3c5b..d3f32905d 100644 --- a/src/www/interfaces.php +++ b/src/www/interfaces.php @@ -39,6 +39,74 @@ require_once("rrd.inc"); require_once("vpn.inc"); require_once("xmlparse_attr.inc"); +function get_wireless_modes($interface) { + /* return wireless modes and channels */ + $wireless_modes = array(); + + $cloned_interface = get_real_interface($interface); + + if($cloned_interface && is_interface_wireless($cloned_interface)) { + $chan_list = "/sbin/ifconfig {$cloned_interface} list chan"; + $stack_list = "/usr/bin/awk -F\"Channel \" '{ gsub(/\\*/, \" \"); print \$2 \"\\\n\" \$3 }'"; + $format_list = "/usr/bin/awk '{print \$5 \" \" \$6 \",\" \$1}'"; + + $interface_channels = ""; + exec("$chan_list | $stack_list | sort -u | $format_list 2>&1", $interface_channels); + $interface_channel_count = count($interface_channels); + + $c = 0; + while ($c < $interface_channel_count) { + $channel_line = explode(",", $interface_channels["$c"]); + $wireless_mode = trim($channel_line[0]); + $wireless_channel = trim($channel_line[1]); + if(trim($wireless_mode) != "") { + /* if we only have 11g also set 11b channels */ + if($wireless_mode == "11g") { + if(!isset($wireless_modes["11b"])) + $wireless_modes["11b"] = array(); + } else if($wireless_mode == "11g ht") { + if(!isset($wireless_modes["11b"])) + $wireless_modes["11b"] = array(); + if(!isset($wireless_modes["11g"])) + $wireless_modes["11g"] = array(); + $wireless_mode = "11ng"; + } else if($wireless_mode == "11a ht") { + if(!isset($wireless_modes["11a"])) + $wireless_modes["11a"] = array(); + $wireless_mode = "11na"; + } + $wireless_modes["$wireless_mode"]["$c"] = $wireless_channel; + } + $c++; + } + } + return($wireless_modes); +} + +/* return channel numbers, frequency, max txpower, and max regulation txpower */ +function get_wireless_channel_info($interface) { + $wireless_channels = array(); + + $cloned_interface = get_real_interface($interface); + + if($cloned_interface && is_interface_wireless($cloned_interface)) { + $chan_list = "/sbin/ifconfig {$cloned_interface} list txpower"; + $stack_list = "/usr/bin/awk -F\"Channel \" '{ gsub(/\\*/, \" \"); print \$2 \"\\\n\" \$3 }'"; + $format_list = "/usr/bin/awk '{print \$1 \",\" \$3 \" \" \$4 \",\" \$5 \",\" \$7}'"; + + $interface_channels = ""; + exec("$chan_list | $stack_list | sort -u | $format_list 2>&1", $interface_channels); + + foreach ($interface_channels as $channel_line) { + $channel_line = explode(",", $channel_line); + if(!isset($wireless_channels[$channel_line[0]])) + $wireless_channels[$channel_line[0]] = $channel_line; + } + } + return($wireless_channels); +} + + $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/interfaces.php'); // Get configured interface list diff --git a/src/www/wizard.php b/src/www/wizard.php index 98b552df7..b1cd66215 100644 --- a/src/www/wizard.php +++ b/src/www/wizard.php @@ -34,6 +34,41 @@ require_once("functions.inc"); require_once("filter.inc"); require_once("rrd.inc"); +/* + * find_ip_interface($ip): return the interface where an ip is defined + * (or if $bits is specified, where an IP within the subnet is defined) + */ +function find_ip_interface($ip, $bits = null) { + if (!is_ipaddr($ip)) + return false; + + $isv6ip = is_ipaddrv6($ip); + + /* if list */ + $ifdescrs = get_configured_interface_list(); + + foreach ($ifdescrs as $ifdescr => $ifname) { + $ifip = ($isv6ip) ? get_interface_ipv6($ifname) : get_interface_ip($ifname); + if (is_null($ifip)) + continue; + if (is_null($bits)) { + if ($ip == $ifip) { + $int = get_real_interface($ifname); + return $int; + } + } + else { + if (ip_in_subnet($ifip, $ip . "/" . $bits)) { + $int = get_real_interface($ifname); + return $int; + } + } + } + + return false; +} + + global $g; $stepid = htmlspecialchars($_GET['stepid']);