From 58ffdc168462f1e58a27df11f663f574fb35aea6 Mon Sep 17 00:00:00 2001 From: Franco Fichtner Date: Tue, 21 Feb 2023 12:03:22 +0100 Subject: [PATCH] interfaces: force renew for IPv6 --- src/etc/inc/interfaces.inc | 6 +++++- src/etc/rc.newwanipv6 | 7 ++++--- src/opnsense/scripts/interfaces/ppp-linkup.sh | 2 +- src/opnsense/service/conf/actions.d/actions_interface.conf | 4 ++-- 4 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/etc/inc/interfaces.inc b/src/etc/inc/interfaces.inc index b6363b015..c3de6292e 100644 --- a/src/etc/inc/interfaces.inc +++ b/src/etc/inc/interfaces.inc @@ -2800,7 +2800,11 @@ INFOREQ|REQUEST) done /usr/local/sbin/ifctl -i ${wanif} -6sd \${ARGS} /usr/local/sbin/ifctl -i ${wanif} -6pd \${PDINFO:+"-a \${PDINFO}"} - /usr/local/sbin/configctl -d interface newipv6 {$wanif} + FORCE= + if [ \${REASON} = "REQUEST" ]; then + FORCE=force + fi + /usr/local/sbin/configctl -d interface newipv6 {$wanif} \${FORCE} ;; EXIT|RELEASE) /usr/bin/logger -t dhcp6c "dhcp6c \$REASON on {$wanif} - running newipv6" diff --git a/src/etc/rc.newwanipv6 b/src/etc/rc.newwanipv6 index 74dfad2ac..19452c4b5 100755 --- a/src/etc/rc.newwanipv6 +++ b/src/etc/rc.newwanipv6 @@ -38,6 +38,7 @@ require_once("system.inc"); require_once("interfaces.inc"); $argument = isset($argv[1]) ? trim($argv[1]) : ''; +$force = !empty($argv[2]) ? 'yes' : 'no'; exit_on_bootup(function ($argument) { log_msg("IP renewal deferred during boot on '{$argument}'"); @@ -82,12 +83,12 @@ system_resolvconf_generate(); system_hosts_generate(); $cacheip = trim(@file_get_contents($cacheip_file)); -if ($ip == $cacheip) { +if ($force == 'no' && $ip == $cacheip) { log_msg("No IP change detected for {$interface_descr}[{$interface}]", LOG_INFO); return; } -log_msg("IP renwal starting (new: {$ip}, old: ${cacheip}, interface: {$interface_descr}[{$interface}], device: {$device})"); +log_msg("IP renwal starting (new: {$ip}, old: ${cacheip}, interface: {$interface_descr}[{$interface}], device: {$device}, force: {$force})"); interfaces_vips_configure($interface, 6); @@ -101,7 +102,7 @@ $interfaces = array_keys(link_interface_to_track6($interface, true)); array_unshift($interfaces, $interface); foreach ($interfaces as $interface) { - system_routing_configure(false, $interface); + system_routing_configure(false, $interface, true, 'inet6'); } filter_configure_sync(); diff --git a/src/opnsense/scripts/interfaces/ppp-linkup.sh b/src/opnsense/scripts/interfaces/ppp-linkup.sh index 198bdfda8..95fe99df6 100755 --- a/src/opnsense/scripts/interfaces/ppp-linkup.sh +++ b/src/opnsense/scripts/interfaces/ppp-linkup.sh @@ -25,7 +25,7 @@ if [ "${2}" = "inet" ]; then elif [ "${2}" = "inet6" ]; then /usr/local/sbin/ifctl -i ${1} -6nd ${DNS1} ${DNS2} /usr/local/sbin/ifctl -i ${1} -6rd ${ROUTER} - /usr/local/sbin/configctl -d interface newipv6 ${1} + /usr/local/sbin/configctl -d interface newipv6 ${1} force fi touch /tmp/${1}_uptime diff --git a/src/opnsense/service/conf/actions.d/actions_interface.conf b/src/opnsense/service/conf/actions.d/actions_interface.conf index bbe3fa46e..0c53bd9d2 100644 --- a/src/opnsense/service/conf/actions.d/actions_interface.conf +++ b/src/opnsense/service/conf/actions.d/actions_interface.conf @@ -13,9 +13,9 @@ message:New IPv4 on %s %s [newipv6] command:/usr/local/etc/rc.newwanipv6 -parameters:%s +parameters:%s %s type:script -message:New IPv6 on %s +message:New IPv6 on %s %s [linkup.start] command:/usr/local/etc/rc.linkup