summaryrefslogtreecommitdiff
path: root/src/migration-scripts
diff options
context:
space:
mode:
authorDaniil Baturin <daniil@vyos.io>2025-09-16 15:27:30 +0100
committerGitHub <noreply@github.com>2025-09-16 15:27:30 +0100
commit0687b1a039dc1766ccd463f67c997c94e7683b1f (patch)
tree380b038a7142047f1bdac9ee5f44ee3adab433a8 /src/migration-scripts
parent3f58d529d6829df1750ec81d6161c02cc2529107 (diff)
parentf08a5700e725a2ed4c53320b310167826953215d (diff)
downloadvyos-1x-0687b1a039dc1766ccd463f67c997c94e7683b1f.tar.gz
vyos-1x-0687b1a039dc1766ccd463f67c997c94e7683b1f.zip
Merge pull request #4717 from c-po/no-ipv6-default-route
dhcpv6: T7646: restore missing default route after upgrade
Diffstat (limited to 'src/migration-scripts')
-rw-r--r--src/migration-scripts/interfaces/32-to-3351
-rw-r--r--src/migration-scripts/interfaces/33-to-3440
2 files changed, 72 insertions, 19 deletions
diff --git a/src/migration-scripts/interfaces/32-to-33 b/src/migration-scripts/interfaces/32-to-33
index ccda04d0c..af7b7f497 100644
--- a/src/migration-scripts/interfaces/32-to-33
+++ b/src/migration-scripts/interfaces/32-to-33
@@ -13,28 +13,41 @@
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-#
-# T6318: WiFi country-code should be set system-wide instead of per-device
-from vyos.configtree import ConfigTree
+# T7646: restore behavior of IPv6 default route if only dhcpv6 was defined but
+# not "ipv6 address autoconf"
-base = ['interfaces', 'wireless']
+from vyos.configtree import ConfigTree
def migrate(config: ConfigTree) -> None:
- if not config.exists(base):
- # Nothing to do
- return
+ for type in config.list_nodes(['interfaces']):
+ for interface in config.list_nodes(['interfaces', type]):
+ iface_base_path = ['interfaces', type, interface]
+ dhcpv6_addr_path = iface_base_path + ['address', 'dhcpv6']
+ autoconf_path = iface_base_path + ['ipv6', 'address', 'autoconf']
+ if config.exists(dhcpv6_addr_path) and not config.exists(autoconf_path):
+ config.set(autoconf_path)
+
+ vif_path = iface_base_path + ['vif']
+ if config.exists(vif_path):
+ for vif in config.list_nodes(vif_path):
+ vif_dhcpv6_addr_path = vif_path + [vif, 'address']
+ vif_autoconf_path = vif_path + [vif, 'ipv6', 'address', 'autoconf']
+ if config.exists(vif_dhcpv6_addr_path) and not config.exists(vif_autoconf_path):
+ config.set(vif_autoconf_path)
- installed = False
- for interface in config.list_nodes(base):
- cc_path = base + [interface, 'country-code']
- if config.exists(cc_path):
- tmp = config.return_value(cc_path)
- config.delete(cc_path)
+ vif_s_path = iface_base_path + ['vif-s']
+ if config.exists(vif_s_path):
+ for vif_s in config.list_nodes(vif_s_path):
+ vif_s_dhcpv6_addr_path = vif_s_path + [vif_s, 'address']
+ vif_s_autoconf_path = vif_s_path + [vif_s, 'ipv6', 'address', 'autoconf']
+ if config.exists(vif_s_dhcpv6_addr_path) and not config.exists(vif_s_autoconf_path):
+ config.set(vif_s_autoconf_path)
- # There can be only ONE wireless country-code per device, everything
- # else makes no sense as a WIFI router can not operate in two
- # different countries
- if not installed:
- config.set(['system', 'wireless', 'country-code'], value=tmp)
- installed = True
+ vif_c_path = iface_base_path + ['vif-s', vif_s, 'vif-c']
+ if config.exists(vif_c_path):
+ for vif_c in config.list_nodes(vif_c_path):
+ vif_c_dhcpv6_addr_path = vif_c_path + [vif_c, 'address']
+ vif_c_autoconf_path = vif_c_path + [vif_c, 'ipv6', 'address', 'autoconf']
+ if config.exists(vif_c_dhcpv6_addr_path) and not config.exists(vif_c_autoconf_path):
+ config.set(vif_c_autoconf_path)
diff --git a/src/migration-scripts/interfaces/33-to-34 b/src/migration-scripts/interfaces/33-to-34
new file mode 100644
index 000000000..ccda04d0c
--- /dev/null
+++ b/src/migration-scripts/interfaces/33-to-34
@@ -0,0 +1,40 @@
+#!/usr/bin/env python3
+#
+# Copyright VyOS maintainers and contributors <maintainers@vyos.io>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 2 or later as
+# published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+# T6318: WiFi country-code should be set system-wide instead of per-device
+
+from vyos.configtree import ConfigTree
+
+base = ['interfaces', 'wireless']
+
+def migrate(config: ConfigTree) -> None:
+ if not config.exists(base):
+ # Nothing to do
+ return
+
+ installed = False
+ for interface in config.list_nodes(base):
+ cc_path = base + [interface, 'country-code']
+ if config.exists(cc_path):
+ tmp = config.return_value(cc_path)
+ config.delete(cc_path)
+
+ # There can be only ONE wireless country-code per device, everything
+ # else makes no sense as a WIFI router can not operate in two
+ # different countries
+ if not installed:
+ config.set(['system', 'wireless', 'country-code'], value=tmp)
+ installed = True