diff options
| author | Renato Westphal <renato@openbsd.org> | 2017-11-16 19:35:12 -0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-11-16 19:35:12 -0200 |
| commit | 34183521907e2a99ba318928520983f388ed486c (patch) | |
| tree | d0657b20fc47d1468b68ba4da4c0e02d9b2a00fc /zebra/zebra_mpls.c | |
| parent | 55dc9e113b22fc8940155887acaaf621d7a1a95c (diff) | |
| parent | e6d44ec7a6cea09966894693e81ce4fbb7c154b9 (diff) | |
Merge pull request #1458 from donaldsharp/southbound_flags
Southbound flags
Diffstat (limited to 'zebra/zebra_mpls.c')
| -rw-r--r-- | zebra/zebra_mpls.c | 32 |
1 files changed, 28 insertions, 4 deletions
diff --git a/zebra/zebra_mpls.c b/zebra/zebra_mpls.c index 3765849adf..320176ba3a 100644 --- a/zebra/zebra_mpls.c +++ b/zebra/zebra_mpls.c @@ -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,23 +903,45 @@ 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); + else + clear_nhlfe_installed(lsp); + 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); + clear_nhlfe_installed(lsp); + } + 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); + else + clear_nhlfe_installed(lsp); + zvrf->lsp_installs++; } } - if (!ret) - clear_nhlfe_installed(lsp); - return WQ_SUCCESS; } |
