From 66f8be0757f27ab77abde070644a7b4310a799a2 Mon Sep 17 00:00:00 2001 From: Christian Poessinger Date: Sun, 26 Jan 2020 12:20:39 +0100 Subject: lldp: T1896: remove MED civic based location information Civic based location information was not working for quiet some time and as an unused feature we should drop it to keep the codebase more simple and maintainable. --- interface-definitions/lldp.xml.in | 128 -------------------------------------- src/conf_mode/lldp.py | 42 ------------- src/migration-scripts/lldp/0-to-1 | 35 +++++++++++ 3 files changed, 35 insertions(+), 170 deletions(-) create mode 100755 src/migration-scripts/lldp/0-to-1 diff --git a/interface-definitions/lldp.xml.in b/interface-definitions/lldp.xml.in index f95ffb4df..3a2899b57 100644 --- a/interface-definitions/lldp.xml.in +++ b/interface-definitions/lldp.xml.in @@ -35,134 +35,6 @@ LLDP-MED location data [REQUIRED] - - - Civic-based location data - - - - - LLDP-MED Civic Address type [REQUIRED] - - 0 - Language - - - 1 - National subdivisions - - - 2 - County, parish, district - - - 3 - City, township - - - 4 - City division, borough, ward - - - 5 - Neighborhood, block - - - 6 - Street - - - 16 - Leading street direction - - - 17 - Trailing street suffix - - - 18 - Street suffix - - - 19 - House number - - - 20 - House number suffix - - - 21 - Landmark or vanity address - - - 22 - Additional location info - - - 23 - Name - - - 24 - Postal/ZIP code - - - 25 - Building - - - 26 - Unit - - - 27 - Floor - - - 28 - Room number - - - 29 - Place type - - - 128 - Script - - ca-type must between 0-128 - - - - - - - - Civic address value for ca-type [REQUIRED] - ca-value must be less than 256 characters - - [A-Za-z0-9\ \-\_\.\,]{0,255}$ - - - - - - - - Country code [REQUIRED] - - <AA> - Two letter ISO 3166 country code - - country-code must be 2 characters - - [a-zA-Z]{2}$ - - - - - Coordinate based location diff --git a/src/conf_mode/lldp.py b/src/conf_mode/lldp.py index 51425aaaf..978297b56 100755 --- a/src/conf_mode/lldp.py +++ b/src/conf_mode/lldp.py @@ -121,23 +121,9 @@ def get_location_intf(config, name): config.set_level(path) config.set_level('{} location'.format(path)) - civic_based = {} elin = '' coordinate_based = {} - if config.exists('civic-based'): - config.set_level('{} location civic-based'.format(path)) - civic_based['country_code'] = config.return_value('country-code') - civic_based['ca_type'] = [] - for ca_types_name in config.list_nodes('ca-type'): - config.set_level('{} location civic-based ca-type {}'.format(path, ca_types_name)) - ca_val = config.return_value('ca-value') - ca_type = { - 'name': ca_types_name, - 'ca_val': ca_val - } - civic_based['ca_type'].append(ca_type) - if config.exists('elin'): elin = config.return_value('elin') @@ -157,7 +143,6 @@ def get_location_intf(config, name): intf = { 'name': name, - 'civic_based': civic_based, 'elin': elin, 'coordinate_based': coordinate_based @@ -202,33 +187,6 @@ def verify(lldp): # check location for location in lldp['location']: - # check civic-based - if len(location['civic_based']) > 0: - if len(location['coordinate_based']) > 0 or location['elin']: - raise ConfigError('Can only configure 1 location type for interface {0}'.format(location['name'])) - - # check country-code - if not location['civic_based']['country_code']: - raise ConfigError('Invalid location for interface {0}:\n' \ - 'must configure the country code'.format(location['name'])) - - if not re.match(r'^[a-zA-Z]{2}$', location['civic_based']['country_code']): - raise ConfigError('Invalid location for interface {0}:\n' \ - 'country-code must be 2 characters'.format(location['name'])) - # check ca-type - if len(location['civic_based']['ca_type']) < 0: - raise ConfigError('Invalid location for interface {0}:\n' \ - 'must define at least 1 ca-type'.format(location['name'])) - - for ca_type in location['civic_based']['ca_type']: - if not int(ca_type['name']) in range(0, 129): - raise ConfigError('Invalid location for interface {0}:\n' \ - 'ca-type must between 0-128'.format(location['name'])) - - if not ca_type['ca_val']: - raise ConfigError('Invalid location for interface {0}:\n' \ - 'must configure the ca-value for ca-type {1}'.format(location["name"],ca_type['name'])) - # check coordinate-based elif len(location['coordinate_based']) > 0: # check longitude and latitude diff --git a/src/migration-scripts/lldp/0-to-1 b/src/migration-scripts/lldp/0-to-1 new file mode 100755 index 000000000..5f66570e7 --- /dev/null +++ b/src/migration-scripts/lldp/0-to-1 @@ -0,0 +1,35 @@ +#!/usr/bin/env python3 + +# Delete "set service lldp interface location civic-based" option +# as it was broken most of the time anyways + +import sys + +from vyos.configtree import ConfigTree + +if (len(sys.argv) < 1): + print("Must specify file name!") + sys.exit(1) + +file_name = sys.argv[1] + +with open(file_name, 'r') as f: + config_file = f.read() + +config = ConfigTree(config_file) +base = ['service', 'lldp', 'interface'] +if not config.exists(base): + # Nothing to do + sys.exit(0) +else: + # Delete nodes with abandoned CLI syntax + for interface in config.list_nodes(base): + if config.exists(base + [interface, 'location', 'civic-based']): + config.delete(base + [interface, 'location', 'civic-based']) + + 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)) + sys.exit(1) -- cgit v1.2.3