]> git.puffer.fish Git - mirror/frr.git/commitdiff
ospfd: reset mpls-te prior to ospf router removal
authorCarlo Galiotto <carlo@voltanet.io>
Fri, 13 Nov 2020 16:35:06 +0000 (17:35 +0100)
committerIgor Ryzhov <iryzhov@nfware.com>
Tue, 17 Nov 2020 18:07:59 +0000 (21:07 +0300)
This commits attempts to fix a problem that occurs when mpls-te gets
removed from ospfd config. Mpls-te has an inter-as option, which can be
set to Off/Area/AS. Whenever the inter-as takes "Area" or "AS" as a
value, this value will not be cleaned after removing mpls-te or after
removing the ospf router. Therefore, if mpls-te is configured with
inter-as AS or Area and we remove mpls-te or the ospf router, the
inter-as will still preserve its value; therefore, next time mpls-te is
enabled, it will automatically inherits the previous inter-as value
(either Area or AS). This leads to wrong configuration, which can be a
problem for frr_reload.py.
The commits forces mpls-te to reset inter-as to Off before it mpls-te
gets removed from the configuration and before the ospf router gets
removed.

Signed-off-by: Carlo Galiotto <carlo@voltanet.io>
ospfd/ospf_opaque.c
ospfd/ospf_te.c

index 061ada5b167e318dee0ad7609da2323af7809fe8..97cfa48c3dc980b067ec9e6ddd49150de7025797 100644 (file)
@@ -126,6 +126,8 @@ void ospf_opaque_term(void)
 
 void ospf_opaque_finish(void)
 {
+       ospf_mpls_te_finish();
+
        ospf_router_info_finish();
 
        ospf_ext_finish();
index 1009c7577e04af8e2c020bcfe3086b122d1ea848..85f06c2b4c3cc3cbcb9603b0b3a975e7134cc588 100644 (file)
@@ -187,6 +187,7 @@ void ospf_mpls_te_finish(void)
        // list_delete_all_node(OspfMplsTE.iflist);
 
        OspfMplsTE.enabled = false;
+       ospf_mpls_te_unregister();
        OspfMplsTE.inter_as = Off;
 }
 
@@ -2235,6 +2236,17 @@ DEFUN (no_ospf_mpls_te,
                if (CHECK_FLAG(lp->flags, LPFLG_LSA_ENGAGED))
                        ospf_mpls_te_lsa_schedule(lp, FLUSH_THIS_LSA);
 
+       /*
+        * This resets the OspfMplsTE.inter_as to its initial state.
+        * This is to avoid having an inter-as value different from
+        * Off when mpls-te gets restarted (after being removed)
+        */
+       if (OspfMplsTE.inter_as != Off) {
+               /* Deregister the Callbacks for Inter-AS support */
+               ospf_mpls_te_unregister();
+               OspfMplsTE.inter_as = Off;
+       }
+
        return CMD_SUCCESS;
 }