From 9fdb4735ada687200545bebb836bf5a1a2d71220 Mon Sep 17 00:00:00 2001 From: ckishimo Date: Mon, 31 Jan 2022 23:58:14 +0100 Subject: [PATCH] ospfd: restart spf when distance is updated if r1 has a route received from a neighbor with the default administrative distance configured r1# sh ip route Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP, T - Table, v - VNC, V - VNC-Direct, A - Babel, F - PBR, f - OpenFabric, > - selected route, * - FIB route, q - queued, r - rejected, b - backup t - trapped, o - offload failure O>* 1.1.1.1/32 [110/20] via 10.0.12.2, r1-r2-eth0, weight 1, 00:00:41 if we change the administrative distance r1(config)# router ospf r1(config-router)# distance 50 this is not applied as there are no changes in the routing table r1# sh ip route Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP, T - Table, v - VNC, V - VNC-Direct, A - Babel, F - PBR, f - OpenFabric, > - selected route, * - FIB route, q - queued, r - rejected, b - backup t - trapped, o - offload failure O>* 1.1.1.1/32 [110/20] via 10.0.12.2, r1-r2-eth0, weight 1, 00:00:13 This commit will force the update of the routing table with the new configured distance r1# sh ip route Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP, T - Table, v - VNC, V - VNC-Direct, A - Babel, F - PBR, f - OpenFabric, > - selected route, * - FIB route, q - queued, r - rejected, b - backup t - trapped, o - offload failure O>* 1.1.1.1/32 [50/20] via 10.0.12.2, r1-r2-eth0, weight 1, 00:00:14 Signed-off-by: ckishimo --- ospfd/ospf_vty.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/ospfd/ospf_vty.c b/ospfd/ospf_vty.c index 59f03f5fc6..beb0a6b650 100644 --- a/ospfd/ospf_vty.c +++ b/ospfd/ospf_vty.c @@ -9478,8 +9478,13 @@ DEFUN (ospf_distance, { VTY_DECLVAR_INSTANCE_CONTEXT(ospf, ospf); int idx_number = 1; + uint8_t distance; - ospf->distance_all = atoi(argv[idx_number]->arg); + distance = atoi(argv[idx_number]->arg); + if (ospf->distance_all != distance) { + ospf->distance_all = distance; + ospf_restart_spf(ospf); + } return CMD_SUCCESS; } @@ -9493,7 +9498,10 @@ DEFUN (no_ospf_distance, { VTY_DECLVAR_INSTANCE_CONTEXT(ospf, ospf); - ospf->distance_all = 0; + if (ospf->distance_all) { + ospf->distance_all = 0; + ospf_restart_spf(ospf); + } return CMD_SUCCESS; }