isisd: Fix missing neighbor address Sub-TLVs after link-params change - #21204
Conversation
When link-params are removed from an interface, Zebra notifies IS-IS via the zebra_if_update_link_params hook, triggering isis_mpls_te_update(). That function calls isis_link_params_update(), which resets ext->status to keep only SR-related Sub-TLV flags β clearing EXT_NEIGH_ADDR and EXT_NEIGH_ADDR6, which control advertisement of the IPv4 and IPv6 Neighbor Address Sub-TLVs, so those Sub-TLVs disappear from the Extended IS Reachability TLV. Fix by calling isis_mpls_te_circuit_ip_update() after isis_link_params_update() in isis_mpls_te_update() when MPLS-TE is active. This re-evaluates the adjacency's known IP addresses and restores EXT_NEIGH_ADDR/EXT_NEIGH_ADDR6 if appropriate, causing the IPv4 and IPv6 Neighbor Address Sub-TLVs to be advertised again. Signed-off-by: Carmine Scarpitta <cscarpit@cisco.com>
Add test_step11() to the isis_te_topo1 topotest suite to verify that the IPv4 and IPv6 Neighbor Address Sub-TLVs in the Extended IS Reachability TLV are correctly restored after link-params changes. The test removes link-params from r1-eth0 and then re-adds them, and checks that the neighbor address Sub-TLVs are still present in the TED on all routers after the reconfiguration. Signed-off-by: Carmine Scarpitta <cscarpit@cisco.com>
Greptile SummaryThis PR fixes a bug where IPv4/IPv6 Neighbor Address Sub-TLVs ( Root cause: Fix: Call Key changes:
Confidence Score: 5/5
Important Files Changed
Sequence DiagramsequenceDiagram
participant Z as Zebra
participant TE as isis_mpls_te_update()
participant LP as isis_link_params_update()
participant IP as isis_mpls_te_circuit_ip_update()
participant LSP as lsp_regenerate_schedule()
Note over Z,LSP: "no link-params" on interface
Z->>TE: zebra_if_update_link_params hook
TE->>LP: isis_link_params_update(circuit, ifp)
Note over LP: HAS_LINK_PARAMS=false<br/>β resets ext->status<br/>β clears EXT_NEIGH_ADDR/EXT_NEIGH_ADDR6
LP-->>TE: returns
TE->>IP: isis_mpls_te_circuit_ip_update(circuit) [NEW]
Note over IP: Re-evaluates adj IPv4/IPv6 addrs<br/>β restores EXT_NEIGH_ADDR/EXT_NEIGH_ADDR6<br/>if adjacency has known addresses
IP-->>TE: returns
TE->>LSP: lsp_regenerate_schedule(area, ...)
Note over LSP: Re-advertises TLV with<br/>Neighbor Address Sub-TLVs intact
Last reviewed commit: 70ceffa |
70ceffa to
b477964
Compare
|
@Mergifyio backport stable/10.6 stable/10.5 |
β Backports have been createdDetails
|
isisd: Fix missing neighbor address Sub-TLVs after link-params change (backport #21204)
isisd: Fix missing neighbor address Sub-TLVs after link-params change (backport #21204)
When link-params are removed from an interface, Zebra notifies IS-IS via the
zebra_if_update_link_paramshook, triggeringisis_mpls_te_update(). That function callsisis_link_params_update(), which resetsext->statusto keep only SR-related Sub-TLV flags β clearingEXT_NEIGH_ADDRandEXT_NEIGH_ADDR6, which control advertisement of the IPv4 and IPv6Neighbor Address Sub-TLVs, so those Sub-TLVs disappear from the Extended IS Reachability TLV.
Fix by calling
isis_mpls_te_circuit_ip_update()afterisis_link_params_update()inisis_mpls_te_update()when MPLS-TE is active. This re-evaluates the adjacency's known IP addresses and restoresEXT_NEIGH_ADDR/EXT_NEIGH_ADDR6if appropriate, causing the IPv4 and IPv6 Neighbor Address Sub-TLVs to be advertised again.