]> git.puffer.fish Git - matthieu/frr.git/commitdiff
zebra: Move some LSP flag handling to common code
authorDonald Sharp <sharpd@cumulusnetworks.com>
Thu, 16 Nov 2017 17:46:10 +0000 (12:46 -0500)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Thu, 16 Nov 2017 18:13:13 +0000 (13:13 -0500)
The LSP_FLAG_CHANGED and LSP_FLAG_INSTALLED flags
should be handled in the common call function
for adding/updating/removing a lsp to/from the kernel.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
zebra/zebra_mpls.c
zebra/zebra_mpls_netlink.c
zebra/zebra_mpls_openbsd.c

index 3765849adf22f6a0933ff1fee8f78de62aa252dc..6e7e52183152577165bb5b2c3bd11c2ab8e02897 100644 (file)
@@ -846,8 +846,10 @@ static void lsp_uninstall_from_kernel(struct hash_backet *backet, void *ctxt)
        if (CHECK_FLAG(lsp->flags, LSP_FLAG_INSTALLED)) {
                ret = kernel_del_lsp(lsp);
 
-               if (!ret)
+               if (!ret) {
+                       UNSET_FLAG(lsp->flags, LSP_FLAG_INSTALLED);
                        clear_nhlfe_installed(lsp);
+               }
        }
 }
 
@@ -901,16 +903,32 @@ static wq_item_status lsp_process(struct work_queue *wq, void *data)
        if (!CHECK_FLAG(lsp->flags, LSP_FLAG_INSTALLED)) {
                /* Not already installed */
                if (newbest) {
+
+                       UNSET_FLAG(lsp->flags, LSP_FLAG_CHANGED);
                        ret = kernel_add_lsp(lsp);
+
+                       if (!ret)
+                               SET_FLAG(lsp->flags, LSP_FLAG_INSTALLED);
+
                        zvrf->lsp_installs++;
                }
        } else {
                /* Installed, may need an update and/or delete. */
                if (!newbest) {
                        ret = kernel_del_lsp(lsp);
+
+                       if (!ret)
+                               UNSET_FLAG(lsp->flags, LSP_FLAG_INSTALLED);
                        zvrf->lsp_removals++;
                } else if (CHECK_FLAG(lsp->flags, LSP_FLAG_CHANGED)) {
+
+                       UNSET_FLAG(lsp->flags, LSP_FLAG_CHANGED);
+                       UNSET_FLAG(lsp->flags, LSP_FLAG_INSTALLED);
                        ret = kernel_upd_lsp(lsp);
+
+                       if (!ret)
+                               SET_FLAG(lsp->flags, LSP_FLAG_INSTALLED);
+
                        zvrf->lsp_installs++;
                }
        }
index 887c6854987533b5b682d9b113ff7d2d44a75e9f..0abc4959fa47c42d11779c92502d2f7880c7a515 100644 (file)
@@ -36,10 +36,7 @@ int kernel_add_lsp(zebra_lsp_t *lsp)
        if (!lsp || !lsp->best_nhlfe) // unexpected
                return -1;
 
-       UNSET_FLAG(lsp->flags, LSP_FLAG_CHANGED);
        ret = netlink_mpls_multipath(RTM_NEWROUTE, lsp);
-       if (!ret)
-               SET_FLAG(lsp->flags, LSP_FLAG_INSTALLED);
 
        return ret;
 }
@@ -64,8 +61,6 @@ int kernel_upd_lsp(zebra_lsp_t *lsp)
        if (!lsp || !lsp->best_nhlfe) // unexpected
                return -1;
 
-       UNSET_FLAG(lsp->flags, LSP_FLAG_CHANGED);
-
        /* Any NHLFE that was installed but is not selected now needs to
         * have its flags updated.
         */
@@ -82,8 +77,6 @@ int kernel_upd_lsp(zebra_lsp_t *lsp)
        }
 
        ret = netlink_mpls_multipath(RTM_NEWROUTE, lsp);
-       if (!ret)
-               SET_FLAG(lsp->flags, LSP_FLAG_INSTALLED);
 
        return ret;
 }
@@ -93,15 +86,17 @@ int kernel_upd_lsp(zebra_lsp_t *lsp)
  */
 int kernel_del_lsp(zebra_lsp_t *lsp)
 {
+       int ret;
+
        if (!lsp) // unexpected
                return -1;
 
-       if (CHECK_FLAG(lsp->flags, LSP_FLAG_INSTALLED)) {
-               netlink_mpls_multipath(RTM_DELROUTE, lsp);
-               UNSET_FLAG(lsp->flags, LSP_FLAG_INSTALLED);
-       }
+       if (!CHECK_FLAG(lsp->flags, LSP_FLAG_INSTALLED))
+               return -1;
 
-       return 0;
+       ret = netlink_mpls_multipath(RTM_DELROUTE, lsp);
+
+       return ret;
 }
 
 int mpls_kernel_init(void)
index 33f0d49d4d5babd9a299f318675295b7158a1e8d..44f89f0b3bd5faacdfe99b7fbcafedb21077850c 100644 (file)
@@ -299,10 +299,7 @@ int kernel_add_lsp(zebra_lsp_t *lsp)
        if (!lsp || !lsp->best_nhlfe) // unexpected
                return -1;
 
-       UNSET_FLAG(lsp->flags, LSP_FLAG_CHANGED);
        ret = kernel_lsp_cmd(RTM_ADD, lsp);
-       if (!ret)
-               SET_FLAG(lsp->flags, LSP_FLAG_INSTALLED);
 
        return ret;
 }
@@ -314,11 +311,7 @@ int kernel_upd_lsp(zebra_lsp_t *lsp)
        if (!lsp || !lsp->best_nhlfe) // unexpected
                return -1;
 
-       UNSET_FLAG(lsp->flags, LSP_FLAG_CHANGED);
-       UNSET_FLAG(lsp->flags, LSP_FLAG_INSTALLED);
        ret = kernel_lsp_cmd(RTM_CHANGE, lsp);
-       if (!ret)
-               SET_FLAG(lsp->flags, LSP_FLAG_INSTALLED);
 
        return ret;
 }
@@ -334,8 +327,6 @@ int kernel_del_lsp(zebra_lsp_t *lsp)
                return -1;
 
        ret = kernel_lsp_cmd(RTM_DELETE, lsp);
-       if (!ret)
-               UNSET_FLAG(lsp->flags, LSP_FLAG_INSTALLED);
 
        return ret;
 }