/** * list available interfaces for lagg * @param null $selected_id selected item index * @return array */ function available_interfaces($selected_id = null) { global $config; // configured interfaces $configured_interfaces = array(); foreach (get_configured_interface_list(false, true) as $intf) { $configured_interfaces[] = get_real_interface($intf); } // lagg members from other lagg interfaces $lagg_member_interfaces = array(); foreach ($config['laggs']['lagg'] as $lagg_idx => $lagg) { if ($lagg_idx == $selected_id) { continue; } foreach (explode(",", $lagg['members']) as $lagg_member) { $lagg_member_interfaces[] = get_real_interface($lagg_member); } } $interfaces = array(); foreach (get_interface_list() as $intf => $intf_info) { if (strpos($intf, '_vlan')) { // skip vlans continue; } elseif (in_array($intf, $lagg_member_interfaces)) { // skip members of other lagg interfaces continue; } elseif (in_array($intf, $configured_interfaces)) { // skip configured interfaces continue; } $interfaces[$intf] = $intf_info; } return $interfaces; }
} } elseif ($portinfo['isqinq']) { $descr = $portinfo['descr']; } elseif (substr($portname, 0, 4) == 'ovpn') { $descr = $portname . " (" . $ovpn_descrs[substr($portname, 5)] . ")"; } else { $descr = $portname . " (" . $portinfo['mac'] . ")"; } return htmlspecialchars($descr); } /* In this file, "port" refers to the physical port name, while "interface" refers to LAN, WAN, or OPTn. */ /* get list without VLAN interfaces */ $portlist = get_interface_list(); /* add wireless clone interfaces */ if (is_array($config['wireless']['clone']) && count($config['wireless']['clone'])) { foreach ($config['wireless']['clone'] as $clone) { $portlist[$clone['cloneif']] = $clone; $portlist[$clone['cloneif']]['iswlclone'] = true; } } /* add VLAN interfaces */ if (is_array($config['vlans']['vlan']) && count($config['vlans']['vlan'])) { foreach ($config['vlans']['vlan'] as $vlan) { $portlist[$vlan['vlanif']] = $vlan; $portlist[$vlan['vlanif']]['isvlan'] = true; } } /* add Bridge interfaces */
$size = "size=\"{$field['size']}\""; } if ($field['multiple'] != "" and $field['multiple'] != "0") { $multiple = "multiple=\"multiple\""; $name .= "[]"; } echo "<select class='formselect' id='{$name}' name='{$name}' {$size} {$multiple}>\n"; if ($field['add_to_interfaces_selection'] != "") { $SELECTED = ""; if ($field['add_to_interfaces_selection'] == $value) { $SELECTED = " SELECTED"; } echo "<option value='" . $field['add_to_interfaces_selection'] . "'" . $SELECTED . ">" . $field['add_to_interfaces_selection'] . "</option>\n"; } if ($field['type'] == "interface_select") { $interfaces = get_interface_list(); } else { $interfaces = get_configured_interface_with_descr(); } foreach ($interfaces as $ifname => $iface) { if ($field['type'] == "interface_select") { $iface = $ifname; if ($iface['mac']) { $iface .= " ({$iface['mac']})"; } } $SELECTED = ""; if ($value == $ifname) { $SELECTED = " SELECTED"; } $to_echo = "<option value='" . $ifname . "'" . $SELECTED . ">" . $iface . "</option>\n";
function build_link_list() { global $config, $pconfig; $linklist = array('list' => array(), 'selected' => array()); $selected_ports = array(); if (is_array($pconfig['interfaces'])) { $selected_ports = $pconfig['interfaces']; } elseif (!empty($pconfig['interfaces'])) { $selected_ports = explode(',', $pconfig['interfaces']); } if (!is_dir("/var/spool/lock")) { mwexec("/bin/mkdir -p /var/spool/lock"); } if ($pconfig['type'] == 'ppp') { $serialports = glob("/dev/cua[a-zA-Z][0-9]{,.[0-9],.[0-9][0-9],[0-9],[0-9].[0-9],[0-9].[0-9][0-9]}", GLOB_BRACE); $serport_count = 0; foreach ($serialports as $port) { $serport_count++; $linklist['list'][$port] = trim($port); if (in_array($port, $selected_ports)) { array_push($linklist['selected'], $port); } } } else { $port_count = 0; $portlist = get_interface_list(); if (is_array($config['vlans']['vlan']) && count($config['vlans']['vlan'])) { foreach ($config['vlans']['vlan'] as $vlan) { $portlist[$vlan['vlanif']] = $vlan; } } foreach ($portlist as $ifn => $ifinfo) { $port_count++; $string = ""; if (is_array($ifinfo)) { $string .= $ifn; if ($ifinfo['mac']) { $string .= " ({$ifinfo['mac']})"; } if ($ifinfo['friendly']) { $string .= " - {$ifinfo['friendly']}"; } if ($ifinfo['descr']) { $string .= " - {$ifinfo['descr']}"; } } else { $string .= $ifinfo; } $linklist['list'][$ifn] = $string; if (in_array($ifn, $selected_ports)) { array_push($linklist['selected'], $ifn); } } if ($serport_count > $port_count) { $port_count = $serport_count; } } return $linklist; }
$pconfig['bw_up'] = $a_passthrumacs[$id]['bw_up']; $pconfig['bw_down'] = $a_passthrumacs[$id]['bw_down']; $pconfig['descr'] = $a_passthrumacs[$id]['descr']; $pconfig['username'] = $a_passthrumacs[$id]['username']; } if ($_POST) { unset($input_errors); $pconfig = $_POST; /* input validation */ $reqdfields = explode(" ", "action mac"); $reqdfieldsn = array(gettext("Action"), gettext("MAC address")); do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); $_POST['mac'] = strtolower(str_replace("-", ":", $_POST['mac'])); if ($_POST['mac']) { if (is_macaddr($_POST['mac'])) { $iflist = get_interface_list(); foreach ($iflist as $if) { if ($_POST['mac'] == strtolower($if['mac'])) { $input_errors[] = sprintf(gettext("The MAC address %s belongs to a local interface. It cannot be used here."), $_POST['mac']); break; } } } else { $input_errors[] = sprintf("%s. [%s]", gettext("A valid MAC address must be specified"), $_POST['mac']); } } if ($_POST['bw_up'] && !is_numeric($_POST['bw_up'])) { $input_errors[] = gettext("Upload speed needs to be an integer"); } if ($_POST['bw_down'] && !is_numeric($_POST['bw_down'])) { $input_errors[] = gettext("Download speed needs to be an integer");
function list_interfaces() { global $config; $interfaces = array(); // define config sections to fetch interfaces from. $config_sections = array(); $config_sections['wireless.clone'] = array('descr' => 'cloneif', 'key' => 'cloneif'); $config_sections['vlans.vlan'] = array('descr' => "tag,if,descr", 'format' => gettext('vlan %s on %s') . ' (%s)', 'key' => 'vlanif'); $config_sections['bridges.bridged'] = array('descr' => 'bridgeif, descr', 'key' => 'bridgeif', 'format' => '%s (%s)'); $config_sections['gifs.gif'] = array('descr' => 'remote-addr,descr', 'key' => 'gifif', 'format' => 'gif %s (%s)'); $config_sections['gres.gre'] = array('descr' => 'remote-addr,descr', 'key' => 'greif', 'format' => 'gre %s (%s)'); $config_sections['laggs.lagg'] = array('descr' => 'laggif, descr', 'key' => 'laggif', 'format' => '%s (%s)', 'fields' => 'members'); $config_sections['ppps.ppp'] = array('descr' => 'if,ports,descr,username', 'key' => 'if', 'format' => '%s (%s) - %s %s', 'fields' => 'type'); // add physical network interfaces foreach (get_interface_list() as $key => $intf_item) { $interfaces[$key] = array('descr' => $key . ' (' . $intf_item['mac'] . ')', 'section' => 'interfaces'); } // collect interfaces from defined config sections foreach ($config_sections as $key => $value) { $cnf_location = explode(".", $key); if (!empty($config[$cnf_location[0]][$cnf_location[1]])) { foreach ($config[$cnf_location[0]][$cnf_location[1]] as $cnf_item) { $interface_item = array("section" => $key); // construct item description $descr = array(); foreach (explode(',', $value['descr']) as $fieldname) { if (isset($cnf_item[trim($fieldname)])) { $descr[] = $cnf_item[trim($fieldname)]; } else { $descr[] = ""; } } if (!empty($value['format'])) { $interface_item['descr'] = vsprintf($value['format'], $descr); } else { $interface_item['descr'] = implode(" ", $descr); } // copy requested additional fields into temp structure if (isset($value['fields'])) { foreach (explode(',', $value['fields']) as $fieldname) { if (isset($cnf_item[$fieldname])) { $interface_item[$fieldname] = $cnf_item[$fieldname]; } } } $interfaces[$cnf_item[$value['key']]] = $interface_item; } } } /* QinQ interfaces can't be directly extracted from config without additional logic */ if (isset($config['qinqs']['qinqentry'])) { foreach ($config['qinqs']['qinqentry'] as $qinq) { $interfaces["vlan{$qinq['tag']}"] = array('descr' => "VLAN {$qinq['tag']}"); foreach (explode(' ', $qinq['members']) as $qinqif) { // QinQ members $interfaces["vlan{$qinq['tag']}_{$qinqif}"] = array('descr' => "QinQ {$qinqif}"); } } } // enforce constraints foreach ($interfaces as $intf_id => $intf_details) { // LAGG members cannot be assigned if (isset($intf_details['members']) && $intf_details['section'] == 'laggs.lagg') { foreach (explode(',', $intf_details['members']) as $intf) { if (isset($interfaces[trim($intf)])) { unset($interfaces[trim($intf)]); } } } } /* add tun0 interface (required for sixxs-aiccu) */ // This is a temporary solution to allow using sixxs-aiccu without manual code change // until the aiccu service is correctly included in the web interface. // (to avoid additional temporary code in the interface_assign_description function). $tunfound = ""; exec("/sbin/ifconfig | /usr/bin/grep -c '^tun0'", $tunfound); if (intval($tunfound[0]) > 0) { $interfaces['tun0'] = array('descr' => 'sixxs-aiccu'); } return $interfaces; }
<form action="interfaces_lagg_edit.php" method="post" name="iform" id="iform"> <?php if ($input_errors) { print_input_errors($input_errors); } ?> <table width="100%" border="0" cellpadding="6" cellspacing="0"> <?php html_inputbox("if", gettext("Interface"), $pconfig['if'], "", true, 5, true); ?> <?php html_combobox("laggproto", gettext("Aggregation protocol"), $pconfig['laggproto'], array("failover" => gettext("Failover"), "fec" => gettext("FEC (Fast EtherChannel)"), "lacp" => gettext("LACP (Link Aggregation Control Protocol)"), "loadbalance" => gettext("Loadbalance"), "roundrobin" => gettext("Roundrobin"), "none" => gettext("None")), "", true); ?> <?php $a_port = array(); foreach (get_interface_list() as $ifk => $ifv) { if (eregi('lagg', $ifk)) { continue; } if (!(isset($uuid) && FALSE !== $cnid) && false !== array_search_ex($ifk, $a_lagg, "laggport")) { continue; } $a_port[$ifk] = htmlspecialchars("{$ifk} ({$ifv['mac']})"); } ?> <?php html_listbox("laggport", gettext("Ports"), $pconfig['laggport'], $a_port, gettext("Note: Ctrl-click (or command-click on the Mac) to select multiple entries."), true); ?> <?php html_inputbox("desc", gettext("Description"), $pconfig['desc'], gettext("You may enter a description here for your reference."), false, 40); ?>
if (!empty($auxparam)) { $config['dynamicdns']['auxparam'][] = $auxparam; } } write_config(); $retval = 0; if (!file_exists($d_sysrebootreqd_path)) { config_lock(); $retval |= rc_update_service("inadyn"); config_unlock(); } $savemsg = get_std_save_message($retval); } } // Get list of available interfaces. $a_interface = get_interface_list(); include "fbegin.inc"; ?> <script type="text/javascript"> <!-- function enable_change(enable_change) { var endis = !(document.iform.enable.checked || enable_change); document.iform.provider.disabled = endis; document.iform.domainname.disabled = endis; document.iform.username.disabled = endis; document.iform.password.disabled = endis; document.iform.updateperiod.disabled = endis; document.iform.forcedupdateperiod.disabled = endis; document.iform.wildcard.disabled = endis; document.iform.auxparam.disabled = endis; }
function build_parent_list() { global $g; $parentlist = array(); $portlist = get_interface_list(); $count = 0; foreach ($portlist as $ifn => $ifinfo) { if (preg_match($g['wireless_regex'], $ifn)) { $parentlist[$ifn] = htmlspecialchars($ifn . ' (' . $ifinfo['mac'] . ')'); $count++; } } if ($count > 0) { return $parentlist; } else { return array('0' => gettext('None available')); } }
</small> <i class="fa fa-toggle-off text-danger" style="cursor: pointer;" id="show_all_help_page" type="button"></i></a> </td> </tr> </thead> <tbody> <tr> <td><i class="fa fa-info-circle text-muted"></i> <?php echo gettext("Parent interface"); ?> </td> <td> <select name="if" class="selectpicker"> <?php foreach (get_interface_list() as $ifn => $ifinfo) { if (match_wireless_interface($ifn)) { if (strstr($ifn, '_wlan')) { continue; } ?> <option value="<?php echo $ifn; ?> " <?php echo $ifn == $pconfig['if'] ? "selected=\"selected\"" : ""; ?> > <?php echo htmlspecialchars($ifn . " (" . $ifinfo['mac'] . ")"); ?>
$periods[$j] .= "s"; } $text = "{$difference} {$periods[$j]}"; return $text; } $havg = humantime($average); $hperiod = humantime($seconds); if (strstr($curdatabase, "-traffic.rrd") && file_exists("{$rrddbpath}{$curdatabase}")) { /* define graphcmd for traffic stats */ $graphcmd = "{$rrdtool} graph {$rrdtmppath}{$curdatabase}-{$interval}.png \\\r\n\t\t--start -{$seconds} -e -{$average} \\\r\n\t\t--vertical-label \"bits/sec\" \\\r\n\t\t--color SHADEA#eeeeee --color SHADEB#eeeeee \\\r\n\t\t--title \"`hostname` - {$prettydb} - {$hperiod} - {$havg} average\" \\\r\n\t\t--height 200 --width 620 -x \"{$scale}\" \\\r\n\t\tDEF:{$curif}-in_bytes={$rrddbpath}{$curdatabase}:in:AVERAGE \\\r\n\t\tDEF:{$curif}-out_bytes={$rrddbpath}{$curdatabase}:out:AVERAGE \\\r\n\t\t\"CDEF:{$curif}-in_bits={$curif}-in_bytes,8,*\" \\\r\n\t\t\"CDEF:{$curif}-out_bits={$curif}-out_bytes,8,*\" \\\r\n\t\t\"CDEF:{$curif}-bits_io={$curif}-in_bits,{$curif}-out_bits,+\" \\\r\n\t\t\"CDEF:{$curif}-out_bits_neg={$curif}-out_bits,{$multiplier},*\" \\\r\n\t\t\"CDEF:{$curif}-bytes_in={$curif}-in_bytes,0,{$speedlimit},LIMIT,UN,0,{$curif}-in_bytes,IF,{$average},*\" \\\r\n\t\t\"CDEF:{$curif}-bytes_out={$curif}-out_bytes,0,{$speedlimit},LIMIT,UN,0,{$curif}-out_bytes,IF,{$average},*\" \\\r\n\t\t\"CDEF:{$curif}-bytes={$curif}-bytes_in,{$curif}-bytes_out,+\" \\\r\n\t\t\"CDEF:{$curif}-bytes_in_t={$curif}-in_bytes,0,{$speedlimit},LIMIT,UN,0,{$curif}-in_bytes,IF,{$seconds},*\" \\\r\n\t\t\"CDEF:{$curif}-bytes_out_t={$curif}-out_bytes,0,{$speedlimit},LIMIT,UN,0,{$curif}-out_bytes,IF,{$seconds},*\" \\\r\n\t\t\"CDEF:{$curif}-bytes_t={$curif}-bytes_in_t,{$curif}-bytes_out_t,+\" \\\r\n\t\tAREA:{$curif}-in_bits#{$colortrafficdown}:{$curif}-in \\\r\n\t\t{$AREA}:{$curif}-out_bits_neg#{$colortrafficup}:{$curif}-out \\\r\n\t\tCOMMENT:\"\\n\"\\\r\n\t\tCOMMENT:\"\t\t maximum average current period\\n\"\\\r\n\t\tCOMMENT:\"in\t\"\\\r\n\t\tGPRINT:{$curif}-in_bits:MAX:'%7.2lf %sb/s'\\\r\n\t\tGPRINT:{$curif}-in_bits:AVERAGE:'%7.2lf %Sb/s'\\\r\n\t\tGPRINT:{$curif}-in_bits:LAST:'%7.2lf %Sb/s'\\\r\n\t\tGPRINT:{$curif}-bytes_in_t:AVERAGE:'%7.2lf %sB i'\\\r\n\t\tCOMMENT:\"\\n\"\\\r\n\t\tCOMMENT:\"out\t\"\\\r\n\t\tGPRINT:{$curif}-out_bits:MAX:'%7.2lf %sb/s'\\\r\n\t\tGPRINT:{$curif}-out_bits:AVERAGE:'%7.2lf %Sb/s'\\\r\n\t\tGPRINT:{$curif}-out_bits:LAST:'%7.2lf %Sb/s'\\\r\n\t\tGPRINT:{$curif}-bytes_out_t:AVERAGE:'%7.2lf %sB o'\\\r\n\t\tCOMMENT:\"\\n\"\\\r\n\t\tCOMMENT:\"totals\"\\\r\n\t\tGPRINT:{$curif}-bits_io:MAX:'%7.2lf %sb/s'\\\r\n\t\tGPRINT:{$curif}-bits_io:AVERAGE:'%7.2lf %sb/s'\\\r\n\t\tGPRINT:{$curif}-bits_io:LAST:'%7.2lf %sb/s'\\\r\n\t\tGPRINT:{$curif}-bytes_t:AVERAGE:'%7.2lf %sB t'\\\r\n \tCOMMENT:\"\\n\"\\\r\n\t\tCOMMENT:\"\t\t\t\t\t\t\t\t\t\t\t\t\t`date +\"%b %d %H\\:%M\\:%S %Y\"`\""; } elseif (strstr($curdatabase, "-throughput.rrd")) { /* define graphcmd for throughput stats */ /* this gathers all interface statistics, the database does not actually exist */ $graphcmd = "{$rrdtool} graph {$rrdtmppath}{$curdatabase}-{$interval}.png \\\r\n\t\t--start -{$seconds} -e -{$average} \\\r\n\t\t--vertical-label \"bits/sec\" \\\r\n\t\t--color SHADEA#eeeeee --color SHADEB#eeeeee \\\r\n\t\t--title \"`hostname` - {$prettydb} - {$hperiod} - {$havg} average\" \\\r\n\t\t--height 200 --width 620 -x \"{$scale}\" "; $vfaces = array("vlan.?*"); $ifdescrs = get_interface_list(); $g = 0; $operand = ""; $comma = ""; $graphtputbi = ""; $graphtputbo = ""; $graphtputbt = ""; $graphtputbyi = ""; $graphtputbyo = ""; $graphtputbyt = ""; foreach ($ifdescrs as $ifdescr) { $ifname = $ifdescr['friendly']; $state = $ifdescr['up']; /* skip interfaces that do not have a friendly name */ if ("{$ifname}" == "") { continue;