From d4cb23d7bcb876f6022dd7fe65265a38ed0ddcda Mon Sep 17 00:00:00 2001 From: Mark Stapp Date: Wed, 17 Oct 2018 15:54:53 -0400 Subject: [PATCH] zebra: add apis to add and delete NHLFEs Add public versions of zebra apis that add NHLFEs to an LSP, and that free NHLFEs. The dataplane code needs to capture/copy NHLFEs in order to do async LSP programming. Signed-off-by: Mark Stapp --- zebra/zebra_mpls.c | 23 +++++++++++++++++++++++ zebra/zebra_mpls.h | 11 +++++++++++ 2 files changed, 34 insertions(+) diff --git a/zebra/zebra_mpls.c b/zebra/zebra_mpls.c index c0764cd4b8..db2fcae5b7 100644 --- a/zebra/zebra_mpls.c +++ b/zebra/zebra_mpls.c @@ -1807,6 +1807,29 @@ int zebra_mpls_lsp_uninstall(struct zebra_vrf *zvrf, struct route_node *rn, return lsp_uninstall(zvrf, fec->label); } +/* + * Add an NHLFE to an LSP, return the newly-added object + */ +zebra_nhlfe_t *zebra_mpls_lsp_add_nhlfe(zebra_lsp_t *lsp, + enum lsp_types_t lsp_type, + enum nexthop_types_t gtype, + union g_addr *gate, + ifindex_t ifindex, + mpls_label_t out_label) +{ + /* Just a public pass-through to the internal implementation */ + return nhlfe_add(lsp, lsp_type, gtype, gate, ifindex, out_label); +} + +/* + * Free an allocated NHLFE + */ +void zebra_mpls_nhlfe_del(zebra_nhlfe_t *nhlfe) +{ + /* Just a pass-through to the internal implementation */ + nhlfe_del(nhlfe); +} + /* * Registration from a client for the label binding for a FEC. If a binding * already exists, it is informed to the client. diff --git a/zebra/zebra_mpls.h b/zebra/zebra_mpls.h index c250fc4058..2c95d22c4e 100644 --- a/zebra/zebra_mpls.h +++ b/zebra/zebra_mpls.h @@ -191,6 +191,17 @@ int zebra_mpls_lsp_install(struct zebra_vrf *zvrf, struct route_node *rn, int zebra_mpls_lsp_uninstall(struct zebra_vrf *zvrf, struct route_node *rn, struct route_entry *re); +/* Add an NHLFE to an LSP, return the newly-added object */ +zebra_nhlfe_t *zebra_mpls_lsp_add_nhlfe(zebra_lsp_t *lsp, + enum lsp_types_t lsp_type, + enum nexthop_types_t gtype, + union g_addr *gate, + ifindex_t ifindex, + mpls_label_t out_label); + +/* Free an allocated NHLFE */ +void zebra_mpls_nhlfe_del(zebra_nhlfe_t *nhlfe); + int zebra_mpls_fec_register(struct zebra_vrf *zvrf, struct prefix *p, uint32_t label, uint32_t label_index, struct zserv *client);