diff options
-rw-r--r-- | interface-definitions/lldp.xml.in | 128 | ||||
-rwxr-xr-x | src/conf_mode/lldp.py | 42 | ||||
-rwxr-xr-x | src/migration-scripts/lldp/0-to-1 | 35 |
3 files changed, 35 insertions, 170 deletions
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 @@ <help>LLDP-MED location data [REQUIRED]</help> </properties> <children> - <node name="civic-based"> - <properties> - <help>Civic-based location data</help> - </properties> - <children> - <tagNode name="ca-type"> - <properties> - <help>LLDP-MED Civic Address type [REQUIRED]</help> - <valueHelp> - <format>0</format> - <description>Language</description> - </valueHelp> - <valueHelp> - <format>1</format> - <description>National subdivisions</description> - </valueHelp> - <valueHelp> - <format>2</format> - <description>County, parish, district</description> - </valueHelp> - <valueHelp> - <format>3</format> - <description>City, township</description> - </valueHelp> - <valueHelp> - <format>4</format> - <description>City division, borough, ward</description> - </valueHelp> - <valueHelp> - <format>5</format> - <description>Neighborhood, block</description> - </valueHelp> - <valueHelp> - <format>6</format> - <description>Street</description> - </valueHelp> - <valueHelp> - <format>16</format> - <description>Leading street direction</description> - </valueHelp> - <valueHelp> - <format>17</format> - <description>Trailing street suffix</description> - </valueHelp> - <valueHelp> - <format>18</format> - <description>Street suffix</description> - </valueHelp> - <valueHelp> - <format>19</format> - <description>House number</description> - </valueHelp> - <valueHelp> - <format>20</format> - <description>House number suffix</description> - </valueHelp> - <valueHelp> - <format>21</format> - <description>Landmark or vanity address</description> - </valueHelp> - <valueHelp> - <format>22</format> - <description>Additional location info</description> - </valueHelp> - <valueHelp> - <format>23</format> - <description>Name</description> - </valueHelp> - <valueHelp> - <format>24</format> - <description>Postal/ZIP code</description> - </valueHelp> - <valueHelp> - <format>25</format> - <description>Building</description> - </valueHelp> - <valueHelp> - <format>26</format> - <description>Unit</description> - </valueHelp> - <valueHelp> - <format>27</format> - <description>Floor</description> - </valueHelp> - <valueHelp> - <format>28</format> - <description>Room number</description> - </valueHelp> - <valueHelp> - <format>29</format> - <description>Place type</description> - </valueHelp> - <valueHelp> - <format>128</format> - <description>Script</description> - </valueHelp> - <constraintErrorMessage>ca-type must between 0-128</constraintErrorMessage> - <constraint> - <validator name="numeric" argument="--range 0-128"/> - </constraint> - </properties> - <children> - <leafNode name="ca-value"> - <properties> - <help>Civic address value for ca-type [REQUIRED]</help> - <constraintErrorMessage>ca-value must be less than 256 characters</constraintErrorMessage> - <constraint> - <regex>[A-Za-z0-9\ \-\_\.\,]{0,255}$</regex> - </constraint> - </properties> - </leafNode> - </children> - </tagNode> - <leafNode name="country-code"> - <properties> - <help>Country code [REQUIRED]</help> - <valueHelp> - <format><AA></format> - <description>Two letter ISO 3166 country code</description> - </valueHelp> - <constraintErrorMessage>country-code must be 2 characters</constraintErrorMessage> - <constraint> - <regex>[a-zA-Z]{2}$</regex> - </constraint> - </properties> - </leafNode> - </children> - </node> <node name="coordinate-based"> <properties> <help>Coordinate based location</help> 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 <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) |