mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-05-30 22:25:41 +00:00
tools, vtysh: fix ldpd + frr-reload.py
frr-reload.py has many special case rules that did not consider ldpd at all. Specifically: 1. The bulk of ldp configuration comes in a big 'mpls ldp' context, which was previously considered a single-line context as it started with 'mpls'. This rule should only apply to labels and lsps. 2. ldp has a 'router-id' config line that fell into the same rule as the above one. It should not be considered a single-line context as more ldp configuration can follow. 3. enabled interfaces should not end their context. A better fix would actually require popping a new context for each interface in case there is any interface-specific config, but at least this fix will address the most common use case. 4. when declaring pseudowires, any line with 'member pseudowire XXX' should be considered a sub-context of the 'l2vpn YYY type ZZZ' context. Without this fix, changes in the first psuedowire declared would not correctly be processed (e.g. removing a 'control-word exclude' line would not be picked up). Signed-off-by: Emanuele Di Pascale <emanuele@voltanet.io>
This commit is contained in:
parent
d9730542a9
commit
ccef6e47a3
@ -404,7 +404,8 @@ end
|
|||||||
"ip ",
|
"ip ",
|
||||||
"ipv6 ",
|
"ipv6 ",
|
||||||
"log ",
|
"log ",
|
||||||
"mpls",
|
"mpls lsp",
|
||||||
|
"mpls label",
|
||||||
"no ",
|
"no ",
|
||||||
"password ",
|
"password ",
|
||||||
"ptm-enable",
|
"ptm-enable",
|
||||||
@ -424,7 +425,12 @@ end
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
# one line contexts
|
# one line contexts
|
||||||
if new_ctx is True and any(line.startswith(keyword) for keyword in oneline_ctx_keywords):
|
# there is one exception though: ldpd accepts a 'router-id' clause
|
||||||
|
# as part of its 'mpls ldp' config context. If we are processing
|
||||||
|
# ldp configuration and encounter a router-id we should NOT switch
|
||||||
|
# to a new context
|
||||||
|
if new_ctx is True and any(line.startswith(keyword) for keyword in oneline_ctx_keywords) and not (
|
||||||
|
ctx_keys and ctx_keys[0].startswith("mpls ldp") and line.startswith("router-id ")):
|
||||||
self.save_contexts(ctx_keys, current_context_lines)
|
self.save_contexts(ctx_keys, current_context_lines)
|
||||||
|
|
||||||
# Start a new context
|
# Start a new context
|
||||||
@ -489,7 +495,8 @@ end
|
|||||||
elif (line.startswith("address-family ") or
|
elif (line.startswith("address-family ") or
|
||||||
line.startswith("vnc defaults") or
|
line.startswith("vnc defaults") or
|
||||||
line.startswith("vnc l2-group") or
|
line.startswith("vnc l2-group") or
|
||||||
line.startswith("vnc nve-group")):
|
line.startswith("vnc nve-group") or
|
||||||
|
line.startswith("member pseudowire")):
|
||||||
main_ctx_key = []
|
main_ctx_key = []
|
||||||
|
|
||||||
# Save old context first
|
# Save old context first
|
||||||
@ -498,9 +505,9 @@ end
|
|||||||
main_ctx_key = copy.deepcopy(ctx_keys)
|
main_ctx_key = copy.deepcopy(ctx_keys)
|
||||||
log.debug('LINE %-50s: entering sub-context, append to ctx_keys', line)
|
log.debug('LINE %-50s: entering sub-context, append to ctx_keys', line)
|
||||||
|
|
||||||
if line == "address-family ipv6":
|
if line == "address-family ipv6" and not ctx_keys[0].startswith("mpls ldp"):
|
||||||
ctx_keys.append("address-family ipv6 unicast")
|
ctx_keys.append("address-family ipv6 unicast")
|
||||||
elif line == "address-family ipv4":
|
elif line == "address-family ipv4" and not ctx_keys[0].startswith("mpls ldp"):
|
||||||
ctx_keys.append("address-family ipv4 unicast")
|
ctx_keys.append("address-family ipv4 unicast")
|
||||||
elif line == "address-family evpn":
|
elif line == "address-family evpn":
|
||||||
ctx_keys.append("address-family l2vpn evpn")
|
ctx_keys.append("address-family l2vpn evpn")
|
||||||
|
@ -725,19 +725,17 @@ int vtysh_mark_file(const char *filename)
|
|||||||
switch (vty->node) {
|
switch (vty->node) {
|
||||||
case LDP_IPV4_IFACE_NODE:
|
case LDP_IPV4_IFACE_NODE:
|
||||||
if (strncmp(vty_buf_copy, " ", 3)) {
|
if (strncmp(vty_buf_copy, " ", 3)) {
|
||||||
vty_out(vty, " end\n");
|
|
||||||
vty->node = LDP_IPV4_NODE;
|
vty->node = LDP_IPV4_NODE;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case LDP_IPV6_IFACE_NODE:
|
case LDP_IPV6_IFACE_NODE:
|
||||||
if (strncmp(vty_buf_copy, " ", 3)) {
|
if (strncmp(vty_buf_copy, " ", 3)) {
|
||||||
vty_out(vty, " end\n");
|
|
||||||
vty->node = LDP_IPV6_NODE;
|
vty->node = LDP_IPV6_NODE;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case LDP_PSEUDOWIRE_NODE:
|
case LDP_PSEUDOWIRE_NODE:
|
||||||
if (strncmp(vty_buf_copy, " ", 2)) {
|
if (strncmp(vty_buf_copy, " ", 2)) {
|
||||||
vty_out(vty, " end\n");
|
vty_out(vty, " exit\n");
|
||||||
vty->node = LDP_L2VPN_NODE;
|
vty->node = LDP_L2VPN_NODE;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
Loading…
Reference in New Issue
Block a user