"") { $member = explode("-", $_POST["members{$x}"]); if (count($member) > 1) { if (preg_match("/([^0-9])+/", $member[0], $match) || preg_match("/([^0-9])+/", $member[1], $match)) $input_errors[] = gettext("Tags can contain only numbers or a range in format #-#."); for ($i = $member[0]; $i <= $member[1]; $i++) { if ($isfirst > 0) $members .= " "; $members .= $i; $isfirst++; } } else { if (preg_match("/([^0-9])+/", $_POST["members{$x}"], $match)) $input_errors[] = gettext("Tags can contain only numbers or a range in format #-#."); if ($isfirst > 0) $members .= " "; $members .= $_POST["members{$x}"]; $isfirst++; } } } if (!$input_errors) { $qinqentry['members'] = $members; $qinqentry['descr'] = $_POST['descr']; $qinqentry['vlanif'] = "{$_POST['if']}_{$_POST['tag']}"; $nmembers = explode(" ", $members); if (isset($id) && $a_qinqs[$id]) { $omembers = explode(" ", $a_qinqs[$id]['members']); $delmembers = array_diff($omembers, $nmembers); if (count($delmembers) > 0) { foreach ($delmembers as $tag) { mwexec("/usr/sbin/ngctl shutdown {$qinqentry['vlanif']}h{$tag}:"); mwexec("/usr/sbin/ngctl msg {$qinqentry['vlanif']}qinq: delfilter \\\"{$qinqentry['vlanif']}{$tag}\\\""); } } $addmembers = array_diff($nmembers, $omembers); if (count($addmembers) > 0) { foreach ($addmembers as $member) { $macaddr = get_interface_mac($qinqentry['vlanif']); mwexec("/usr/sbin/ngctl mkpeer {$$qinqentry['vlanif']}qinq: eiface {$$qinqentry['vlanif']}{$member} ether"); mwexec("/usr/sbin/ngctl name {$qinqentry['vlanif']}qinq:{$qinqentry['vlanif']}{$tag} {$qinqentry['vlanif']}h{$member}"); mwexec("/usr/sbin/ngctl msg {$qinqentry['vlanif']}qinq: addfilter '{ vlan={$member} hook=\\\"{$qinqentry['vlanif']}{$member}\\\" }'"); mwexec("/usr/sbin/ngctl msg {$qinqentry['vlanif']}h{$tag}: setifname \\\"{$qinqentry['vlanif']}_{$member}\\\""); mwexec("/usr/sbin/ngctl msg {$qinqentry['vlanif']}h{$member}: set {$macaddr}"); } } $a_qinqs[$id] = $qinqentry; } else { interface_qinq_configure($qinqentry); $a_qinqs[] = $qinqentry; } if ($_POST['autogroup'] == "yes") { if (!is_array($config['ifgroups']['ifgroupentry'])) $config['ifgroups']['ifgroupentry'] = array(); foreach ($config['ifgroups']['ifgroupentry'] as $gid => $group) { if ($group['ifname'] == "QinQ") { $found = true; break; } } $additions = ""; foreach($nmembers as $qtag) $additions .= "{$qinqentry['vlanif']}_{$qtag} "; $additions .= "{$qinqentry['vlanif']}"; if ($found == true) $config['ifgroups']['ifgroupentry'][$gid]['members'] .= " {$additions}"; else { $gentry = array(); $gentry['ifname'] = "QinQ"; $gentry['members'] = "{$additions}"; $gentry['descr'] = gettext("QinQ VLANs group"); $config['ifgroups']['ifgroupentry'][] = $gentry; } } write_config(); header("Location: interfaces_qinq.php"); exit; } else { $pconfig['descr'] = $_POST['descr']; $pconfig['tag'] = $_POST['tag']; $pconfig['members'] = $members; } } include("head.inc"); ?> ">



/> Auto assign interface so it can be configured with ip etc...
/> Auto enable interface so it can be used on filter rules.
> Allows to keep clients mtu unchanged(1500).
NOTE: if you are using jumbo frames this option is not needed and may produce incorrect results!

>


"") { $item = explode(" ", $members); foreach($item as $ww) { $members = $item[$counter]; $tracker = $counter; ?>
" />
  " /> " />