From ea1c14f6801881b7d2e1b4035b8f085f6d663927 Mon Sep 17 00:00:00 2001 From: Mark Stapp Date: Wed, 12 Sep 2018 14:42:03 -0400 Subject: [PATCH] zebra: Create zebra_dplane.c and .h Add first sketchy 'dplane' files. Signed-off-by: Mark Stapp Signed-off-by: Donald Sharp --- zebra/rt.h | 46 ++++++------------------ zebra/rt_netlink.c | 22 ++++++------ zebra/rt_socket.c | 22 ++++++------ zebra/rule_netlink.c | 16 ++++----- zebra/rule_socket.c | 8 ++--- zebra/subdir.am | 2 ++ zebra/zebra_dplane.c | 21 +++++++++++ zebra/zebra_dplane.h | 72 ++++++++++++++++++++++++++++++++++++++ zebra/zebra_mpls.c | 30 ++++++++-------- zebra/zebra_mpls_netlink.c | 40 ++++++++++----------- zebra/zebra_mpls_null.c | 12 +++---- zebra/zebra_mpls_openbsd.c | 40 ++++++++++----------- zebra/zebra_pbr.c | 60 +++++++++++++++++-------------- zebra/zebra_pbr.h | 13 ++++--- zebra/zebra_rib.c | 24 +++++++------ 15 files changed, 255 insertions(+), 173 deletions(-) create mode 100644 zebra/zebra_dplane.c create mode 100644 zebra/zebra_dplane.h diff --git a/zebra/rt.h b/zebra/rt.h index e40bae3a3..90ee6f641 100644 --- a/zebra/rt.h +++ b/zebra/rt.h @@ -29,31 +29,7 @@ #include "zebra/rib.h" #include "zebra/zebra_ns.h" #include "zebra/zebra_mpls.h" - -/* - * Philosophy Note: - * - * Flags being SET/UNSET do not belong in the South Bound - * Interface. This Setting belongs at the calling level - * because we can and will have multiple different interfaces - * and we will have potentially multiple different - * modules/filters to call. As such Setting/Unsetting - * success failure should be handled by the caller. - */ - - -enum dp_results { - DP_INSTALL_SUCCESS, - DP_INSTALL_FAILURE, - DP_DELETE_SUCCESS, - DP_DELETE_FAILURE, -}; - -enum dp_req_result { - DP_REQUEST_QUEUED, - DP_REQUEST_SUCCESS, - DP_REQUEST_FAILURE, -}; +#include "zebra/zebra_dplane.h" /* * Install/delete the specified prefix p from the kernel @@ -66,11 +42,11 @@ enum dp_req_result { * semantics so we will end up with a delete than * a re-add. */ -extern enum dp_req_result kernel_route_rib(struct route_node *rn, - const struct prefix *p, - const struct prefix *src_p, - struct route_entry *old, - struct route_entry *new); +extern enum zebra_dplane_result kernel_route_rib(struct route_node *rn, + const struct prefix *p, + const struct prefix *src_p, + struct route_entry *old, + struct route_entry *new); /* * So route install/failure may not be immediately known @@ -80,7 +56,7 @@ extern enum dp_req_result kernel_route_rib(struct route_node *rn, extern void kernel_route_rib_pass_fail(struct route_node *rn, const struct prefix *p, struct route_entry *re, - enum dp_results res); + enum zebra_dplane_status res); extern int kernel_address_add_ipv4(struct interface *, struct connected *); extern int kernel_address_delete_ipv4(struct interface *, struct connected *); @@ -91,9 +67,9 @@ extern int kernel_neigh_update(int cmd, int ifindex, uint32_t addr, char *lla, extern int kernel_interface_set_master(struct interface *master, struct interface *slave); -extern enum dp_req_result kernel_add_lsp(zebra_lsp_t *lsp); -extern enum dp_req_result kernel_upd_lsp(zebra_lsp_t *lsp); -extern enum dp_req_result kernel_del_lsp(zebra_lsp_t *lsp); +extern enum zebra_dplane_result kernel_add_lsp(zebra_lsp_t *lsp); +extern enum zebra_dplane_result kernel_upd_lsp(zebra_lsp_t *lsp); +extern enum zebra_dplane_result kernel_del_lsp(zebra_lsp_t *lsp); /* * Add the ability to pass back up the lsp install/delete @@ -104,7 +80,7 @@ extern enum dp_req_result kernel_del_lsp(zebra_lsp_t *lsp); * the install/failure to set/unset flags and to notify * as needed. */ -extern void kernel_lsp_pass_fail(zebra_lsp_t *lsp, enum dp_results res); +extern void kernel_lsp_pass_fail(zebra_lsp_t *lsp, enum zebra_dplane_status res); extern int mpls_kernel_init(void); diff --git a/zebra/rt_netlink.c b/zebra/rt_netlink.c index b600a7db5..fe42ab5be 100644 --- a/zebra/rt_netlink.c +++ b/zebra/rt_netlink.c @@ -1818,11 +1818,11 @@ int kernel_get_ipmr_sg_stats(struct zebra_vrf *zvrf, void *in) return suc; } -enum dp_req_result kernel_route_rib(struct route_node *rn, - const struct prefix *p, - const struct prefix *src_p, - struct route_entry *old, - struct route_entry *new) +enum zebra_dplane_result kernel_route_rib(struct route_node *rn, + const struct prefix *p, + const struct prefix *src_p, + struct route_entry *old, + struct route_entry *new) { int ret = 0; @@ -1852,20 +1852,20 @@ enum dp_req_result kernel_route_rib(struct route_node *rn, new, 0); } kernel_route_rib_pass_fail(rn, p, new, - (!ret) ? DP_INSTALL_SUCCESS - : DP_INSTALL_FAILURE); - return DP_REQUEST_SUCCESS; + (!ret) ? ZEBRA_DPLANE_INSTALL_SUCCESS + : ZEBRA_DPLANE_INSTALL_FAILURE); + return ZEBRA_DPLANE_REQUEST_SUCCESS; } if (old) { ret = netlink_route_multipath(RTM_DELROUTE, p, src_p, old, 0); kernel_route_rib_pass_fail(rn, p, old, - (!ret) ? DP_DELETE_SUCCESS - : DP_DELETE_FAILURE); + (!ret) ? ZEBRA_DPLANE_DELETE_SUCCESS + : ZEBRA_DPLANE_DELETE_FAILURE); } - return DP_REQUEST_SUCCESS; + return ZEBRA_DPLANE_REQUEST_SUCCESS; } int kernel_neigh_update(int add, int ifindex, uint32_t addr, char *lla, diff --git a/zebra/rt_socket.c b/zebra/rt_socket.c index a6de84d56..333b6ce95 100644 --- a/zebra/rt_socket.c +++ b/zebra/rt_socket.c @@ -391,18 +391,18 @@ static int kernel_rtm(int cmd, const struct prefix *p, struct route_entry *re) return 0; } -enum dp_req_result kernel_route_rib(struct route_node *rn, - const struct prefix *p, - const struct prefix *src_p, - struct route_entry *old, - struct route_entry *new) +enum zebra_dplane_result kernel_route_rib(struct route_node *rn, + const struct prefix *p, + const struct prefix *src_p, + struct route_entry *old, + struct route_entry *new) { int route = 0; if (src_p && src_p->prefixlen) { flog_warn(EC_ZEBRA_UNSUPPORTED_V6_SRCDEST, "%s: IPv6 sourcedest routes unsupported!", __func__); - return DP_REQUEST_FAILURE; + return ZEBRA_DPLANE_REQUEST_FAILURE; } frr_elevate_privs(&zserv_privs) { @@ -418,16 +418,16 @@ enum dp_req_result kernel_route_rib(struct route_node *rn, if (new) { kernel_route_rib_pass_fail( rn, p, new, - (!route) ? DP_INSTALL_SUCCESS - : DP_INSTALL_FAILURE); + (!route) ? ZEBRA_DPLANE_INSTALL_SUCCESS + : ZEBRA_DPLANE_INSTALL_FAILURE); } else { kernel_route_rib_pass_fail(rn, p, old, (!route) - ? DP_DELETE_SUCCESS - : DP_DELETE_FAILURE); + ? ZEBRA_DPLANE_DELETE_SUCCESS + : ZEBRA_DPLANE_DELETE_FAILURE); } - return DP_REQUEST_SUCCESS; + return ZEBRA_DPLANE_REQUEST_SUCCESS; } int kernel_neigh_update(int add, int ifindex, uint32_t addr, char *lla, diff --git a/zebra/rule_netlink.c b/zebra/rule_netlink.c index 518d81dd6..7686a0ac3 100644 --- a/zebra/rule_netlink.c +++ b/zebra/rule_netlink.c @@ -143,31 +143,31 @@ static int netlink_rule_update(int cmd, struct zebra_pbr_rule *rule) * goes in the rule to denote relative ordering; it may or may not be the * same as the rule's user-defined sequence number. */ -enum dp_req_result kernel_add_pbr_rule(struct zebra_pbr_rule *rule) +enum zebra_dplane_result kernel_add_pbr_rule(struct zebra_pbr_rule *rule) { int ret = 0; ret = netlink_rule_update(RTM_NEWRULE, rule); kernel_pbr_rule_add_del_status(rule, - (!ret) ? DP_INSTALL_SUCCESS - : DP_INSTALL_FAILURE); + (!ret) ? ZEBRA_DPLANE_INSTALL_SUCCESS + : ZEBRA_DPLANE_INSTALL_FAILURE); - return DP_REQUEST_SUCCESS; + return ZEBRA_DPLANE_REQUEST_SUCCESS; } /* * Uninstall specified rule for a specific interface. */ -enum dp_req_result kernel_del_pbr_rule(struct zebra_pbr_rule *rule) +enum zebra_dplane_result kernel_del_pbr_rule(struct zebra_pbr_rule *rule) { int ret = 0; ret = netlink_rule_update(RTM_DELRULE, rule); kernel_pbr_rule_add_del_status(rule, - (!ret) ? DP_DELETE_SUCCESS - : DP_DELETE_FAILURE); + (!ret) ? ZEBRA_DPLANE_DELETE_SUCCESS + : ZEBRA_DPLANE_DELETE_FAILURE); - return DP_REQUEST_SUCCESS; + return ZEBRA_DPLANE_REQUEST_SUCCESS; } /* diff --git a/zebra/rule_socket.c b/zebra/rule_socket.c index 11d9e00eb..c5660abf3 100644 --- a/zebra/rule_socket.c +++ b/zebra/rule_socket.c @@ -43,18 +43,18 @@ #include "zebra/zebra_pbr.h" #include "zebra/zebra_errors.h" -enum dp_req_result kernel_add_pbr_rule(struct zebra_pbr_rule *rule) +enum zebra_dplane_result kernel_add_pbr_rule(struct zebra_pbr_rule *rule) { flog_err(EC_LIB_UNAVAILABLE, "%s not Implemented for this platform", __PRETTY_FUNCTION__); - return DP_REQUEST_FAILURE; + return ZEBRA_DPLANE_REQUEST_FAILURE; } -enum dp_req_result kernel_del_pbr_rule(struct zebra_pbr_rule *rule) +enum zebra_dplane_result kernel_del_pbr_rule(struct zebra_pbr_rule *rule) { flog_err(EC_LIB_UNAVAILABLE, "%s not Implemented for this platform", __PRETTY_FUNCTION__); - return DP_REQUEST_FAILURE; + return ZEBRA_DPLANE_REQUEST_FAILURE; } #endif diff --git a/zebra/subdir.am b/zebra/subdir.am index a87fcec41..1d76ff65c 100644 --- a/zebra/subdir.am +++ b/zebra/subdir.am @@ -66,6 +66,7 @@ zebra_zebra_SOURCES = \ zebra/rule_socket.c \ zebra/zebra_l2.c \ zebra/zebra_memory.c \ + zebra/zebra_dplane.c \ zebra/zebra_mpls.c \ zebra/zebra_mpls_netlink.c \ zebra/zebra_mpls_openbsd.c \ @@ -115,6 +116,7 @@ noinst_HEADERS += \ zebra/rule_netlink.h \ zebra/zebra_fpm_private.h \ zebra/zebra_l2.h \ + zebra/zebra_dplane.h \ zebra/zebra_memory.h \ zebra/zebra_mpls.h \ zebra/zebra_mroute.h \ diff --git a/zebra/zebra_dplane.c b/zebra/zebra_dplane.c new file mode 100644 index 000000000..c0e493986 --- /dev/null +++ b/zebra/zebra_dplane.c @@ -0,0 +1,21 @@ +/* + * Zebra dataplane layer. + * Copyright (c) 2018 Volta Networks, Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; see the file COPYING; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include +#include "zebra_dplane.h" diff --git a/zebra/zebra_dplane.h b/zebra/zebra_dplane.h new file mode 100644 index 000000000..27854e79d --- /dev/null +++ b/zebra/zebra_dplane.h @@ -0,0 +1,72 @@ +/* + * Zebra dataplane layer api interfaces. + * Copyright (c) 2018 Volta Networks, Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; see the file COPYING; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef _ZEBRA_DPLANE_H +#define _ZEBRA_DPLANE_H 1 + +#include "zebra.h" +#include "zserv.h" +#include "prefix.h" +#include "nexthop.h" +#include "nexthop_group.h" + + +/* + * API between the zebra dataplane system and the main zebra processing + * context. + */ + +/* + * Enqueue a route install or update for the dataplane. + */ + +/* + * Enqueue a route removal for the dataplane. + */ + +/* + * Result codes used when returning status back to the main zebra context. + */ + +/* + * Philosophy Note: + * + * Flags being SET/UNSET do not belong in the South Bound + * Interface. This Setting belongs at the calling level + * because we can and will have multiple different interfaces + * and we will have potentially multiple different + * modules/filters to call. As such Setting/Unsetting + * success failure should be handled by the caller. + */ +enum zebra_dplane_status { + ZEBRA_DPLANE_STATUS_NONE = 0, + ZEBRA_DPLANE_INSTALL_SUCCESS, + ZEBRA_DPLANE_INSTALL_FAILURE, + ZEBRA_DPLANE_DELETE_SUCCESS, + ZEBRA_DPLANE_DELETE_FAILURE, + +}; + +enum zebra_dplane_result { + ZEBRA_DPLANE_REQUEST_QUEUED, + ZEBRA_DPLANE_REQUEST_SUCCESS, + ZEBRA_DPLANE_REQUEST_FAILURE, +}; + +#endif /* _ZEBRA_DPLANE_H */ diff --git a/zebra/zebra_mpls.c b/zebra/zebra_mpls.c index c19aeb626..0d1ccdc5a 100644 --- a/zebra/zebra_mpls.c +++ b/zebra/zebra_mpls.c @@ -917,14 +917,14 @@ static wq_item_status lsp_process(struct work_queue *wq, void *data) UNSET_FLAG(lsp->flags, LSP_FLAG_CHANGED); switch (kernel_add_lsp(lsp)) { - case DP_REQUEST_QUEUED: + case ZEBRA_DPLANE_REQUEST_QUEUED: flog_err( EC_ZEBRA_DP_INVALID_RC, "No current DataPlane interfaces can return this, please fix"); break; - case DP_REQUEST_FAILURE: + case ZEBRA_DPLANE_REQUEST_FAILURE: break; - case DP_REQUEST_SUCCESS: + case ZEBRA_DPLANE_REQUEST_SUCCESS: zvrf->lsp_installs++; break; } @@ -934,14 +934,14 @@ static wq_item_status lsp_process(struct work_queue *wq, void *data) if (!newbest) { switch (kernel_del_lsp(lsp)) { - case DP_REQUEST_QUEUED: + case ZEBRA_DPLANE_REQUEST_QUEUED: flog_err( EC_ZEBRA_DP_INVALID_RC, "No current DataPlane interfaces can return this, please fix"); break; - case DP_REQUEST_FAILURE: + case ZEBRA_DPLANE_REQUEST_FAILURE: break; - case DP_REQUEST_SUCCESS: + case ZEBRA_DPLANE_REQUEST_SUCCESS: zvrf->lsp_removals++; break; } @@ -974,14 +974,14 @@ static wq_item_status lsp_process(struct work_queue *wq, void *data) } switch (kernel_upd_lsp(lsp)) { - case DP_REQUEST_QUEUED: + case ZEBRA_DPLANE_REQUEST_QUEUED: flog_err( EC_ZEBRA_DP_INVALID_RC, "No current DataPlane interfaces can return this, please fix"); break; - case DP_REQUEST_FAILURE: + case ZEBRA_DPLANE_REQUEST_FAILURE: break; - case DP_REQUEST_SUCCESS: + case ZEBRA_DPLANE_REQUEST_SUCCESS: zvrf->lsp_installs++; break; } @@ -1716,7 +1716,7 @@ static int mpls_processq_init(struct zebra_t *zebra) /* Public functions */ -void kernel_lsp_pass_fail(zebra_lsp_t *lsp, enum dp_results res) +void kernel_lsp_pass_fail(zebra_lsp_t *lsp, enum zebra_dplane_status res) { struct nexthop *nexthop; zebra_nhlfe_t *nhlfe; @@ -1725,13 +1725,13 @@ void kernel_lsp_pass_fail(zebra_lsp_t *lsp, enum dp_results res) return; switch (res) { - case DP_INSTALL_FAILURE: + case ZEBRA_DPLANE_INSTALL_FAILURE: UNSET_FLAG(lsp->flags, LSP_FLAG_INSTALLED); clear_nhlfe_installed(lsp); flog_warn(EC_ZEBRA_LSP_INSTALL_FAILURE, "LSP Install Failure: %u", lsp->ile.in_label); break; - case DP_INSTALL_SUCCESS: + case ZEBRA_DPLANE_INSTALL_SUCCESS: SET_FLAG(lsp->flags, LSP_FLAG_INSTALLED); for (nhlfe = lsp->nhlfe_list; nhlfe; nhlfe = nhlfe->next) { nexthop = nhlfe->nexthop; @@ -1742,14 +1742,16 @@ void kernel_lsp_pass_fail(zebra_lsp_t *lsp, enum dp_results res) SET_FLAG(nexthop->flags, NEXTHOP_FLAG_FIB); } break; - case DP_DELETE_SUCCESS: + case ZEBRA_DPLANE_DELETE_SUCCESS: UNSET_FLAG(lsp->flags, LSP_FLAG_INSTALLED); clear_nhlfe_installed(lsp); break; - case DP_DELETE_FAILURE: + case ZEBRA_DPLANE_DELETE_FAILURE: flog_warn(EC_ZEBRA_LSP_DELETE_FAILURE, "LSP Deletion Failure: %u", lsp->ile.in_label); break; + case ZEBRA_DPLANE_STATUS_NONE: + break; } } diff --git a/zebra/zebra_mpls_netlink.c b/zebra/zebra_mpls_netlink.c index 245a77178..c4ab316d0 100644 --- a/zebra/zebra_mpls_netlink.c +++ b/zebra/zebra_mpls_netlink.c @@ -29,22 +29,22 @@ /* * Install Label Forwarding entry into the kernel. */ -enum dp_req_result kernel_add_lsp(zebra_lsp_t *lsp) +enum zebra_dplane_result kernel_add_lsp(zebra_lsp_t *lsp) { int ret; if (!lsp || !lsp->best_nhlfe) { // unexpected - kernel_lsp_pass_fail(lsp, DP_INSTALL_FAILURE); - return DP_REQUEST_FAILURE; + kernel_lsp_pass_fail(lsp, ZEBRA_DPLANE_INSTALL_FAILURE); + return ZEBRA_DPLANE_REQUEST_FAILURE; } ret = netlink_mpls_multipath(RTM_NEWROUTE, lsp); kernel_lsp_pass_fail(lsp, - (!ret) ? DP_INSTALL_SUCCESS - : DP_INSTALL_FAILURE); + (!ret) ? ZEBRA_DPLANE_INSTALL_SUCCESS + : ZEBRA_DPLANE_INSTALL_FAILURE); - return DP_REQUEST_SUCCESS; + return ZEBRA_DPLANE_REQUEST_SUCCESS; } /* @@ -58,48 +58,48 @@ enum dp_req_result kernel_add_lsp(zebra_lsp_t *lsp) * through the metric field (before kernel-MPLS). This shouldn't be an issue * any longer, so REPLACE can be reintroduced. */ -enum dp_req_result kernel_upd_lsp(zebra_lsp_t *lsp) +enum zebra_dplane_result kernel_upd_lsp(zebra_lsp_t *lsp) { int ret; if (!lsp || !lsp->best_nhlfe) { // unexpected - kernel_lsp_pass_fail(lsp, DP_INSTALL_FAILURE); - return DP_REQUEST_FAILURE; + kernel_lsp_pass_fail(lsp, ZEBRA_DPLANE_INSTALL_FAILURE); + return ZEBRA_DPLANE_REQUEST_FAILURE; } ret = netlink_mpls_multipath(RTM_NEWROUTE, lsp); kernel_lsp_pass_fail(lsp, - (!ret) ? DP_INSTALL_SUCCESS - : DP_INSTALL_FAILURE); + (!ret) ? ZEBRA_DPLANE_INSTALL_SUCCESS + : ZEBRA_DPLANE_INSTALL_FAILURE); - return DP_REQUEST_SUCCESS; + return ZEBRA_DPLANE_REQUEST_SUCCESS; } /* * Delete Label Forwarding entry from the kernel. */ -enum dp_req_result kernel_del_lsp(zebra_lsp_t *lsp) +enum zebra_dplane_result kernel_del_lsp(zebra_lsp_t *lsp) { int ret; if (!lsp) { // unexpected - kernel_lsp_pass_fail(lsp, DP_DELETE_FAILURE); - return DP_REQUEST_FAILURE; + kernel_lsp_pass_fail(lsp, ZEBRA_DPLANE_DELETE_FAILURE); + return ZEBRA_DPLANE_REQUEST_FAILURE; } if (!CHECK_FLAG(lsp->flags, LSP_FLAG_INSTALLED)) { - kernel_lsp_pass_fail(lsp, DP_DELETE_FAILURE); - return DP_REQUEST_FAILURE; + kernel_lsp_pass_fail(lsp, ZEBRA_DPLANE_DELETE_FAILURE); + return ZEBRA_DPLANE_REQUEST_FAILURE; } ret = netlink_mpls_multipath(RTM_DELROUTE, lsp); kernel_lsp_pass_fail(lsp, - (!ret) ? DP_DELETE_SUCCESS - : DP_DELETE_FAILURE); + (!ret) ? ZEBRA_DPLANE_DELETE_SUCCESS + : ZEBRA_DPLANE_DELETE_FAILURE); - return DP_REQUEST_SUCCESS; + return ZEBRA_DPLANE_REQUEST_SUCCESS; } int mpls_kernel_init(void) diff --git a/zebra/zebra_mpls_null.c b/zebra/zebra_mpls_null.c index d1371d334..02ec506d8 100644 --- a/zebra/zebra_mpls_null.c +++ b/zebra/zebra_mpls_null.c @@ -24,19 +24,19 @@ #if !defined(HAVE_NETLINK) && !defined(OPEN_BSD) -enum dp_req_result kernel_add_lsp(zebra_lsp_t *lsp) +enum zebra_dplane_result kernel_add_lsp(zebra_lsp_t *lsp) { - return DP_REQUEST_SUCCESS; + return ZEBRA_DPLANE_REQUEST_SUCCESS; } -enum dp_req_result kernel_upd_lsp(zebra_lsp_t *lsp) +enum zebra_dplane_result kernel_upd_lsp(zebra_lsp_t *lsp) { - return DP_REQUEST_SUCCESS; + return ZEBRA_DPLANE_REQUEST_SUCCESS; } -enum dp_req_result kernel_del_lsp(zebra_lsp_t *lsp) +enum zebra_dplane_result kernel_del_lsp(zebra_lsp_t *lsp) { - return DP_REQUEST_SUCCESS; + return ZEBRA_DPLANE_REQUEST_SUCCESS; } int mpls_kernel_init(void) diff --git a/zebra/zebra_mpls_openbsd.c b/zebra/zebra_mpls_openbsd.c index 71679f26d..60f944b84 100644 --- a/zebra/zebra_mpls_openbsd.c +++ b/zebra/zebra_mpls_openbsd.c @@ -285,62 +285,62 @@ static int kernel_lsp_cmd(int action, zebra_lsp_t *lsp) return (0); } -enum dp_req_result kernel_add_lsp(zebra_lsp_t *lsp) +enum zebra_dplane_result kernel_add_lsp(zebra_lsp_t *lsp) { int ret; if (!lsp || !lsp->best_nhlfe) { // unexpected - kernel_lsp_pass_fail(lsp, DP_INSTALL_FAILURE); - return DP_REQUEST_FAILURE; + kernel_lsp_pass_fail(lsp, ZEBRA_DPLANE_INSTALL_FAILURE); + return ZEBRA_DPLANE_REQUEST_FAILURE; } ret = kernel_lsp_cmd(RTM_ADD, lsp); kernel_lsp_pass_fail(lsp, - (!ret) ? DP_INSTALL_SUCCESS - : DP_INSTALL_FAILURE); + (!ret) ? ZEBRA_DPLANE_INSTALL_SUCCESS + : ZEBRA_DPLANE_INSTALL_FAILURE); - return DP_REQUEST_SUCCESS; + return ZEBRA_DPLANE_REQUEST_SUCCESS; } -enum dp_req_result kernel_upd_lsp(zebra_lsp_t *lsp) +enum zebra_dplane_result kernel_upd_lsp(zebra_lsp_t *lsp) { int ret; if (!lsp || !lsp->best_nhlfe) { // unexpected - kernel_lsp_pass_fail(lsp, DP_INSTALL_FAILURE); - return DP_REQUEST_FAILURE; + kernel_lsp_pass_fail(lsp, ZEBRA_DPLANE_INSTALL_FAILURE); + return ZEBRA_DPLANE_REQUEST_FAILURE; } ret = kernel_lsp_cmd(RTM_CHANGE, lsp); kernel_lsp_pass_fail(lsp, - (!ret) ? DP_INSTALL_SUCCESS - : DP_INSTALL_FAILURE); - return DP_REQUEST_SUCCESS; + (!ret) ? ZEBRA_DPLANE_INSTALL_SUCCESS + : ZEBRA_DPLANE_INSTALL_FAILURE); + return ZEBRA_DPLANE_REQUEST_SUCCESS; } -enum dp_req_result kernel_del_lsp(zebra_lsp_t *lsp) +enum zebra_dplane_result kernel_del_lsp(zebra_lsp_t *lsp) { int ret; if (!lsp) { // unexpected - kernel_lsp_pass_fail(lsp, DP_DELETE_FAILURE); - return DP_REQUEST_FAILURE; + kernel_lsp_pass_fail(lsp, ZEBRA_DPLANE_DELETE_FAILURE); + return ZEBRA_DPLANE_REQUEST_FAILURE; } if (!CHECK_FLAG(lsp->flags, LSP_FLAG_INSTALLED)) { - kernel_lsp_pass_fail(lsp, DP_DELETE_FAILURE); - return DP_REQUEST_FAILURE; + kernel_lsp_pass_fail(lsp, ZEBRA_DPLANE_DELETE_FAILURE); + return ZEBRA_DPLANE_REQUEST_FAILURE; } ret = kernel_lsp_cmd(RTM_DELETE, lsp); kernel_lsp_pass_fail(lsp, - (!ret) ? DP_DELETE_SUCCESS - : DP_DELETE_FAILURE); + (!ret) ? ZEBRA_DPLANE_DELETE_SUCCESS + : ZEBRA_DPLANE_DELETE_FAILURE); - return DP_REQUEST_SUCCESS; + return ZEBRA_DPLANE_REQUEST_SUCCESS; } static int kmpw_install(struct zebra_pw *pw) diff --git a/zebra/zebra_pbr.c b/zebra/zebra_pbr.c index 275e045d4..40f97765d 100644 --- a/zebra/zebra_pbr.c +++ b/zebra/zebra_pbr.c @@ -565,8 +565,8 @@ void zebra_pbr_create_ipset(struct zebra_ns *zns, ret = hook_call(zebra_pbr_ipset_wrap_script_update, zns, 1, ipset); kernel_pbr_ipset_add_del_status(ipset, - ret ? DP_INSTALL_SUCCESS - : DP_INSTALL_FAILURE); + ret ? ZEBRA_DPLANE_INSTALL_SUCCESS + : ZEBRA_DPLANE_INSTALL_FAILURE); } void zebra_pbr_destroy_ipset(struct zebra_ns *zns, @@ -650,8 +650,8 @@ void zebra_pbr_add_ipset_entry(struct zebra_ns *zns, ret = hook_call(zebra_pbr_ipset_entry_wrap_script_update, zns, 1, ipset); kernel_pbr_ipset_entry_add_del_status(ipset, - ret ? DP_INSTALL_SUCCESS - : DP_INSTALL_FAILURE); + ret ? ZEBRA_DPLANE_INSTALL_SUCCESS + : ZEBRA_DPLANE_INSTALL_FAILURE); } void zebra_pbr_del_ipset_entry(struct zebra_ns *zns, @@ -693,8 +693,8 @@ void zebra_pbr_add_iptable(struct zebra_ns *zns, pbr_iptable_alloc_intern); ret = hook_call(zebra_pbr_iptable_wrap_script_update, zns, 1, iptable); kernel_pbr_iptable_add_del_status(iptable, - ret ? DP_INSTALL_SUCCESS - : DP_INSTALL_FAILURE); + ret ? ZEBRA_DPLANE_INSTALL_SUCCESS + : ZEBRA_DPLANE_INSTALL_FAILURE); } void zebra_pbr_del_iptable(struct zebra_ns *zns, @@ -725,21 +725,23 @@ void zebra_pbr_del_iptable(struct zebra_ns *zns, * Handle success or failure of rule (un)install in the kernel. */ void kernel_pbr_rule_add_del_status(struct zebra_pbr_rule *rule, - enum dp_results res) + enum zebra_dplane_status res) { switch (res) { - case DP_INSTALL_SUCCESS: + case ZEBRA_DPLANE_INSTALL_SUCCESS: zsend_rule_notify_owner(rule, ZAPI_RULE_INSTALLED); break; - case DP_INSTALL_FAILURE: + case ZEBRA_DPLANE_INSTALL_FAILURE: zsend_rule_notify_owner(rule, ZAPI_RULE_FAIL_INSTALL); break; - case DP_DELETE_SUCCESS: + case ZEBRA_DPLANE_DELETE_SUCCESS: zsend_rule_notify_owner(rule, ZAPI_RULE_REMOVED); break; - case DP_DELETE_FAILURE: + case ZEBRA_DPLANE_DELETE_FAILURE: zsend_rule_notify_owner(rule, ZAPI_RULE_FAIL_REMOVE); break; + case ZEBRA_DPLANE_STATUS_NONE: + break; } } @@ -747,21 +749,23 @@ void kernel_pbr_rule_add_del_status(struct zebra_pbr_rule *rule, * Handle success or failure of ipset (un)install in the kernel. */ void kernel_pbr_ipset_add_del_status(struct zebra_pbr_ipset *ipset, - enum dp_results res) + enum zebra_dplane_status res) { switch (res) { - case DP_INSTALL_SUCCESS: + case ZEBRA_DPLANE_INSTALL_SUCCESS: zsend_ipset_notify_owner(ipset, ZAPI_IPSET_INSTALLED); break; - case DP_INSTALL_FAILURE: + case ZEBRA_DPLANE_INSTALL_FAILURE: zsend_ipset_notify_owner(ipset, ZAPI_IPSET_FAIL_INSTALL); break; - case DP_DELETE_SUCCESS: + case ZEBRA_DPLANE_DELETE_SUCCESS: zsend_ipset_notify_owner(ipset, ZAPI_IPSET_REMOVED); break; - case DP_DELETE_FAILURE: + case ZEBRA_DPLANE_DELETE_FAILURE: zsend_ipset_notify_owner(ipset, ZAPI_IPSET_FAIL_REMOVE); break; + case ZEBRA_DPLANE_STATUS_NONE: + break; } } @@ -770,25 +774,27 @@ void kernel_pbr_ipset_add_del_status(struct zebra_pbr_ipset *ipset, */ void kernel_pbr_ipset_entry_add_del_status( struct zebra_pbr_ipset_entry *ipset, - enum dp_results res) + enum zebra_dplane_status res) { switch (res) { - case DP_INSTALL_SUCCESS: + case ZEBRA_DPLANE_INSTALL_SUCCESS: zsend_ipset_entry_notify_owner(ipset, ZAPI_IPSET_ENTRY_INSTALLED); break; - case DP_INSTALL_FAILURE: + case ZEBRA_DPLANE_INSTALL_FAILURE: zsend_ipset_entry_notify_owner(ipset, ZAPI_IPSET_ENTRY_FAIL_INSTALL); break; - case DP_DELETE_SUCCESS: + case ZEBRA_DPLANE_DELETE_SUCCESS: zsend_ipset_entry_notify_owner(ipset, ZAPI_IPSET_ENTRY_REMOVED); break; - case DP_DELETE_FAILURE: + case ZEBRA_DPLANE_DELETE_FAILURE: zsend_ipset_entry_notify_owner(ipset, ZAPI_IPSET_ENTRY_FAIL_REMOVE); break; + case ZEBRA_DPLANE_STATUS_NONE: + break; } } @@ -796,23 +802,25 @@ void kernel_pbr_ipset_entry_add_del_status( * Handle success or failure of ipset (un)install in the kernel. */ void kernel_pbr_iptable_add_del_status(struct zebra_pbr_iptable *iptable, - enum dp_results res) + enum zebra_dplane_status res) { switch (res) { - case DP_INSTALL_SUCCESS: + case ZEBRA_DPLANE_INSTALL_SUCCESS: zsend_iptable_notify_owner(iptable, ZAPI_IPTABLE_INSTALLED); break; - case DP_INSTALL_FAILURE: + case ZEBRA_DPLANE_INSTALL_FAILURE: zsend_iptable_notify_owner(iptable, ZAPI_IPTABLE_FAIL_INSTALL); break; - case DP_DELETE_SUCCESS: + case ZEBRA_DPLANE_DELETE_SUCCESS: zsend_iptable_notify_owner(iptable, ZAPI_IPTABLE_REMOVED); break; - case DP_DELETE_FAILURE: + case ZEBRA_DPLANE_DELETE_FAILURE: zsend_iptable_notify_owner(iptable, ZAPI_IPTABLE_FAIL_REMOVE); break; + case ZEBRA_DPLANE_STATUS_NONE: + break; } } diff --git a/zebra/zebra_pbr.h b/zebra/zebra_pbr.h index 0db33d1f8..3311af4d2 100644 --- a/zebra/zebra_pbr.h +++ b/zebra/zebra_pbr.h @@ -175,37 +175,36 @@ void zebra_pbr_del_iptable(struct zebra_ns *zns, * forwarding plane may not coincide, hence the API requires a separate * rule priority - maps to preference/FRA_PRIORITY on Linux. */ -extern enum dp_req_result kernel_add_pbr_rule(struct zebra_pbr_rule *rule); +extern enum zebra_dplane_result kernel_add_pbr_rule(struct zebra_pbr_rule *rule); /* * Uninstall specified rule for a specific interface. */ -extern enum dp_req_result kernel_del_pbr_rule(struct zebra_pbr_rule *rule); +extern enum zebra_dplane_result kernel_del_pbr_rule(struct zebra_pbr_rule *rule); /* * Get to know existing PBR rules in the kernel - typically called at startup. */ extern void kernel_read_pbr_rules(struct zebra_ns *zns); -enum dp_results; /* * Handle success or failure of rule (un)install in the kernel. */ extern void kernel_pbr_rule_add_del_status(struct zebra_pbr_rule *rule, - enum dp_results res); + enum zebra_dplane_status res); /* * Handle success or failure of ipset kinds (un)install in the kernel. */ extern void kernel_pbr_ipset_add_del_status(struct zebra_pbr_ipset *ipset, - enum dp_results res); + enum zebra_dplane_status res); extern void kernel_pbr_ipset_entry_add_del_status( struct zebra_pbr_ipset_entry *ipset, - enum dp_results res); + enum zebra_dplane_status res); extern void kernel_pbr_iptable_add_del_status(struct zebra_pbr_iptable *iptable, - enum dp_results res); + enum zebra_dplane_status res); /* * Handle rule delete notification from kernel. diff --git a/zebra/zebra_rib.c b/zebra/zebra_rib.c index 5853bdd46..0e9693f05 100644 --- a/zebra/zebra_rib.c +++ b/zebra/zebra_rib.c @@ -1060,7 +1060,7 @@ int zebra_rib_labeled_unicast(struct route_entry *re) void kernel_route_rib_pass_fail(struct route_node *rn, const struct prefix *p, struct route_entry *re, - enum dp_results res) + enum zebra_dplane_status res) { struct nexthop *nexthop; char buf[PREFIX_STRLEN]; @@ -1069,7 +1069,7 @@ void kernel_route_rib_pass_fail(struct route_node *rn, const struct prefix *p, dest = rib_dest_from_rnode(rn); switch (res) { - case DP_INSTALL_SUCCESS: + case ZEBRA_DPLANE_INSTALL_SUCCESS: dest->selected_fib = re; for (ALL_NEXTHOPS(re->ng, nexthop)) { if (CHECK_FLAG(nexthop->flags, NEXTHOP_FLAG_RECURSIVE)) @@ -1082,7 +1082,7 @@ void kernel_route_rib_pass_fail(struct route_node *rn, const struct prefix *p, } zsend_route_notify_owner(re, p, ZAPI_ROUTE_INSTALLED); break; - case DP_INSTALL_FAILURE: + case ZEBRA_DPLANE_INSTALL_FAILURE: /* * I am not sure this is the right thing to do here * but the code always set selected_fib before @@ -1095,7 +1095,7 @@ void kernel_route_rib_pass_fail(struct route_node *rn, const struct prefix *p, "%u:%s: Route install failed", re->vrf_id, prefix2str(p, buf, sizeof(buf))); break; - case DP_DELETE_SUCCESS: + case ZEBRA_DPLANE_DELETE_SUCCESS: /* * The case where selected_fib is not re is * when we have received a system route @@ -1110,7 +1110,7 @@ void kernel_route_rib_pass_fail(struct route_node *rn, const struct prefix *p, zsend_route_notify_owner(re, p, ZAPI_ROUTE_REMOVED); break; - case DP_DELETE_FAILURE: + case ZEBRA_DPLANE_DELETE_FAILURE: /* * Should we set this to NULL if the * delete fails? @@ -1122,6 +1122,8 @@ void kernel_route_rib_pass_fail(struct route_node *rn, const struct prefix *p, zsend_route_notify_owner(re, p, ZAPI_ROUTE_REMOVE_FAIL); break; + case ZEBRA_DPLANE_STATUS_NONE: + break; } } @@ -1172,17 +1174,17 @@ void rib_install_kernel(struct route_node *rn, struct route_entry *re, */ hook_call(rib_update, rn, "installing in kernel"); switch (kernel_route_rib(rn, p, src_p, old, re)) { - case DP_REQUEST_QUEUED: + case ZEBRA_DPLANE_REQUEST_QUEUED: flog_err( EC_ZEBRA_DP_INVALID_RC, "No current known DataPlane interfaces can return this, please fix"); break; - case DP_REQUEST_FAILURE: + case ZEBRA_DPLANE_REQUEST_FAILURE: flog_err( EC_ZEBRA_DP_INSTALL_FAIL, "No current known Rib Install Failure cases, please fix"); break; - case DP_REQUEST_SUCCESS: + case ZEBRA_DPLANE_REQUEST_SUCCESS: zvrf->installs++; break; } @@ -1212,17 +1214,17 @@ void rib_uninstall_kernel(struct route_node *rn, struct route_entry *re) */ hook_call(rib_update, rn, "uninstalling from kernel"); switch (kernel_route_rib(rn, p, src_p, re, NULL)) { - case DP_REQUEST_QUEUED: + case ZEBRA_DPLANE_REQUEST_QUEUED: flog_err( EC_ZEBRA_DP_INVALID_RC, "No current known DataPlane interfaces can return this, please fix"); break; - case DP_REQUEST_FAILURE: + case ZEBRA_DPLANE_REQUEST_FAILURE: flog_err( EC_ZEBRA_DP_INSTALL_FAIL, "No current known RIB Install Failure cases, please fix"); break; - case DP_REQUEST_SUCCESS: + case ZEBRA_DPLANE_REQUEST_SUCCESS: if (zvrf) zvrf->removals++; break; -- 2.39.2