diff options
| author | Chirag Shah <chirag@nvidia.com> | 2023-06-29 09:55:12 -0700 | 
|---|---|---|
| committer | Chirag Shah <chirag@nvidia.com> | 2023-06-29 18:09:05 -0700 | 
| commit | 623af04e1cb5413b7500fd25d98b59d7bfd4a5e1 (patch) | |
| tree | 124d8338aef9bf456c123e7c21f2f470b5358341 /tools | |
| parent | 6f0aef2ef8d5d4b36dfb46ebbe8ffe201e41d84b (diff) | |
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')
| -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 c2be9f78eb..69a986ba0d 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  | 
