/**
 * 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;
}
示例#2
0
        }
    } 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 */
示例#3
0
     $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");
示例#6
0
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);
?>
示例#8
0
            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>
                        &nbsp;
                      </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;