summaryrefslogtreecommitdiffstats
path: root/etc/inc/gwlb.inc
diff options
context:
space:
mode:
authorSeth Mos <seth.mos@dds.nl>2011-08-25 22:55:12 +0200
committerSeth Mos <seth.mos@dds.nl>2011-08-25 22:56:40 +0200
commitc3a0d2a5b1a675ae688fc84635d8825b850ee37d (patch)
treed583746928f9862222a97fffaee83ede9a9c09e0 /etc/inc/gwlb.inc
parent107f0cc8cefd341bc686088aa3eb2b73c78c7eb0 (diff)
downloadpfsense-c3a0d2a5b1a675ae688fc84635d8825b850ee37d.zip
pfsense-c3a0d2a5b1a675ae688fc84635d8825b850ee37d.tar.gz
Automatically pick up on dynamic IPv6 interfaces. For Example dhcp6.
Diffstat (limited to 'etc/inc/gwlb.inc')
-rw-r--r--etc/inc/gwlb.inc63
1 files changed, 56 insertions, 7 deletions
diff --git a/etc/inc/gwlb.inc b/etc/inc/gwlb.inc
index 7cbb29d..6e87b31 100644
--- a/etc/inc/gwlb.inc
+++ b/etc/inc/gwlb.inc
@@ -321,7 +321,7 @@ function return_gateways_array($disabled = false) {
else
$iflist = get_configured_interface_with_descr(false, true);
- /* Process/add dynamic gateways. */
+ /* Process/add dynamic v4 gateways. */
foreach($iflist as $ifname => $friendly ) {
if(! interface_has_gateway($ifname))
continue;
@@ -330,11 +330,12 @@ function return_gateways_array($disabled = false) {
continue;
$ifcfg = &$config['interfaces'][$ifname];
- if (!empty($ifcfg['ipaddr']) && is_ipaddr($ifcfg['ipaddr']))
+ if(!empty($ifcfg['ipaddr']) && is_ipaddrv4($ifcfg['ipaddr']))
continue;
$gateway = array();
$gateway['dynamic'] = false;
+ $gateway['ipprotocol'] = "inet";
$gateway['gateway'] = get_interface_gateway($ifname, $gateway['dynamic']);
$gateway['interface'] = get_real_interface($ifname);
$gateway['friendlyiface'] = $ifname;
@@ -346,21 +347,69 @@ function return_gateways_array($disabled = false) {
$gateway['dynamic'] = true;
}
/* Loopback dummy for dynamic interfaces without a IP */
- if (!is_ipaddr($gateway['gateway']) && $gateway['dynamic'] == true)
+ if (!is_ipaddrv4($gateway['gateway']) && $gateway['dynamic'] == true)
$gateway['gateway'] = "dynamic";
/* automatically skip known static and dynamic gateways we have a array entry for */
foreach($gateways_arr as $gateway_item) {
- if (($ifname == $gateway_item['friendlyiface'] && $friendly == $gateway_item['name']) ||
- ($ifname == $gateway_item['friendlyiface'] && $gateway_item['dynamic'] == true))
+ if ((($ifname == $gateway_item['friendlyiface'] && $friendly == $gateway_item['name'])&& ($gateway['ipprotocol'] == $gateway_item['ipprotocol'])) ||
+ ($ifname == $gateway_item['friendlyiface'] && $gateway_item['dynamic'] == true) && ($gateway['ipprotocol'] == $gateway_item['ipprotocol']))
continue 2;
}
- if (is_ipaddr($gateway['gateway']))
+ if (is_ipaddrv4($gateway['gateway']))
$gateway['monitor'] = $gateway['gateway'];
$gateway['descr'] = "Interface {$friendly} Dynamic Gateway";
- $gateways_arr[$friendly] = $gateway;
+ $gateways_arr[$gateway['name']] = $gateway;
+ }
+
+ /* Process/add dynamic v6 gateways. */
+ foreach($iflist as $ifname => $friendly ) {
+ if(! interface_has_gateway($ifname))
+ continue;
+
+ if (empty($config['interfaces'][$ifname]))
+ continue;
+
+ $ifcfg = &$config['interfaces'][$ifname];
+ if(!empty($ifcfg['ipaddrv6']) && is_ipaddrv6($ifcfg['ipaddrv6']))
+ continue;
+
+ echo "found dynamic v6 interface $ifname\n";
+
+ $gateway = array();
+ $gateway['dynamic'] = false;
+ $gateway['ipprotocol'] = "inet6";
+ $gateway['gateway'] = get_interface_gateway_v6($ifname, $gateway['dynamic']);
+ $gateway['interface'] = get_real_interface($ifname);
+ $gateway['friendlyiface'] = $ifname;
+ $gateway['name'] = "{$friendly}_v6";
+ $gateway['attribute'] = "system";
+
+ if ($gateway['dynamic'] === "default") {
+ $gateway['defaultgw'] = true;
+ $gateway['dynamic'] = true;
+ }
+
+ /* Loopback dummy for dynamic interfaces without a IP */
+ if (!is_ipaddrv6($gateway['gateway']) && $gateway['dynamic'] == true)
+ $gateway['gateway'] = "dynamic";
+
+ /* automatically skip known static and dynamic gateways we have a array entry for */
+ foreach($gateways_arr as $gateway_item) {
+ if ((($ifname == $gateway_item['friendlyiface'] && $friendly == $gateway_item['name']) && ($gateway['ipprotocol'] == $gateway_item['ipprotocol'])) ||
+ ($ifname == $gateway_item['friendlyiface'] && $gateway_item['dynamic'] == true) && ($gateway['ipprotocol'] == $gateway_item['ipprotocol']))
+ continue 2;
+ }
+ print_r($gateway);
+
+
+ if (is_ipaddrv6($gateway['gateway']))
+ $gateway['monitor'] = $gateway['gateway'];
+
+ $gateway['descr'] = "Interface {$friendly} Dynamic Gateway";
+ $gateways_arr[$gateway['name']] = $gateway;
}
return($gateways_arr);
OpenPOWER on IntegriCloud