summaryrefslogtreecommitdiffstats
path: root/etc
diff options
context:
space:
mode:
Diffstat (limited to 'etc')
-rw-r--r--etc/inc/interfaces.inc108
1 files changed, 83 insertions, 25 deletions
diff --git a/etc/inc/interfaces.inc b/etc/inc/interfaces.inc
index 796bd1c..e131df0 100644
--- a/etc/inc/interfaces.inc
+++ b/etc/inc/interfaces.inc
@@ -1,5 +1,5 @@
<?php
-/* $Id: interfaces.inc,v 1.176.2.288 2008/12/08 13:51:38 ermal Exp $ */
+/* $Id$ */
/*
interfaces.inc
Copyright (C) 2004-2008 Scott Ullrich
@@ -51,6 +51,7 @@ function interfaces_bring_up($interface) {
function interfaces_loopback_configure() {
mwexec("/sbin/ifconfig lo0 127.0.0.1");
+ mwexec("/sbin/ifconfig lo0 inet6 ::1 prefixlen 128");
interfaces_bring_up("lo0");
return 0;
}
@@ -337,7 +338,6 @@ function interface_lagg_configure(&$lagg) {
} else
$laggif = exec("/sbin/ifconfig lagg create");
- mwexec("/sbin/ifconfig {$laggif} {$lagg['proto']}");
/* Calculate smaller mtu and enforce it */
$smallermtu = 0;
@@ -357,7 +357,7 @@ function interface_lagg_configure(&$lagg) {
foreach ($members as $member) {
if (!array_key_exists($member, $checklist))
continue;
- $realif = escapeshellarg($member);
+ $realif = get_real_interface($member);
/* make sure the parent interface is up */
mwexec("/sbin/ifconfig {$realif} mtu {$smallermtu}");
if($realif)
@@ -367,6 +367,8 @@ function interface_lagg_configure(&$lagg) {
mwexec("/sbin/ifconfig {laggif} laggport {$realif}");
}
+ mwexec("/sbin/ifconfig {$laggif} {$lagg['proto']}");
+
interfaces_bring_up($laggif);
return $laggif;
@@ -485,12 +487,12 @@ function interface_gif_configure(&$gif) {
function interfaces_configure() {
global $config, $g;
- /* set up VLAN virtual interfaces */
- interfaces_vlan_configure();
-
/* set up LAGG virtual interfaces */
interfaces_lagg_configure();
+ /* set up VLAN virtual interfaces */
+ interfaces_vlan_configure();
+
/* Set up PPP interfaces */
interfaces_ppp_configure();
@@ -970,7 +972,8 @@ EOD;
}
-function interfaces_ipalias_configure() {
+function interfaces_ipalias_configure()
+{
global $g, $config;
if(isset($config['system']['developerspew'])) {
$mt = microtime();
@@ -981,7 +984,11 @@ function interfaces_ipalias_configure() {
foreach ($viparr as $vip) {
if ($vip['mode'] == "ipalias") {
$if = get_real_interface($vip['interface']);
- mwexec("/sbin/ifconfig " . escapeshellarg($if) . " " . $vip['subnet'] . "/" . escapeshellarg($vip['subnet_bits']) . " alias");
+ if ($vip['subnet_ipv6'] != '') {
+ mwexec("/sbin/ifconfig " . escapeshellarg($if) . " inet6 {$vip['subnet_ipv6']} alias");
+ } else {
+ mwexec("/sbin/ifconfig " . escapeshellarg($if) . " " . $vip['subnet'] . "/" . escapeshellarg($vip['subnet_bits']) . " alias");
+ }
}
}
}
@@ -1258,12 +1265,21 @@ function interface_configure($interface = "wan") {
$realif = get_real_interface($interface);
- if(!$g['booting']) {
- /* remove all addresses first */
+ if (!$g['booting']) {
+ /* remove all IPv4 addresses */
while (mwexec("/sbin/ifconfig " . escapeshellarg($realif) . " -alias", true) == 0);
interface_bring_down($interface);
+
+ /* remove all IPv6 addresses */
+ $str = <<<EOD
+ while i="`/sbin/ifconfig $realif | /usr/bin/grep inet6 | /usr/bin/grep -m 1 -v '%'`"; do
+ ifconfig $realif \$i delete
+ done
+EOD;
+ mwexec("($str)");
mwexec("/sbin/ifconfig " . escapeshellarg($wancfg['if']) . " down");
- }
+ }
+
/* wireless configuration? */
if (is_array($wancfg['wireless']))
interface_wireless_configure($realif, $wancfg['wireless']);
@@ -1326,15 +1342,32 @@ function interface_configure($interface = "wan") {
escapeshellarg($wancfg['ipaddr'] . "/" . $wancfg['subnet']) .
" " . escapeshellarg($wancfg['pointtopoint']) . " up");
} else {
- if($wancfg['ipaddr'] && $wancfg['subnet'])
+ if($wancfg['ipaddr'] && $wancfg['subnet']) {
mwexec("/sbin/ifconfig " . escapeshellarg($realif) .
" " . escapeshellarg($wancfg['ipaddr'] . "/" .
$wancfg['subnet']));
+ }
}
}
- if (is_ipaddr($wancfg['gateway']))
+ if ($wancfg['ipaddr_ipv6'] <> "" && $wancfg['subnet_ipv6'] <> "") {
+ if (isset($wancfg['ispointtopoint_ipv6']) && $wancfg['pointtopoint_ipv6']) {
+ // TODO: do something
+ } else {
+ mwexec("/sbin/ifconfig " . escapeshellarg($realif) .
+ " inet6 " . escapeshellarg($wancfg['ipaddr_ipv6'] . "/" .
+ $wancfg['subnet_ipv6']));
+ }
+ }
+
+ if (is_ipaddr($wancfg['gateway'])) {
file_put_contents("/tmp/{$realif}_router", $wancfg['gateway']);
+ }
+
+ if (Net_IPv6::checkIPv6($wancfg['gateway_ipv6'])) {
+ // TODO: IPv6 needs to be configured too
+ file_put_contents("/tmp/{$realif}_router_ipv6", $wancfg['gateway_ipv6']);
+ }
}
if($wancfg['if'])
interfaces_bring_up($wancfg['if']);
@@ -1502,6 +1535,10 @@ pppoeclient:
EOD;
+ /*
+ * XXX: mpd seems to use netgraph interfaces so ngX interfaces are created
+ * instead of pppoeX. =) -simoncpu-
+ */
if ($interface == "wan")
$realif = "pppoe0";
else {
@@ -1701,8 +1738,8 @@ EOD;
$mpdconf .= <<<EOD
set bundle disable multilink
- set bundle authname "{$wancfg['pptp_username']}"
- set bundle password "{$wancfg['pptp_password']}"
+ set auth authname "{$wancfg['pptp_username']}"
+ set auth password "{$wancfg['pptp_password']}"
set bundle no noretry
set link keep-alive 10 60
set link max-redial 0
@@ -1774,6 +1811,9 @@ function get_real_interface($interface = "wan") {
$wanif = $interface;
switch ($interface) {
+ case "l2tp":
+ $wanif = "l2tp";
+ break;
case "pptp":
$wanif = "pptp";
break;
@@ -1816,6 +1856,10 @@ function get_real_interface($interface = "wan") {
}
break;
case "pppoe":
+ /*
+ * XXX: mpd seems to use netgraph interfaces so ngX interfaces are created
+ * instead of pppoeX. =) -simoncpu-
+ */
if ($if == "wan")
$wanif = "pppoe0";
else
@@ -1841,28 +1885,42 @@ function get_real_interface($interface = "wan") {
return $wanif;
}
-function get_interface_ip($interface = "wan") {
+function get_interface_ip($interface = "wan", $type = "ipv4")
+{
+ global $config, $g;
+
$realif = get_real_interface($interface);
/* Do we really come here for these interfaces ?! */
- if (in_array($realif, array("pptp", "pppoe", "openvpn", "enc0" /* , "ppp" */)))
+ if (in_array($realif, array("pptp", "pppoe", "l2tp", "openvpn", "enc0" /* , "ppp" */)))
return "";
- $curip = find_interface_ip($realif);
- if ($curip && is_ipaddr($curip) && ($curip != "0.0.0.0"))
- return $curip;
+ $curip = find_interface_ip($realif, false, $type);
+
+ if ($type == 'ipv6') {
+ if ($curip && Net_IPv6::checkIPv6($curip)) {
+ return $curip;
+ }
+ } else {
+ if ($curip && is_ipaddr($curip) && ($curip != "0.0.0.0")) {
+ return $curip;
+ }
+ }
return null;
}
-function get_interface_subnet($interface = "wan") {
+function get_interface_subnet($interface = "wan", $type = "ipv4")
+{
$realif = get_real_interface($interface);
/* Do we really come here for these interfaces ?! */
- if (in_array($realif, array("pptp", "pppoe", "openvpn", "enc0" /* , "ppp" */)))
+ if (in_array($realif, array("pptp", "pppoe", "openvpn", "enc0" /* , "ppp" */))) {
return "";
+ }
- $cursn = find_interface_subnet($realif);
- if (!empty($cursn))
+ $cursn = find_interface_subnet($realif, false, $type);
+ if (!empty($cursn)) {
return $cursn;
+ }
return null;
}
@@ -1953,4 +2011,4 @@ function setup_pppoe_reset_file($interface, $status) {
}
}
-?> \ No newline at end of file
+?>
OpenPOWER on IntegriCloud