diff options
author | Chirag Shah <chirag@nvidia.com> | 2023-06-29 18:55:12 +0200 |
---|---|---|
committer | Chirag Shah <chirag@nvidia.com> | 2023-06-30 03:09:05 +0200 |
commit | 623af04e1cb5413b7500fd25d98b59d7bfd4a5e1 (patch) | |
tree | 124d8338aef9bf456c123e7c21f2f470b5358341 /tools/frr-reload.py | |
parent | Merge pull request #13866 from LabNConsulting/mgmtd/incllang (diff) | |
download | frr-623af04e1cb5413b7500fd25d98b59d7bfd4a5e1.tar.xz frr-623af04e1cb5413b7500fd25d98b59d7bfd4a5e1.zip |
tools: fix pim interface config deletion
When no ip pim is performed subsequent pim related
configs under the interface also implicitly deleted.
When doing this via frr-reload requires to remove any
explicit no ip pim <blah> lines so delete list.
Testing Done:
running-config:
interface lo
ip pim
ip pim use-source 6.0.0.1
exit
frr.conf:
remove two pim config lines.
interface lo
exit
Before fix:
2023-06-29 23:44:26,062 INFO: Failed to execute interface lo no ip pim use-source 6.0.0.1
2023-06-29 23:44:26,142 INFO: Failed to execute interface lo no ip pim use-source
2023-06-29 23:44:26,221 INFO: Executed "interface lo no ip pim"
After fix:
Only no ip pim executed and rest of the other lines removed from delete
list.
2023-06-30 01:07:32,618 INFO: Executed "interface lo no ip pim"
Signed-off-by: Chirag Shah <chirag@nvidia.com>
Diffstat (limited to 'tools/frr-reload.py')
-rwxr-xr-x | tools/frr-reload.py | 35 |
1 files changed, 34 insertions, 1 deletions
diff --git a/tools/frr-reload.py b/tools/frr-reload.py index c2be9f78e..69a986ba0 100755 --- a/tools/frr-reload.py +++ b/tools/frr-reload.py @@ -891,7 +891,7 @@ def bgp_remove_neighbor_cfg(lines_to_del, del_nbr_dict): lines_to_del.remove((ctx_keys, line)) -def delete_move_lines(lines_to_add, lines_to_del): +def bgp_delete_move_lines(lines_to_add, lines_to_del): # This method handles deletion of bgp peer group config. # The objective is to delete config lines related to peers # associated with the peer-group and move the peer-group @@ -1066,6 +1066,39 @@ def delete_move_lines(lines_to_add, lines_to_del): return (lines_to_add, lines_to_del) +def pim_delete_move_lines(lines_to_add, lines_to_del): + + # Under interface context, if 'no ip pim' is present + # remove subsequent 'no ip pim <blah>' options as it + # they are implicitly deleted by 'no ip pim'. + # Remove all such depdendent options from delete + # pending list. + pim_disable = False + + for (ctx_keys, line) in lines_to_del: + if ctx_keys[0].startswith("interface") and line and line == "ip pim": + pim_disable = True + + if pim_disable: + for (ctx_keys, line) in lines_to_del: + if ( + ctx_keys[0].startswith("interface") + and line + and line.startswith("ip pim ") + ): + lines_to_del.remove((ctx_keys, line)) + + return (lines_to_add, lines_to_del) + + +def delete_move_lines(lines_to_add, lines_to_del): + + lines_to_add, lines_to_del = bgp_delete_move_lines(lines_to_add, lines_to_del) + lines_to_add, lines_to_del = pim_delete_move_lines(lines_to_add, lines_to_del) + + return (lines_to_add, lines_to_del) + + def ignore_delete_re_add_lines(lines_to_add, lines_to_del): # Quite possibly the most confusing (while accurate) variable names in history |