diff options
author | Christian Breunig <christian@breunig.cc> | 2024-01-10 19:58:35 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-01-10 19:58:35 +0100 |
commit | 9bfc538e7af508bcb3979f4489076049e3a0031d (patch) | |
tree | 37101ec682d0be38cb9f0293fbcd02d6291596fe /src/conf_mode | |
parent | d7c50c8139828db1bebfc767d0878c81418d439f (diff) | |
parent | 4c35c1a4c818869781cdbd489851eba2960eaa21 (diff) | |
download | vyos-1x-9bfc538e7af508bcb3979f4489076049e3a0031d.tar.gz vyos-1x-9bfc538e7af508bcb3979f4489076049e3a0031d.zip |
Merge pull request #2782 from vyos/mergify/bp/sagitta/pr-2780
T5916: Added segment routing check for index size and SRGB size (backport #2780)
Diffstat (limited to 'src/conf_mode')
-rwxr-xr-x | src/conf_mode/protocols_isis.py | 15 | ||||
-rwxr-xr-x | src/conf_mode/protocols_ospf.py | 13 |
2 files changed, 27 insertions, 1 deletions
diff --git a/src/conf_mode/protocols_isis.py b/src/conf_mode/protocols_isis.py index ce67ccff7..8d594bb68 100755 --- a/src/conf_mode/protocols_isis.py +++ b/src/conf_mode/protocols_isis.py @@ -220,7 +220,20 @@ def verify(isis): if ("explicit_null" in prefix_config['index']) and ("no_php_flag" in prefix_config['index']): raise ConfigError(f'Segment routing prefix {prefix} cannot have both explicit-null '\ f'and no-php-flag configured at the same time.') - + + # Check for index ranges being larger than the segment routing global block + if dict_search('segment_routing.global_block', isis): + g_high_label_value = dict_search('segment_routing.global_block.high_label_value', isis) + g_low_label_value = dict_search('segment_routing.global_block.low_label_value', isis) + g_label_difference = int(g_high_label_value) - int(g_low_label_value) + if dict_search('segment_routing.prefix', isis): + for prefix, prefix_config in isis['segment_routing']['prefix'].items(): + if 'index' in prefix_config: + index_size = isis['segment_routing']['prefix'][prefix]['index']['value'] + if int(index_size) > int(g_label_difference): + raise ConfigError(f'Segment routing prefix {prefix} cannot have an '\ + f'index base size larger than the SRGB label base.') + # Check for LFA tiebreaker index duplication if dict_search('fast_reroute.lfa.local.tiebreaker', isis): comparison_dictionary = {} diff --git a/src/conf_mode/protocols_ospf.py b/src/conf_mode/protocols_ospf.py index cddd3765e..198d78ee0 100755 --- a/src/conf_mode/protocols_ospf.py +++ b/src/conf_mode/protocols_ospf.py @@ -215,6 +215,19 @@ def verify(ospf): raise ConfigError(f'Segment routing prefix {prefix} cannot have both explicit-null '\ f'and no-php-flag configured at the same time.') + # Check for index ranges being larger than the segment routing global block + if dict_search('segment_routing.global_block', ospf): + g_high_label_value = dict_search('segment_routing.global_block.high_label_value', ospf) + g_low_label_value = dict_search('segment_routing.global_block.low_label_value', ospf) + g_label_difference = int(g_high_label_value) - int(g_low_label_value) + if dict_search('segment_routing.prefix', ospf): + for prefix, prefix_config in ospf['segment_routing']['prefix'].items(): + if 'index' in prefix_config: + index_size = ospf['segment_routing']['prefix'][prefix]['index']['value'] + if int(index_size) > int(g_label_difference): + raise ConfigError(f'Segment routing prefix {prefix} cannot have an '\ + f'index base size larger than the SRGB label base.') + # Check route summarisation if 'summary_address' in ospf: for prefix, prefix_options in ospf['summary_address'].items(): |