From 7065d0c4fe08b094aaf0970dc12a2045f5b80c86 Mon Sep 17 00:00:00 2001 From: Christian Poessinger Date: Sun, 13 Jun 2021 13:17:02 +0200 Subject: wwan: T3620: reorder mirgation scripts for 1.3 backport As the new WWAN interface style is backported to VyOS 1.3 we also need to shift the order of the interface migration scripts. so the same order from VyOS 1.4 also applies to VyOS 1.3. In short, 21-to-22 is renamed to 18-to-19 and all other migrators are shifted up one version. --- src/migration-scripts/interfaces/21-to-22 | 97 ++++++++----------------------- 1 file changed, 25 insertions(+), 72 deletions(-) (limited to 'src/migration-scripts/interfaces/21-to-22') diff --git a/src/migration-scripts/interfaces/21-to-22 b/src/migration-scripts/interfaces/21-to-22 index a12c4a6cd..d1ec2ad3e 100755 --- a/src/migration-scripts/interfaces/21-to-22 +++ b/src/migration-scripts/interfaces/21-to-22 @@ -14,94 +14,47 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -import os - -from sys import argv -from sys import exit +# A VTI interface also requires an IPSec configuration - VyOS 1.2 supported +# having a VTI interface in the CLI but no IPSec configuration - drop VTI +# configuration if this is the case for VyOS 1.4 +import sys from vyos.configtree import ConfigTree -def replace_nat_interfaces(config, old, new): - if not config.exists(['nat']): - return - for direction in ['destination', 'source']: - conf_direction = ['nat', direction, 'rule'] - if not config.exists(conf_direction): - return - for rule in config.list_nodes(conf_direction): - conf_rule = conf_direction + [rule] - if config.exists(conf_rule + ['inbound-interface']): - tmp = config.return_value(conf_rule + ['inbound-interface']) - if tmp == old: - config.set(conf_rule + ['inbound-interface'], value=new) - if config.exists(conf_rule + ['outbound-interface']): - tmp = config.return_value(conf_rule + ['outbound-interface']) - if tmp == old: - config.set(conf_rule + ['outbound-interface'], value=new) - - if __name__ == '__main__': - if (len(argv) < 1): + if (len(sys.argv) < 1): print("Must specify file name!") - exit(1) + sys.exit(1) - file_name = argv[1] + file_name = sys.argv[1] with open(file_name, 'r') as f: config_file = f.read() config = ConfigTree(config_file) - base = ['interfaces', 'wirelessmodem'] + base = ['interfaces', 'vti'] if not config.exists(base): # Nothing to do - exit(0) - - new_base = ['interfaces', 'wwan'] - config.set(new_base) - config.set_tag(new_base) - for old_interface in config.list_nodes(base): - # convert usb0b1.3p1.2 device identifier and extract 1.3 usb bus id - usb = config.return_value(base + [old_interface, 'device']) - device = usb.split('b')[-1] - busid = device.split('p')[0] - for new_interface in os.listdir('/sys/class/net'): - # we are only interested in interfaces starting with wwan - if not new_interface.startswith('wwan'): - continue - device = os.readlink(f'/sys/class/net/{new_interface}/device') - device = device.split(':')[0] - if busid in device: - config.copy(base + [old_interface], new_base + [new_interface]) - replace_nat_interfaces(config, old_interface, new_interface) - - config.delete(base) - - # Now that we have copied the old wirelessmodem interfaces to wwan - # we can start to migrate also individual config items. - for interface in config.list_nodes(new_base): - # we do no longer need the USB device name - config.delete(new_base + [interface, 'device']) - # set/unset DNS configuration - dns = new_base + [interface, 'no-peer-dns'] - if config.exists(dns): - config.delete(dns) - else: - config.set(['system', 'name-servers-dhcp'], value=interface, replace=False) - - # Backup distance is now handled by DHCP option "default-route-distance" - distance = dns = new_base + [interface, 'backup', 'distance'] - old_default_distance = '10' - if config.exists(distance): - old_default_distance = config.return_value(distance) - config.delete(distance) - config.set(new_base + [interface, 'dhcp-options', 'default-route-distance'], value=old_default_distance) - - # the new wwan interface use regular IP addressing - config.set(new_base + [interface, 'address'], value='dhcp') + sys.exit(0) + + ipsec_base = ['vpn', 'ipsec', 'site-to-site', 'peer'] + for interface in config.list_nodes(base): + found = False + if config.exists(ipsec_base): + for peer in config.list_nodes(ipsec_base): + if config.exists(ipsec_base + [peer, 'vti', 'bind']): + tmp = config.return_value(ipsec_base + [peer, 'vti', 'bind']) + if tmp == interface: + # Interface was found and we no longer need to search + # for it in our IPSec peers + found = True + break + if not found: + config.delete(base + [interface]) try: with open(file_name, 'w') as f: f.write(config.to_string()) except OSError as e: print("Failed to save the modified config: {}".format(e)) - exit(1) + sys.exit(1) -- cgit v1.2.3