From eada2bf5a1836461b7854bb57337b62a1f43deda Mon Sep 17 00:00:00 2001 From: Franco Fichtner Date: Wed, 24 Oct 2018 09:23:13 +0000 Subject: [PATCH] interfaces: override link-local tracking router address if needed PR: https://forum.opnsense.org/index.php?topic=10034.0 --- src/etc/inc/interfaces.inc | 4 +++- src/www/interfaces.php | 16 +++++++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/etc/inc/interfaces.inc b/src/etc/inc/interfaces.inc index 7339c294f..677bcd537 100644 --- a/src/etc/inc/interfaces.inc +++ b/src/etc/inc/interfaces.inc @@ -2577,6 +2577,8 @@ function interface_track6_configure($interface = 'lan', $lancfg, $linkupevent = return; } + $lladdr = !empty($lancfg['track6-lladdr']) ? $lancfg['track6-lladdr'] : 'fe80::1:1'; + $realif = get_real_interface($interface, 'inet6'); /* always configure a fixed link-local on the track6 interfaces */ @@ -2584,7 +2586,7 @@ function interface_track6_configure($interface = 'lan', $lancfg, $linkupevent = if (!empty($linklocal)) { mwexecf('/sbin/ifconfig %s inet6 %s delete', array($realif, $linklocal)); } - mwexecf('/sbin/ifconfig %s inet6 %s', array($realif, "fe80::1:1%{$realif}")); + mwexecf('/sbin/ifconfig %s inet6 %s', array($realif, "{$lladdr}%{$realif}")); switch ($trackcfg['ipaddrv6']) { case '6to4': diff --git a/src/www/interfaces.php b/src/www/interfaces.php index a6daf4b4b..b707967b9 100644 --- a/src/www/interfaces.php +++ b/src/www/interfaces.php @@ -426,6 +426,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'GET') { 'subnet', 'subnetv6', 'track6-interface', + 'track6-lladdr', 'track6-prefix-id', 'rfc3118_isp', 'rfc3118_username', @@ -445,7 +446,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'GET') { $pconfig['dhcp6usev4iface'] = isset($a_interfaces[$if]['dhcp6usev4iface']); $pconfig['dhcp6norelease'] = isset($a_interfaces[$if]['dhcp6norelease']); $pconfig['adv_dhcp6_debug'] = isset($a_interfaces[$if]['adv_dhcp6_debug']); - $pconfig['track6-prefix-id--hex'] = sprintf("%x", empty($pconfig['track6-prefix-id']) ? 0 :$pconfig['track6-prefix-id']); + $pconfig['track6-prefix-id--hex'] = sprintf("%x", empty($pconfig['track6-prefix-id']) ? 0 : $pconfig['track6-prefix-id']); $pconfig['dhcpd6track6allowoverride'] = isset($a_interfaces[$if]['dhcpd6track6allowoverride']); /* @@ -794,6 +795,9 @@ if ($_SERVER['REQUEST_METHOD'] === 'GET') { } /* XXX should also check for duplicate delegation in peer trackers */ } + if (!empty($pconfig['track6-lladdr']) && (!is_ipaddrv6($pconfig['track6-lladdr']) || !is_linklocal($pconfig['track6-lladdr']))) { + $input_errors[] = gettext('A valid link-local tracking router address must be specified.'); + } break; } @@ -1222,6 +1226,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'GET') { case 'track6': $new_config['ipaddrv6'] = 'track6'; $new_config['track6-interface'] = $pconfig['track6-interface']; + $new_config['track6-lladdr'] = $pconfig['track6-lladdr']; $new_config['track6-prefix-id'] = 0; if (ctype_xdigit($pconfig['track6-prefix-id--hex'])) { $new_config['track6-prefix-id'] = intval($pconfig['track6-prefix-id--hex'], 16); @@ -3022,6 +3027,15 @@ include("head.inc"); + + + + + + +