mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-05-31 00:10:43 +00:00
Merge pull request #7973 from sworleys/Pbr-More-Fixes
zebra,pbrd,doc: PBR more fixes
This commit is contained in:
commit
d887c7bf04
@ -258,6 +258,21 @@ causes the policy to be installed into the kernel.
|
|||||||
| valid | Is the map well-formed? | Boolean |
|
| valid | Is the map well-formed? | Boolean |
|
||||||
+--------+----------------------------+---------+
|
+--------+----------------------------+---------+
|
||||||
|
|
||||||
|
.. _pbr-debugs:
|
||||||
|
|
||||||
|
PBR Debugs
|
||||||
|
===========
|
||||||
|
|
||||||
|
.. index:: debug pbr
|
||||||
|
.. clicmd:: debug pbr events|map|nht|zebra
|
||||||
|
|
||||||
|
Debug pbr in pbrd daemon. You specify what types of debugs to turn on.
|
||||||
|
|
||||||
|
.. index:: debug zebra pbr
|
||||||
|
.. clicmd:: debug zebra pbr
|
||||||
|
|
||||||
|
Debug pbr in zebra daemon.
|
||||||
|
|
||||||
.. _pbr-details:
|
.. _pbr-details:
|
||||||
|
|
||||||
PBR Details
|
PBR Details
|
||||||
|
@ -711,7 +711,6 @@ pbr_nht_individual_nexthop_gw_update(struct pbr_nexthop_cache *pnhc,
|
|||||||
struct pbr_nht_individual *pnhi)
|
struct pbr_nht_individual *pnhi)
|
||||||
{
|
{
|
||||||
bool is_valid = pnhc->valid;
|
bool is_valid = pnhc->valid;
|
||||||
bool all_done = false;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If we have an interface down event, let's note that
|
* If we have an interface down event, let's note that
|
||||||
@ -723,43 +722,19 @@ pbr_nht_individual_nexthop_gw_update(struct pbr_nexthop_cache *pnhc,
|
|||||||
* interface event.
|
* interface event.
|
||||||
*/
|
*/
|
||||||
if (!pnhi->nhr && pnhi->ifp) {
|
if (!pnhi->nhr && pnhi->ifp) {
|
||||||
struct connected *connected;
|
|
||||||
struct listnode *node;
|
|
||||||
struct prefix p;
|
|
||||||
|
|
||||||
switch (pnhc->nexthop.type) {
|
switch (pnhc->nexthop.type) {
|
||||||
case NEXTHOP_TYPE_BLACKHOLE:
|
case NEXTHOP_TYPE_BLACKHOLE:
|
||||||
all_done = true;
|
case NEXTHOP_TYPE_IPV4:
|
||||||
break;
|
case NEXTHOP_TYPE_IPV6:
|
||||||
|
goto done;
|
||||||
case NEXTHOP_TYPE_IFINDEX:
|
case NEXTHOP_TYPE_IFINDEX:
|
||||||
case NEXTHOP_TYPE_IPV4_IFINDEX:
|
case NEXTHOP_TYPE_IPV4_IFINDEX:
|
||||||
case NEXTHOP_TYPE_IPV6_IFINDEX:
|
case NEXTHOP_TYPE_IPV6_IFINDEX:
|
||||||
|
if (pnhc->nexthop.ifindex == pnhi->ifp->ifindex)
|
||||||
is_valid = if_is_up(pnhi->ifp);
|
is_valid = if_is_up(pnhi->ifp);
|
||||||
all_done = true;
|
|
||||||
break;
|
|
||||||
case NEXTHOP_TYPE_IPV4:
|
|
||||||
p.family = AF_INET;
|
|
||||||
p.prefixlen = IPV4_MAX_BITLEN;
|
|
||||||
p.u.prefix4 = pnhc->nexthop.gate.ipv4;
|
|
||||||
break;
|
|
||||||
case NEXTHOP_TYPE_IPV6:
|
|
||||||
p.family = AF_INET6;
|
|
||||||
p.prefixlen = IPV6_MAX_BITLEN;
|
|
||||||
memcpy(&p.u.prefix6, &pnhc->nexthop.gate.ipv6,
|
|
||||||
sizeof(struct in6_addr));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Early exit in a couple of cases. */
|
|
||||||
if (all_done)
|
|
||||||
goto done;
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
FOR_ALL_INTERFACES_ADDRESSES (pnhi->ifp, connected, node) {
|
|
||||||
if (prefix_match(connected->address, &p)) {
|
|
||||||
is_valid = if_is_up(pnhi->ifp);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -41,6 +41,7 @@ unsigned long zebra_debug_dplane;
|
|||||||
unsigned long zebra_debug_mlag;
|
unsigned long zebra_debug_mlag;
|
||||||
unsigned long zebra_debug_nexthop;
|
unsigned long zebra_debug_nexthop;
|
||||||
unsigned long zebra_debug_evpn_mh;
|
unsigned long zebra_debug_evpn_mh;
|
||||||
|
unsigned long zebra_debug_pbr;
|
||||||
|
|
||||||
DEFINE_HOOK(zebra_debug_show_debugging, (struct vty *vty), (vty));
|
DEFINE_HOOK(zebra_debug_show_debugging, (struct vty *vty), (vty));
|
||||||
|
|
||||||
@ -122,6 +123,9 @@ DEFUN_NOSH (show_debugging_zebra,
|
|||||||
if (IS_ZEBRA_DEBUG_EVPN_MH_NEIGH)
|
if (IS_ZEBRA_DEBUG_EVPN_MH_NEIGH)
|
||||||
vty_out(vty, " Zebra EVPN-MH Neigh debugging is on\n");
|
vty_out(vty, " Zebra EVPN-MH Neigh debugging is on\n");
|
||||||
|
|
||||||
|
if (IS_ZEBRA_DEBUG_PBR)
|
||||||
|
vty_out(vty, " Zebra PBR debugging is on\n");
|
||||||
|
|
||||||
hook_call(zebra_debug_show_debugging, vty);
|
hook_call(zebra_debug_show_debugging, vty);
|
||||||
return CMD_SUCCESS;
|
return CMD_SUCCESS;
|
||||||
}
|
}
|
||||||
@ -318,6 +322,17 @@ DEFUN (debug_zebra_dplane,
|
|||||||
return CMD_SUCCESS;
|
return CMD_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DEFUN (debug_zebra_pbr,
|
||||||
|
debug_zebra_pbr_cmd,
|
||||||
|
"debug zebra pbr",
|
||||||
|
DEBUG_STR
|
||||||
|
"Zebra configuration\n"
|
||||||
|
"Debug zebra pbr events\n")
|
||||||
|
{
|
||||||
|
SET_FLAG(zebra_debug_pbr, ZEBRA_DEBUG_PBR);
|
||||||
|
return CMD_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
DEFPY (debug_zebra_mlag,
|
DEFPY (debug_zebra_mlag,
|
||||||
debug_zebra_mlag_cmd,
|
debug_zebra_mlag_cmd,
|
||||||
"[no$no] debug zebra mlag",
|
"[no$no] debug zebra mlag",
|
||||||
@ -508,6 +523,18 @@ DEFUN (no_debug_zebra_dplane,
|
|||||||
return CMD_SUCCESS;
|
return CMD_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DEFUN (no_debug_zebra_pbr,
|
||||||
|
no_debug_zebra_pbr_cmd,
|
||||||
|
"no debug zebra pbr",
|
||||||
|
NO_STR
|
||||||
|
DEBUG_STR
|
||||||
|
"Zebra configuration\n"
|
||||||
|
"Debug zebra pbr events\n")
|
||||||
|
{
|
||||||
|
zebra_debug_pbr = 0;
|
||||||
|
return CMD_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
DEFPY (debug_zebra_nexthop,
|
DEFPY (debug_zebra_nexthop,
|
||||||
debug_zebra_nexthop_cmd,
|
debug_zebra_nexthop_cmd,
|
||||||
"[no$no] debug zebra nexthop [detail$detail]",
|
"[no$no] debug zebra nexthop [detail$detail]",
|
||||||
@ -650,6 +677,11 @@ static int config_write_debug(struct vty *vty)
|
|||||||
write++;
|
write++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (IS_ZEBRA_DEBUG_PBR) {
|
||||||
|
vty_out(vty, "debug zebra pbr\n");
|
||||||
|
write++;
|
||||||
|
}
|
||||||
|
|
||||||
return write;
|
return write;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -668,6 +700,7 @@ void zebra_debug_init(void)
|
|||||||
zebra_debug_evpn_mh = 0;
|
zebra_debug_evpn_mh = 0;
|
||||||
zebra_debug_nht = 0;
|
zebra_debug_nht = 0;
|
||||||
zebra_debug_nexthop = 0;
|
zebra_debug_nexthop = 0;
|
||||||
|
zebra_debug_pbr = 0;
|
||||||
|
|
||||||
install_node(&debug_node);
|
install_node(&debug_node);
|
||||||
|
|
||||||
@ -686,6 +719,7 @@ void zebra_debug_init(void)
|
|||||||
install_element(ENABLE_NODE, &debug_zebra_dplane_cmd);
|
install_element(ENABLE_NODE, &debug_zebra_dplane_cmd);
|
||||||
install_element(ENABLE_NODE, &debug_zebra_mlag_cmd);
|
install_element(ENABLE_NODE, &debug_zebra_mlag_cmd);
|
||||||
install_element(ENABLE_NODE, &debug_zebra_nexthop_cmd);
|
install_element(ENABLE_NODE, &debug_zebra_nexthop_cmd);
|
||||||
|
install_element(ENABLE_NODE, &debug_zebra_pbr_cmd);
|
||||||
install_element(ENABLE_NODE, &no_debug_zebra_events_cmd);
|
install_element(ENABLE_NODE, &no_debug_zebra_events_cmd);
|
||||||
install_element(ENABLE_NODE, &no_debug_zebra_nht_cmd);
|
install_element(ENABLE_NODE, &no_debug_zebra_nht_cmd);
|
||||||
install_element(ENABLE_NODE, &no_debug_zebra_mpls_cmd);
|
install_element(ENABLE_NODE, &no_debug_zebra_mpls_cmd);
|
||||||
@ -696,6 +730,7 @@ void zebra_debug_init(void)
|
|||||||
install_element(ENABLE_NODE, &no_debug_zebra_rib_cmd);
|
install_element(ENABLE_NODE, &no_debug_zebra_rib_cmd);
|
||||||
install_element(ENABLE_NODE, &no_debug_zebra_fpm_cmd);
|
install_element(ENABLE_NODE, &no_debug_zebra_fpm_cmd);
|
||||||
install_element(ENABLE_NODE, &no_debug_zebra_dplane_cmd);
|
install_element(ENABLE_NODE, &no_debug_zebra_dplane_cmd);
|
||||||
|
install_element(ENABLE_NODE, &no_debug_zebra_pbr_cmd);
|
||||||
install_element(ENABLE_NODE, &debug_zebra_evpn_mh_cmd);
|
install_element(ENABLE_NODE, &debug_zebra_evpn_mh_cmd);
|
||||||
|
|
||||||
install_element(CONFIG_NODE, &debug_zebra_events_cmd);
|
install_element(CONFIG_NODE, &debug_zebra_events_cmd);
|
||||||
@ -710,6 +745,8 @@ void zebra_debug_init(void)
|
|||||||
install_element(CONFIG_NODE, &debug_zebra_fpm_cmd);
|
install_element(CONFIG_NODE, &debug_zebra_fpm_cmd);
|
||||||
install_element(CONFIG_NODE, &debug_zebra_dplane_cmd);
|
install_element(CONFIG_NODE, &debug_zebra_dplane_cmd);
|
||||||
install_element(CONFIG_NODE, &debug_zebra_nexthop_cmd);
|
install_element(CONFIG_NODE, &debug_zebra_nexthop_cmd);
|
||||||
|
install_element(CONFIG_NODE, &debug_zebra_pbr_cmd);
|
||||||
|
|
||||||
install_element(CONFIG_NODE, &no_debug_zebra_events_cmd);
|
install_element(CONFIG_NODE, &no_debug_zebra_events_cmd);
|
||||||
install_element(CONFIG_NODE, &no_debug_zebra_nht_cmd);
|
install_element(CONFIG_NODE, &no_debug_zebra_nht_cmd);
|
||||||
install_element(CONFIG_NODE, &no_debug_zebra_mpls_cmd);
|
install_element(CONFIG_NODE, &no_debug_zebra_mpls_cmd);
|
||||||
@ -720,6 +757,7 @@ void zebra_debug_init(void)
|
|||||||
install_element(CONFIG_NODE, &no_debug_zebra_rib_cmd);
|
install_element(CONFIG_NODE, &no_debug_zebra_rib_cmd);
|
||||||
install_element(CONFIG_NODE, &no_debug_zebra_fpm_cmd);
|
install_element(CONFIG_NODE, &no_debug_zebra_fpm_cmd);
|
||||||
install_element(CONFIG_NODE, &no_debug_zebra_dplane_cmd);
|
install_element(CONFIG_NODE, &no_debug_zebra_dplane_cmd);
|
||||||
|
install_element(CONFIG_NODE, &no_debug_zebra_pbr_cmd);
|
||||||
install_element(CONFIG_NODE, &debug_zebra_mlag_cmd);
|
install_element(CONFIG_NODE, &debug_zebra_mlag_cmd);
|
||||||
install_element(CONFIG_NODE, &debug_zebra_evpn_mh_cmd);
|
install_element(CONFIG_NODE, &debug_zebra_evpn_mh_cmd);
|
||||||
}
|
}
|
||||||
|
@ -67,6 +67,8 @@ extern "C" {
|
|||||||
#define ZEBRA_DEBUG_EVPN_MH_MAC 0x04
|
#define ZEBRA_DEBUG_EVPN_MH_MAC 0x04
|
||||||
#define ZEBRA_DEBUG_EVPN_MH_NEIGH 0x08
|
#define ZEBRA_DEBUG_EVPN_MH_NEIGH 0x08
|
||||||
|
|
||||||
|
#define ZEBRA_DEBUG_PBR 0x01
|
||||||
|
|
||||||
/* Debug related macro. */
|
/* Debug related macro. */
|
||||||
#define IS_ZEBRA_DEBUG_EVENT (zebra_debug_event & ZEBRA_DEBUG_EVENT)
|
#define IS_ZEBRA_DEBUG_EVENT (zebra_debug_event & ZEBRA_DEBUG_EVENT)
|
||||||
|
|
||||||
@ -114,6 +116,8 @@ extern "C" {
|
|||||||
#define IS_ZEBRA_DEBUG_EVPN_MH_NEIGH \
|
#define IS_ZEBRA_DEBUG_EVPN_MH_NEIGH \
|
||||||
(zebra_debug_evpn_mh & ZEBRA_DEBUG_EVPN_MH_NEIGH)
|
(zebra_debug_evpn_mh & ZEBRA_DEBUG_EVPN_MH_NEIGH)
|
||||||
|
|
||||||
|
#define IS_ZEBRA_DEBUG_PBR (zebra_debug_pbr & ZEBRA_DEBUG_PBR)
|
||||||
|
|
||||||
extern unsigned long zebra_debug_event;
|
extern unsigned long zebra_debug_event;
|
||||||
extern unsigned long zebra_debug_packet;
|
extern unsigned long zebra_debug_packet;
|
||||||
extern unsigned long zebra_debug_kernel;
|
extern unsigned long zebra_debug_kernel;
|
||||||
@ -127,6 +131,7 @@ extern unsigned long zebra_debug_dplane;
|
|||||||
extern unsigned long zebra_debug_mlag;
|
extern unsigned long zebra_debug_mlag;
|
||||||
extern unsigned long zebra_debug_nexthop;
|
extern unsigned long zebra_debug_nexthop;
|
||||||
extern unsigned long zebra_debug_evpn_mh;
|
extern unsigned long zebra_debug_evpn_mh;
|
||||||
|
extern unsigned long zebra_debug_pbr;
|
||||||
|
|
||||||
extern void zebra_debug_init(void);
|
extern void zebra_debug_init(void);
|
||||||
|
|
||||||
|
@ -32,6 +32,7 @@
|
|||||||
#include "zebra/zapi_msg.h"
|
#include "zebra/zapi_msg.h"
|
||||||
#include "zebra/zebra_memory.h"
|
#include "zebra/zebra_memory.h"
|
||||||
#include "zebra/zserv.h"
|
#include "zebra/zserv.h"
|
||||||
|
#include "zebra/debug.h"
|
||||||
|
|
||||||
/* definitions */
|
/* definitions */
|
||||||
DEFINE_MTYPE_STATIC(ZEBRA, PBR_IPTABLE_IFNAME, "PBR interface list")
|
DEFINE_MTYPE_STATIC(ZEBRA, PBR_IPTABLE_IFNAME, "PBR interface list")
|
||||||
@ -499,10 +500,14 @@ void zebra_pbr_add_rule(struct zebra_pbr_rule *rule)
|
|||||||
*/
|
*/
|
||||||
found = pbr_rule_lookup_unique(rule);
|
found = pbr_rule_lookup_unique(rule);
|
||||||
|
|
||||||
(void)hash_get(zrouter.rules_hash, rule, pbr_rule_alloc_intern);
|
|
||||||
|
|
||||||
/* If found, this is an update */
|
/* If found, this is an update */
|
||||||
if (found) {
|
if (found) {
|
||||||
|
if (IS_ZEBRA_DEBUG_PBR)
|
||||||
|
zlog_debug(
|
||||||
|
"%s: seq: %d, prior: %d, unique: %d, ifname: %s -- update",
|
||||||
|
__func__, rule->rule.seq, rule->rule.priority,
|
||||||
|
rule->rule.unique, rule->rule.ifname);
|
||||||
|
|
||||||
(void)dplane_pbr_rule_update(found, rule);
|
(void)dplane_pbr_rule_update(found, rule);
|
||||||
|
|
||||||
if (pbr_rule_release(found))
|
if (pbr_rule_release(found))
|
||||||
@ -510,12 +515,26 @@ void zebra_pbr_add_rule(struct zebra_pbr_rule *rule)
|
|||||||
"%s: Rule being updated we know nothing about",
|
"%s: Rule being updated we know nothing about",
|
||||||
__PRETTY_FUNCTION__);
|
__PRETTY_FUNCTION__);
|
||||||
|
|
||||||
} else
|
} else {
|
||||||
|
if (IS_ZEBRA_DEBUG_PBR)
|
||||||
|
zlog_debug(
|
||||||
|
"%s: seq: %d, prior: %d, unique: %d, ifname: %s -- new",
|
||||||
|
__func__, rule->rule.seq, rule->rule.priority,
|
||||||
|
rule->rule.unique, rule->rule.ifname);
|
||||||
|
|
||||||
(void)dplane_pbr_rule_add(rule);
|
(void)dplane_pbr_rule_add(rule);
|
||||||
|
}
|
||||||
|
|
||||||
|
(void)hash_get(zrouter.rules_hash, rule, pbr_rule_alloc_intern);
|
||||||
}
|
}
|
||||||
|
|
||||||
void zebra_pbr_del_rule(struct zebra_pbr_rule *rule)
|
void zebra_pbr_del_rule(struct zebra_pbr_rule *rule)
|
||||||
{
|
{
|
||||||
|
if (IS_ZEBRA_DEBUG_PBR)
|
||||||
|
zlog_debug("%s: seq: %d, prior: %d, unique: %d, ifname: %s",
|
||||||
|
__func__, rule->rule.seq, rule->rule.priority,
|
||||||
|
rule->rule.unique, rule->rule.ifname);
|
||||||
|
|
||||||
(void)dplane_pbr_rule_delete(rule);
|
(void)dplane_pbr_rule_delete(rule);
|
||||||
|
|
||||||
if (pbr_rule_release(rule))
|
if (pbr_rule_release(rule))
|
||||||
|
Loading…
Reference in New Issue
Block a user