summaryrefslogtreecommitdiffstats
path: root/usr/local/www
diff options
context:
space:
mode:
authorSimon Cornelius P. Umacob <simoncpu@gmail.com>2009-01-20 15:52:39 +0800
committerSimon Cornelius P. Umacob <simoncpu@gmail.com>2009-01-20 15:52:39 +0800
commitf193cf92b2c925a2f3f71a713d766efd1e4d81e0 (patch)
treec02f02076434ddf76d0892a06a66ad0969cbe70e /usr/local/www
parent1f9f2a95b7b42cf33e730535092e56e214fdb848 (diff)
downloadpfsense-f193cf92b2c925a2f3f71a713d766efd1e4d81e0.zip
pfsense-f193cf92b2c925a2f3f71a713d766efd1e4d81e0.tar.gz
Merge IPv6 changes
Diffstat (limited to 'usr/local/www')
-rwxr-xr-xusr/local/www/firewall_rules_edit.php123
-rwxr-xr-xusr/local/www/interfaces.php146
-rwxr-xr-xusr/local/www/system.php18
-rwxr-xr-xusr/local/www/system_gateways_edit.php85
4 files changed, 309 insertions, 63 deletions
diff --git a/usr/local/www/firewall_rules_edit.php b/usr/local/www/firewall_rules_edit.php
index 37af21d..0883d62 100755
--- a/usr/local/www/firewall_rules_edit.php
+++ b/usr/local/www/firewall_rules_edit.php
@@ -40,6 +40,7 @@
require("guiconfig.inc");
+require_once("IPv6.inc");
$specialsrcdst = explode(" ", "any wanip lanip lan pptp pppoe");
@@ -91,6 +92,9 @@ if (isset($id) && $a_filter[$id]) {
if ($a_filter[$id]['protocol'] == "icmp")
$pconfig['icmptype'] = $a_filter[$id]['icmptype'];
+ if ($a_filter[$id]['protocol'] == "icmp6")
+ $pconfig['icmp6type'] = $a_filter[$id]['icmp6type'];
+
address_to_pconfig($a_filter[$id]['source'], $pconfig['src'],
$pconfig['srcmask'], $pconfig['srcnot'],
$pconfig['srcbeginport'], $pconfig['srcendport']);
@@ -156,9 +160,9 @@ if (isset($_GET['dup']))
unset($id);
if ($_POST) {
-
- if ($_POST['type'] == "reject" && $_POST['proto'] <> "tcp")
- $input_errors[] = "Reject type rules only works when the protocol is set to TCP.";
+ if ($_POST['type'] == "reject" && !($_POST['proto'] == "tcp" || $_POST['proto'] == "tcp6")) {
+ $input_errors[] = "Reject type rules only works when the protocol is set to TCP or TCP6.";
+ }
if (($_POST['proto'] != "tcp") && ($_POST['proto'] != "udp") && ($_POST['proto'] != "tcp/udp")) {
$_POST['srcbeginport'] = 0;
@@ -282,7 +286,7 @@ if ($_POST) {
if (!is_specialnet($_POST['srctype'])) {
if (($_POST['src'] && !is_ipaddroranyalias($_POST['src']))) {
- $input_errors[] = "A valid source IP address or alias must be specified.";
+ $input_errors[] = "A valid source IPv4/IPv6 address or alias must be specified.";
}
if (($_POST['srcmask'] && !is_numericint($_POST['srcmask']))) {
$input_errors[] = "A valid source bit count must be specified.";
@@ -290,7 +294,7 @@ if ($_POST) {
}
if (!is_specialnet($_POST['dsttype'])) {
if (($_POST['dst'] && !is_ipaddroranyalias($_POST['dst']))) {
- $input_errors[] = "A valid destination IP address or alias must be specified.";
+ $input_errors[] = "A valid destination IPv4/IPv6 address or alias must be specified.";
}
if (($_POST['dstmask'] && !is_numericint($_POST['dstmask']))) {
$input_errors[] = "A valid destination bit count must be specified.";
@@ -386,6 +390,11 @@ if ($_POST) {
else
unset($filterent['icmptype']);
+ if ($_POST['proto'] == "icmp6" && $_POST['icmp6type'])
+ $filterent['icmp6type'] = $_POST['icmp6type'];
+ else
+ unset($filterent['icmp6type']);
+
pconfig_to_address($filterent['source'], $_POST['src'],
$_POST['srcmask'], $_POST['srcnot'],
$_POST['srcbeginport'], $_POST['srcendport']);
@@ -460,6 +469,8 @@ include("head.inc");
?>
+<script type="text/javascript" src="javascript/NetUtils.js"></script>
+
</head>
<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
@@ -569,7 +580,7 @@ include("head.inc");
<td width="78%" class="vtable">
<select name="proto" class="formselect" onchange="proto_change()">
<?php
- $protocols = explode(" ", "TCP UDP TCP/UDP ICMP ESP AH GRE IGMP any carp pfsync");
+ $protocols = explode(" ", "TCP UDP TCP/UDP ICMP TCP6 UDP6 TCP6/UDP6 ICMP6 ESP AH GRE IGMP any carp pfsync");
foreach ($protocols as $proto): ?>
<option value="<?=strtolower($proto);?>" <?php if (strtolower($proto) == $pconfig['proto']) echo "selected"; ?>><?=htmlspecialchars($proto);?></option>
<?php endforeach; ?>
@@ -611,6 +622,50 @@ include("head.inc");
<span class="vexpl">If you selected ICMP for the protocol above, you may specify an ICMP type here.</span>
</td>
</tr>
+ <tr id="icmp6box" name="icmp6box">
+ <td valign="top" class="vncell">ICMP6 type</td>
+ <td class="vtable">
+ <select name="icmp6type" class="formselect">
+<?php
+ $icmp6types = array(
+ "unreach" => "Destination unreachable",
+ "toobig" => "Packet too big",
+ "timex" => "Time exceeded",
+ "parampro" => "Invalid IPv6 header",
+ "echoreq" => "Echo service request",
+ "echorep" => "Echo service reply",
+ "groupqry" => "Group membership query",
+ "listqry" => "Multicast listener query",
+ "grouprep" => "Group membership report",
+ "listenrep" => "Multicast listener report",
+ "groupterm" => "Group membership termination",
+ "listendone" => "Multicast listerner done",
+ "routersol" => "Router solicitation",
+ "routeradv" => "Router advertisement",
+ "neighbrsol" => "Neighbor solicitation",
+ "neighbradv" => "Neighbor advertisement",
+ "redir" => "Shorter route exists",
+ "routrrenum" => "Route renumbering",
+ "fqdnreq" => "FQDN query",
+ "niqry" => "Node information query",
+ "wrureq" => "Who-are-you request",
+ "fqdnrep" => "FQDN reply",
+ "nirep" => "Node information reply",
+ "wrurep" => "Who-are-you reply",
+ "mtraceresp" => "mtrace response",
+ "mtrace" => "mtrace messages"
+ );
+?>
+
+ <?php foreach ($icmp6types as $icmp6type => $descr): ?>
+ <option value="<?=$icmp6type;?>" <?php if ($icmp6type == $pconfig['icmp6type']) echo "selected"; ?>><?=htmlspecialchars($descr);?></option>
+ <?php endforeach; ?>
+
+ </select>
+ <br />
+ <span class="vexpl">If you selected ICMP6 for the protocol above, you may specify an ICMP6 type here.</span>
+ </td>
+ </tr>
<tr>
<td width="22%" valign="top" class="vncellreq">Source</td>
<td width="78%" class="vtable">
@@ -625,11 +680,31 @@ include("head.inc");
<td>Type:&nbsp;&nbsp;</td>
<td>
<select name="srctype" class="formselect" onChange="typesel_change()">
-<?php
- $sel = is_specialnet($pconfig['src']); ?>
+ <?php
+ $sel_host = false;
+ $sel_v4 = false;
+ $sel_v6 = false;
+
+ $sel = is_specialnet($pconfig['src']);
+
+ if (is_ipaddr($pconfig['src']) && !$sel) {
+ if ($pconfig['srcmask'] == 32) {
+ $sel_host = true;
+ } else {
+ $sel_v4 = true;
+ }
+ } else if (Net_IPv6::checkIPv6($pconfig['src']) && !$sel) {
+ if ($pconfig['srcmask'] == 128) {
+ $sel_host = true;
+ } else {
+ $sel_v6 = true;
+ }
+ }
+ ?>
<option value="any" <?php if ($pconfig['src'] == "any") { echo "selected"; } ?>>any</option>
- <option value="single" <?php if (($pconfig['srcmask'] == 32) && !$sel) { echo "selected"; $sel = 1; } ?>>Single host or alias</option>
- <option value="network" <?php if (!$sel) echo "selected"; ?>>Network</option>
+ <option value="single" <?php if ($sel_host) echo "selected"; ?>>Single host or alias</option>
+ <option value="network" <?php if ($sel_v4) echo "selected"; ?>>IPv4 Network</option>
+ <option value="network_ipv6" <?php if ($sel_v6) echo "selected"; ?>>IPv6 Network</option>
<?php if(have_ruleint_access("wan")): ?>
<option value="wanip" <?php if ($pconfig['src'] == "wanip") { echo "selected"; } ?>>WAN address</option>
<?php endif; ?>
@@ -753,11 +828,31 @@ include("head.inc");
<td>Type:&nbsp;&nbsp;</td>
<td>
<select name="dsttype" class="formselect" onChange="typesel_change()">
-<?php
- $sel = is_specialnet($pconfig['dst']); ?>
+ <?php
+ $sel_host = false;
+ $sel_v4 = false;
+ $sel_v6 = false;
+
+ $sel = is_specialnet($pconfig['src']);
+
+ if (is_ipaddr($pconfig['src']) && !$sel) {
+ if ($pconfig['dstmask'] == 32) {
+ $sel_host = true;
+ } else {
+ $sel_v4 = true;
+ }
+ } else if (Net_IPv6::checkIPv6($pconfig['src']) && !$sel) {
+ if ($pconfig['dstmask'] == 128) {
+ $sel_host = true;
+ } else {
+ $sel_v6 = true;
+ }
+ }
+ ?>
<option value="any" <?php if ($pconfig['dst'] == "any") { echo "selected"; } ?>>any</option>
- <option value="single" <?php if (($pconfig['dstmask'] == 32) && !$sel) { echo "selected"; $sel = 1; } ?>>Single host or alias</option>
- <option value="network" <?php if (!$sel) echo "selected"; ?>>Network</option>
+ <option value="single" <?php if ($sel_host) echo "selected"; ?>>Single host or alias</option>
+ <option value="network" <?php if ($sel_v4) echo "selected"; ?>>IPv4 Network</option>
+ <option value="network_ipv6" <?php if ($sel_v6) echo "selected"; ?>>IPv6 Network</option>
<?php if(have_ruleint_access("wan")): ?>
<option value="wanip" <?php if ($pconfig['dst'] == "wanip") { echo "selected"; } ?>>WAN address</option>
<?php endif; ?>
diff --git a/usr/local/www/interfaces.php b/usr/local/www/interfaces.php
index 498aa0f..2916857 100755
--- a/usr/local/www/interfaces.php
+++ b/usr/local/www/interfaces.php
@@ -40,7 +40,8 @@
##|*MATCH=interfaces.php*
##|-PRIV
-require("guiconfig.inc");
+require_once("guiconfig.inc");
+require_once("IPv6.inc");
if ($_REQUEST['if'])
$if = $_REQUEST['if'];
@@ -154,10 +155,14 @@ if ($if == "wan" || $if == "lan")
else
$pconfig['enable'] = isset($wancfg['enable']);
-if (is_array($config['aliases']['alias']))
-foreach($config['aliases']['alias'] as $alias)
- if($alias['name'] == $wancfg['descr'])
- $input_errors[] = gettext("Sorry, an alias with the name {$wancfg['descr']} already exists.");
+if (is_array($config['aliases']['alias'])) {
+ foreach($config['aliases']['alias'] as $alias) {
+ if($alias['name'] == $wancfg['descr']) {
+ $input_errors[] = gettext("Sorry, an alias with the name {$wancfg['descr']} already exists.");
+ }
+ }
+}
+
if ($wancfg['ipaddr'] == "dhcp") {
$pconfig['type'] = "dhcp";
} else if ($wancfg['ipaddr'] == "carpdev-dhcp") {
@@ -167,14 +172,25 @@ if ($wancfg['ipaddr'] == "dhcp") {
$pconfig['type'] = "pppoe";
} else if ($wancfg['ipaddr'] == "pptp") {
$pconfig['type'] = "pptp";
-} else if ($wancfg['ipaddr'] != "") {
- $pconfig['type'] = "static";
- $pconfig['ipaddr'] = $wancfg['ipaddr'];
- $pconfig['subnet'] = $wancfg['subnet'];
- $pconfig['gateway'] = $wancfg['gateway'];
- $pconfig['pointtopoint'] = $wancfg['pointtopoint'];
-} else
+} else if ($wancfg['ipaddr'] == "" && $wancfg['ipaddr_ipv6'] == "") {
$pconfig['type'] = "none";
+} else {
+ if ($wancfg['ipaddr'] != "") {
+ $pconfig['type'] = "static";
+ $pconfig['ipaddr'] = $wancfg['ipaddr'];
+ $pconfig['subnet'] = $wancfg['subnet'];
+ $pconfig['gateway'] = $wancfg['gateway'];
+ $pconfig['pointtopoint'] = $wancfg['pointtopoint'];
+ }
+
+ if ($wancfg['ipaddr_ipv6'] != "") {
+ $pconfig['type'] = "static";
+ $pconfig['ipaddr_ipv6'] = $wancfg['ipaddr_ipv6'];
+ $pconfig['subnet_ipv6'] = $wancfg['subnet_ipv6'];
+ $pconfig['gateway_ipv6'] = $wancfg['gateway_ipv6'];
+ $pconfig['pointtopoint_ipv6'] = $wancfg['pointtopoint_ipv6'];
+ }
+}
$pconfig['blockpriv'] = isset($wancfg['blockpriv']);
$pconfig['blockbogons'] = isset($wancfg['blockbogons']);
@@ -296,8 +312,16 @@ if ($_POST) {
}
/* input validation */
if ($_POST['type'] == "static") {
- $reqdfields = explode(" ", "ipaddr subnet gateway");
- $reqdfieldsn = explode(",", "IP address,Subnet bit count,Gateway");
+ if ($_POST['ipaddr'] != "") {
+ $reqdfields = explode(" ", "ipaddr subnet gateway");
+ $reqdfieldsn = explode(",", "IPv4 Address,IPv4 Subnet Bit Count,IPv4 Gateway");
+ } else if ($_POST['ipaddr_ipv6'] != "") {
+ $reqdfields = explode(" ", "ipaddr_ipv6 subnet_ipv6 gateway_ipv6");
+ $reqdfieldsn = explode(",", "IPv6 Address,IPv6 Subnet Bit Count,IPv6 Gateway");
+ } else {
+ $input_errors[] = "An IPv4 or IPv6 Address is required.";
+ }
+
do_input_validation($_POST, $reqdfields, $reqdfieldsn, &$input_errors);
} else if ($_POST['type'] == "PPPoE") {
if ($_POST['pppoe_dialondemand']) {
@@ -321,9 +345,13 @@ if ($_POST) {
/* normalize MAC addresses - lowercase and convert Windows-ized hyphenated MACs to colon delimited */
$_POST['spoofmac'] = strtolower(str_replace("-", ":", $_POST['spoofmac']));
if (($_POST['ipaddr'] && !is_ipaddr($_POST['ipaddr'])))
- $input_errors[] = "A valid IP address must be specified.";
+ $input_errors[] = "A valid IPv4 address must be specified.";
if (($_POST['subnet'] && !is_numeric($_POST['subnet'])))
- $input_errors[] = "A valid subnet bit count must be specified.";
+ $input_errors[] = "A valid IPv4 subnet bit count must be specified.";
+ if ($_POST['ipaddr_ipv6'] && !Net_IPv6::checkIPv6($_POST['ipaddr_ipv6']))
+ $input_errors[] = "A valid IPv6 address must be specified.";
+ if ($_POST['subnet_ipv6'] && !is_numeric($_POST['subnet_ipv6']))
+ $input_errors[] = "A valid IPv6 prefix length must be specified.";
if (($_POST['alias-address'] && !is_ipaddr($_POST['alias-address'])))
$input_errors[] = "A valid alias IP address must be specified.";
if (($_POST['alias-subnet'] && !is_numeric($_POST['alias-subnet'])))
@@ -337,7 +365,9 @@ if ($_POST) {
$input_errors[] = "A valid gateway must be specified.";
}
if (($_POST['pointtopoint'] && !is_ipaddr($_POST['pointtopoint'])))
- $input_errors[] = "A valid point-to-point IP address must be specified.";
+ $input_errors[] = "A valid IPv4 point-to-point address must be specified.";
+ if (($_POST['pointtopoint_ipv6'] && !is_ipaddr($_POST['pointtopoint_ipv6'])))
+ $input_errors[] = "A valid IPv6 point-to-point address must be specified.";
if (($_POST['provider'] && !is_domain($_POST['provider'])))
$input_errors[] = "The service name contains invalid characters.";
if (($_POST['pppoe_idletimeout'] != "") && !is_numericint($_POST['pppoe_idletimeout']))
@@ -408,6 +438,10 @@ if ($_POST) {
unset($wancfg['subnet']);
unset($wancfg['gateway']);
unset($wancfg['pointtopoint']);
+ unset($wancfg['ipaddr_ipv6']);
+ unset($wancfg['subnet_ipv6']);
+ unset($wancfg['gateway_ipv6']);
+ unset($wancfg['pointtopoint_ipv6']);
unset($wancfg['dhcphostname']);
unset($wancfg['pppoe_username']);
unset($wancfg['pppoe_password']);
@@ -433,10 +467,17 @@ if ($_POST) {
if ($_POST['type'] == "static") {
$wancfg['ipaddr'] = $_POST['ipaddr'];
$wancfg['subnet'] = $_POST['subnet'];
- if ($_POST['gateway'] != "none")
+ $wancfg['ipaddr_ipv6'] = $_POST['ipaddr_ipv6'];
+ $wancfg['subnet_ipv6'] = $_POST['subnet_ipv6'];
+
+ if ($_POST['gateway'] != "none") {
$wancfg['gateway'] = $_POST['gateway'];
- if (isset($wancfg['ispointtopoint']))
+ $wancfg['gateway_ipv6'] = $_POST['gateway_ipv6'];
+ }
+ if (isset($wancfg['ispointtopoint'])) {
$wancfg['pointtopoint'] = $_POST['pointtopoint'];
+ $wancfg['pointtopoint_ipv6'] = $_POST['pointtopoint_ipv6'];
+ }
} else if ($_POST['type'] == "dhcp") {
$wancfg['ipaddr'] = "dhcp";
$wancfg['dhcphostname'] = $_POST['dhcphostname'];
@@ -712,7 +753,7 @@ $types = array("none" => "None", "static" => "Static", "dhcp" => "DHCP", "pppoe"
else
$('allcfg').hide();
}
-
+
function show_periodic_reset(obj) {
if (obj.checked)
$('presetwrap').show();
@@ -822,7 +863,7 @@ $types = array("none" => "None", "static" => "Static", "dhcp" => "DHCP", "pppoe"
<td colspan="2" style="padding:0px;">
<table width="100%" border="0" cellpadding="6" cellspacing="0">
<tr>
- <td colspan="2" valign="top" class="listtopic">Static IP configuration</td>
+ <td colspan="2" valign="top" class="listtopic">Static IPv4 configuration</td>
</tr>
<tr>
<td width="22%" valign="top" class="vncellreq">IP address</td>
@@ -844,7 +885,7 @@ $types = array("none" => "None", "static" => "Static", "dhcp" => "DHCP", "pppoe"
</tr>
<?php if (isset($wancfg['ispointtopoint'])): ?>
<tr>
- <td width="22%" valign="top" class="vncellreq">Point-to-point IP address </td>
+ <td width="22%" valign="top" class="vncellreq">Point-to-point IPv4 address </td>
<td width"78%" class="vtable">
<input name="pointtopoint" type="text" class="formfld unknown" id="pointtopoint" size="20" value="<?=htmlspecialchars($pconfig['pointtopoint']);?>">
</td>
@@ -858,10 +899,10 @@ $types = array("none" => "None", "static" => "Static", "dhcp" => "DHCP", "pppoe"
<?php
if(count($a_gateways) > 0) {
foreach ($a_gateways as $gateway) {
- if($gateway['interface'] == $if) {
+ if($gateway['interface'] == $if && $gateway['type'] == 'IPv4') {
?>
<option value="<?=$gateway['name'];?>" <?php if ($gateway['name'] == $pconfig['gateway']) echo "selected"; ?>>
- <?=htmlspecialchars($gateway['name']);?>
+ <?=htmlspecialchars($gateway['name']);?>
</option>
<?php
}
@@ -917,10 +958,63 @@ $types = array("none" => "None", "static" => "Static", "dhcp" => "DHCP", "pppoe"
</table>
</td></tr></table>
<p/>
- </div>
- </td>
+ </div> </td>
</tr>
</table>
+
+ <!-- IPv6 begin -->
+ <tr>
+ <td colspan="2" valign="top" class="listtopic">Static IPv6 configuration</td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq">IP address</td>
+ <td width="78%" class="vtable"> <input name="ipaddr_ipv6" type="text" class="formfld unknown" id="ipaddr_ipv6" size="20" value="<?=htmlspecialchars($pconfig['ipaddr_ipv6']);?>">
+ /
+ <select name="subnet_ipv6" class="formselect" id="subnet_ipv6">
+ <?php
+ for ($i = 64; $i > 0; $i -= 4) {
+ if ($i == $pconfig['subnet_ipv6']) {
+ echo "<option value=\"$i\" selected=\"selected\">$i</option>";
+ } else {
+ echo "<option value=\"$i\">$i</option>";
+ }
+ }
+ ?>
+ </select>
+ </td>
+ </tr>
+ <?php if (isset($wancfg['ispointtopoint'])): ?>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq">Point-to-point IPv6 address </td>
+ <td width"78%" class="vtable">
+ <input name="pointtopoint_ipv6" type="text" class="formfld unknown" id="pointtopoint_ipv6" size="20" value="<?=htmlspecialchars($pconfig['pointtopoint_ipv6']);?>">
+ </td>
+ </tr><?php endif; ?>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq">Gateway</td>
+ <td width="78%" class="vtable"><select name="gateway_ipv6" class="formselect" id="gateway_ipv6">
+ <option value="none" selected>None</option>
+ <?php
+ if(count($a_gateways) > 0) {
+ foreach ($a_gateways as $gateway) {
+ if($gateway['interface'] == $if && $gateway['type'] == 'IPv6') {
+ ?>
+ <option value="<?=$gateway['name'];?>" <?php if ($gateway['name'] == $pconfig['gateway_ipv6']) echo "selected"; ?>>
+ <?=htmlspecialchars($gateway['name']);?>
+ </option>
+ <?php
+ }
+ }
+ }
+ ?>
+ </select>
+ <br />
+ Select a existing Gateway from the list or add one on the <a href="/system_gateways.php">Gateways</a> page<br />
+ TODO: use Ajax, similar to IPv4
+ </td>
+ </tr>
+ <!-- IPv6 end -->
+
</td>
</tr>
<tr style="display:none;" name="dhcp" id="dhcp">
diff --git a/usr/local/www/system.php b/usr/local/www/system.php
index fe466da..650c797 100755
--- a/usr/local/www/system.php
+++ b/usr/local/www/system.php
@@ -38,6 +38,7 @@
require("guiconfig.inc");
+require_once("IPv6.inc");
$pconfig['hostname'] = $config['system']['hostname'];
$pconfig['domain'] = $config['system']['domain'];
@@ -110,12 +111,25 @@ if ($_POST) {
if ($_POST['domain'] && !is_domain($_POST['domain'])) {
$input_errors[] = "The domain may only contain the characters a-z, 0-9, '-' and '.'.";
}
+ /*
if (($_POST['dns1'] && !is_ipaddr($_POST['dns1'])) || ($_POST['dns2'] && !is_ipaddr($_POST['dns2']))) {
$input_errors[] = "A valid IP address must be specified for the primary/secondary DNS server.";
}
if (($_POST['dns3'] && !is_ipaddr($_POST['dns3'])) || ($_POST['dns4'] && !is_ipaddr($_POST['dns4']))) {
$input_errors[] = "A valid IP address must be specified for the primary/secondary DNS server.";
}
+ */
+
+ if (
+ $_POST['dns1'] && !is_ipaddr($_POST['dns1']) && !Net_IPv6::checkIPv6($_POST['dns1']) ||
+ $_POST['dns2'] && !is_ipaddr($_POST['dns2']) && !Net_IPv6::checkIPv6($_POST['dns2']) ||
+ $_POST['dns3'] && !is_ipaddr($_POST['dns3']) && !Net_IPv6::checkIPv6($_POST['dns3']) ||
+ $_POST['dns4'] && !is_ipaddr($_POST['dns4']) && !Net_IPv6::checkIPv6($_POST['dns4'])
+ ) {
+ $input_errors[] = "A valid IPv4/IPv6 address must be specified for the primary/secondary DNS server.";
+ }
+
+
if ($_POST['webguiport'] && (!is_numericint($_POST['webguiport']) ||
($_POST['webguiport'] < 1) || ($_POST['webguiport'] > 65535))) {
$input_errors[] = "A valid TCP/IP port must be specified for the webConfigurator port.";
@@ -253,7 +267,7 @@ include("head.inc");
<td width="78%" class="vtable"> <input name="domain" type="text" class="formfld unknown" id="domain" size="40" value="<?=htmlspecialchars($pconfig['domain']);?>">
<br/>
<span class="vexpl">
- e.g. <em>mycorp.com</em>
+ e.g. <em>example.com</em>
</span>
</td>
</tr>
@@ -307,7 +321,7 @@ include("head.inc");
</table>
<br>
<span class="vexpl">
- IP addresses; these are also used for the DHCP
+ IPv4/IPv6 addresses; these are also used for the DHCP
service, DNS forwarder and for PPTP VPN clients.
<br/>
<?php if($multiwan): ?>
diff --git a/usr/local/www/system_gateways_edit.php b/usr/local/www/system_gateways_edit.php
index a8aa571..314b45d 100755
--- a/usr/local/www/system_gateways_edit.php
+++ b/usr/local/www/system_gateways_edit.php
@@ -38,17 +38,17 @@
require("guiconfig.inc");
+require_once("IPv6.inc");
$a_gateways = return_gateways_array();
-$a_gateways_arr = array();
-foreach($a_gateways as $gw) {
- $a_gateways_arr[] = $gw;
-}
-$a_gateways = $a_gateways_arr;
-$id = $_GET['id'];
-if (isset($_POST['id']))
+if (isset($_GET['id'])) {
+ $id = $_GET['id'];
+} else if (isset($_POST['id'])) {
$id = $_POST['id'];
+} else {
+ $id = -1;
+}
if (isset($_GET['dup'])) {
$id = $_GET['dup'];
@@ -62,6 +62,7 @@ if (isset($id) && $a_gateways[$id]) {
$pconfig['monitor'] = $a_gateways[$id]['monitor'];
$pconfig['descr'] = $a_gateways[$id]['descr'];
$pconfig['attribute'] = $a_gateways[$id]['attribute'];
+ $pconfig['type'] = $a_gateways[$id]['type'];
}
if (isset($_GET['dup'])) {
@@ -80,15 +81,33 @@ if ($_POST) {
do_input_validation($_POST, $reqdfields, $reqdfieldsn, &$input_errors);
+ /* Does this gateway name already exist? */
+ foreach($config['gateways']['gateway_item'] as $gw)
+ if($gw['name'] == $_POST['name'])
+ $input_errors[] = "This gateway name already exists.";
+
if (! isset($_POST['name'])) {
$input_errors[] = "A valid gateway name must be specified.";
}
- /* skip system gateways which have been automatically added */
- if ($_POST['gateway'] && (!is_ipaddr($_POST['gateway'])) && ($pconfig['attribute'] != "system")) {
- $input_errors[] = "A valid gateway IP address must be specified.";
- }
- if ((($_POST['monitor'] <> "") && !is_ipaddr($_POST['monitor']))) {
- $input_errors[] = "A valid monitor IP address must be specified.";
+
+ if ($_POST['type'] == 'IPv4') {
+ if (!is_ipaddr($_POST['gateway']) && $pconfig['attribute'] != 'system') {
+ $input_errors[] = "A valid IPv4 gateway address must be specified.";
+ }
+
+ if ($_POST['monitor'] && !is_ipaddr($_POST['monitor'])) {
+ $input_errors[] = "A valid IPv4 monitor address must be specified.";
+ }
+ } else if ($_POST['type'] == 'IPv6') {
+ if (!Net_IPv6::checkIPv6($_POST['gateway']) && $pconfig['attribute'] != 'system') {
+ $input_errors[] = "A valid IPv6 gateway address must be specified.";
+ }
+
+ if ($_POST['monitor'] && !Net_IPv6::checkIPv6($_POST['monitor'])) {
+ $input_errors[] = "A valid IPv6 monitor address must be specified.";
+ }
+ } else {
+ $input_errors[] = "A network type must be specified.";
}
/* check for overlaps */
@@ -129,16 +148,18 @@ if ($_POST) {
$gateway['name'] = $_POST['name'];
$gateway['gateway'] = $_POST['gateway'];
$gateway['descr'] = $_POST['descr'];
+ $gateway['type'] = $_POST['type'];
if ($_POST['defaultgw'] == "yes") {
- $i = 0;
- foreach($a_gateways as $gw) {
- unset($config['gateways'][$i]['defaultgw']);
+ $i=0;
+ foreach ($a_gateways as $gateway) {
+ if($id != $i && $config['gateways']['gateway_item'][$i]['type'] == $_POST['type']) {
+ unset($config['gateways']['gateway_item'][$i]['defaultgw']);
+ } else if ($config['gateways']['gateway_item'][$i]['type'] == $_POST['type']) {
+ $config['gateways']['gateway_item'][$i]['defaultgw'] = true;
+ }
$i++;
}
- $gateway['defaultgw'] = true;
- } else {
- unset($gateway['defaultgw']);
}
/* when saving the manual gateway we use the attribute which has the corresponding id */
@@ -211,10 +232,32 @@ include("head.inc");
<br> <span class="vexpl">Gateway name</span></td>
</tr>
<tr>
+ <td width="22%" valign="top" class="vncellreq">Type</td>
+ <td width="78%" class="vtable">
+ <select name="type" class="formselect">
+ <?php
+ if ($pconfig['type'] == 'IPv6') {
+ $str = <<<EOD
+ <option value="IPv4">IPv4</option>
+ <option value="IPv6" selected>IPv6</option>
+EOD;
+ } else {
+ $str = <<<EOD
+ <option value="IPv4" selected>IPv4</option>
+ <option value="IPv6">IPv6</option>
+EOD;
+ }
+
+ echo $str;
+ ?>
+ </select>
+ </td>
+ </tr>
+ <tr>
<td width="22%" valign="top" class="vncellreq">Gateway</td>
<td width="78%" class="vtable">
<input name="gateway" type="text" class="formfld host" id="gateway" size="40" value="<?=htmlspecialchars($pconfig['gateway']);?>">
- <br> <span class="vexpl">Gateway IP address</span></td>
+ <br> <span class="vexpl">Gateway IPv4/IPv6 address</span></td>
</tr>
<tr>
<td width="22%" valign="top" class="vncell">Default Gateway</td>
@@ -229,7 +272,7 @@ include("head.inc");
<td width="78%" class="vtable">
<input name="monitor" type="text" id="monitor" value="<?php echo ($pconfig['monitor']) ; ?>" />
<strong>Alternative monitor IP</strong> <br />
- Enter a alternative address here to be used to monitor the link. This is used for the
+ Enter an alternative address here to be used to monitor the link. This is used for the
quality RRD graphs as well as the load balancer entries. Use this if the gateway does not respond
to icmp requests.</strong>
<br />
OpenPOWER on IntegriCloud