diff options
| -rw-r--r-- | zebra/rt.h | 46 | ||||
| -rw-r--r-- | zebra/rt_netlink.c | 22 | ||||
| -rw-r--r-- | zebra/rt_socket.c | 22 | ||||
| -rw-r--r-- | zebra/rule_netlink.c | 16 | ||||
| -rw-r--r-- | zebra/rule_socket.c | 8 | ||||
| -rw-r--r-- | zebra/subdir.am | 2 | ||||
| -rw-r--r-- | zebra/zebra_dplane.c | 21 | ||||
| -rw-r--r-- | zebra/zebra_dplane.h | 72 | ||||
| -rw-r--r-- | zebra/zebra_mpls.c | 30 | ||||
| -rw-r--r-- | zebra/zebra_mpls_netlink.c | 40 | ||||
| -rw-r--r-- | zebra/zebra_mpls_null.c | 12 | ||||
| -rw-r--r-- | zebra/zebra_mpls_openbsd.c | 40 | ||||
| -rw-r--r-- | zebra/zebra_pbr.c | 60 | ||||
| -rw-r--r-- | zebra/zebra_pbr.h | 13 | ||||
| -rw-r--r-- | zebra/zebra_rib.c | 24 | 
15 files changed, 255 insertions, 173 deletions
diff --git a/zebra/rt.h b/zebra/rt.h index e40bae3a3e..90ee6f6418 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 b600a7db50..fe42ab5be6 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 a6de84d56f..333b6ce95e 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 518d81dd6e..7686a0ac32 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 11d9e00ebb..c5660abf3a 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 a87fcec41f..1d76ff65ca 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 0000000000..c0e4939860 --- /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 <zebra.h> +#include "zebra_dplane.h" diff --git a/zebra/zebra_dplane.h b/zebra/zebra_dplane.h new file mode 100644 index 0000000000..27854e79d3 --- /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 c19aeb6260..0d1ccdc5aa 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 245a771784..c4ab316d0b 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 d1371d3343..02ec506d84 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 71679f26d6..60f944b844 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 275e045d43..40f97765da 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 0db33d1f8c..3311af4d26 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 5853bdd465..0e9693f053 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;  | 
