mirror of
https://git.proxmox.com/git/mirror_frr
synced 2026-08-02 08:33:36 +00:00
zebra: Create zebra_dplane.c and .h
Add first sketchy 'dplane' files. Signed-off-by: Mark Stapp <mjs@voltanet.io> Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
This commit is contained in:
parent
dc790ba83d
commit
ea1c14f680
46
zebra/rt.h
46
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);
|
||||
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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 \
|
||||
|
||||
21
zebra/zebra_dplane.c
Normal file
21
zebra/zebra_dplane.c
Normal file
@ -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"
|
||||
72
zebra/zebra_dplane.h
Normal file
72
zebra/zebra_dplane.h
Normal file
@ -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 */
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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.
|
||||
|
||||
@ -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;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user