summaryrefslogtreecommitdiffstats
path: root/tools/frr-reload.py
diff options
context:
space:
mode:
authorChirag Shah <chirag@nvidia.com>2023-06-29 18:55:12 +0200
committerChirag Shah <chirag@nvidia.com>2023-06-30 03:09:05 +0200
commit623af04e1cb5413b7500fd25d98b59d7bfd4a5e1 (patch)
tree124d8338aef9bf456c123e7c21f2f470b5358341 /tools/frr-reload.py
parentMerge pull request #13866 from LabNConsulting/mgmtd/incllang (diff)
downloadfrr-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-xtools/frr-reload.py35
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