-
Notifications
You must be signed in to change notification settings - Fork 1.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
bgpd: vpn - vrf route leaking #1739
Changes from all commits
b8e031e
e020789
51ade3a
c8ff868
9f36abf
70172b1
ff954ba
1b6e575
5c780bc
3d9f730
c44bd44
ddb5b48
fd9b55a
3f1224c
4ea6c38
9891fa4
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -55,6 +55,7 @@ unsigned long conf_bgp_debug_zebra; | |
unsigned long conf_bgp_debug_allow_martians; | ||
unsigned long conf_bgp_debug_nht; | ||
unsigned long conf_bgp_debug_update_groups; | ||
unsigned long conf_bgp_debug_vpn; | ||
|
||
unsigned long term_bgp_debug_as4; | ||
unsigned long term_bgp_debug_neighbor_events; | ||
|
@@ -68,6 +69,7 @@ unsigned long term_bgp_debug_zebra; | |
unsigned long term_bgp_debug_allow_martians; | ||
unsigned long term_bgp_debug_nht; | ||
unsigned long term_bgp_debug_update_groups; | ||
unsigned long term_bgp_debug_vpn; | ||
|
||
struct list *bgp_debug_neighbor_events_peers = NULL; | ||
struct list *bgp_debug_keepalive_peers = NULL; | ||
|
@@ -1560,6 +1562,96 @@ DEFUN (no_debug_bgp_update_groups, | |
return CMD_SUCCESS; | ||
} | ||
|
||
DEFUN (debug_bgp_vpn, | ||
debug_bgp_vpn_cmd, | ||
"debug bgp vpn <leak-from-vrf|leak-to-vrf|rmap-event|label>", | ||
DEBUG_STR | ||
BGP_STR | ||
"VPN routes\n" | ||
"leaked from vrf to vpn\n" | ||
"leaked to vrf from vpn\n" | ||
"route-map updates\n" | ||
"labels\n") | ||
{ | ||
int idx = 3; | ||
|
||
if (argv_find(argv, argc, "leak-from-vrf", &idx)) { | ||
if (vty->node == CONFIG_NODE) | ||
DEBUG_ON(vpn, VPN_LEAK_FROM_VRF); | ||
else | ||
TERM_DEBUG_ON(vpn, VPN_LEAK_FROM_VRF); | ||
} else if (argv_find(argv, argc, "leak-to-vrf", &idx)) { | ||
if (vty->node == CONFIG_NODE) | ||
DEBUG_ON(vpn, VPN_LEAK_TO_VRF); | ||
else | ||
TERM_DEBUG_ON(vpn, VPN_LEAK_TO_VRF); | ||
} else if (argv_find(argv, argc, "rmap-event", &idx)) { | ||
if (vty->node == CONFIG_NODE) | ||
DEBUG_ON(vpn, VPN_LEAK_RMAP_EVENT); | ||
else | ||
TERM_DEBUG_ON(vpn, VPN_LEAK_RMAP_EVENT); | ||
} else if (argv_find(argv, argc, "label", &idx)) { | ||
if (vty->node == CONFIG_NODE) | ||
DEBUG_ON(vpn, VPN_LEAK_LABEL); | ||
else | ||
TERM_DEBUG_ON(vpn, VPN_LEAK_LABEL); | ||
} else { | ||
vty_out(vty, "%% unknown debug bgp vpn keyword\n"); | ||
return CMD_WARNING_CONFIG_FAILED; | ||
} | ||
|
||
if (vty->node != CONFIG_NODE) | ||
vty_out(vty, "enabled debug bgp vpn %s\n", argv[idx]->text); | ||
|
||
return CMD_SUCCESS; | ||
} | ||
|
||
DEFUN (no_debug_bgp_vpn, | ||
no_debug_bgp_vpn_cmd, | ||
"no debug bgp vpn <leak-from-vrf|leak-to-vrf|rmap-event|label>", | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. As above. Additionally, you can remove this entire DEFUN by placing There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Agreed on [no], but since the debug variables aren't parameterised at run-time, it doesn't seem like a LOC win. It would sure be nice if they were an array indexed by enum so we could do something like
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. You can delete the entire command definition and body and replace it with a 3-line As for your suggestion I implemented more or less the same in a PR submitted a couple weeks ago (#1808) There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Is this what you mean? I must be missing something:
|
||
NO_STR | ||
DEBUG_STR | ||
BGP_STR | ||
"VPN routes\n" | ||
"leaked from vrf to vpn\n" | ||
"leaked to vrf from vpn\n" | ||
"route-map updates\n" | ||
"labels\n") | ||
{ | ||
int idx = 4; | ||
|
||
if (argv_find(argv, argc, "leak-from-vrf", &idx)) { | ||
if (vty->node == CONFIG_NODE) | ||
DEBUG_OFF(vpn, VPN_LEAK_FROM_VRF); | ||
else | ||
TERM_DEBUG_OFF(vpn, VPN_LEAK_FROM_VRF); | ||
|
||
} else if (argv_find(argv, argc, "leak-to-vrf", &idx)) { | ||
if (vty->node == CONFIG_NODE) | ||
DEBUG_OFF(vpn, VPN_LEAK_TO_VRF); | ||
else | ||
TERM_DEBUG_OFF(vpn, VPN_LEAK_TO_VRF); | ||
} else if (argv_find(argv, argc, "rmap-event", &idx)) { | ||
if (vty->node == CONFIG_NODE) | ||
DEBUG_OFF(vpn, VPN_LEAK_RMAP_EVENT); | ||
else | ||
TERM_DEBUG_OFF(vpn, VPN_LEAK_RMAP_EVENT); | ||
} else if (argv_find(argv, argc, "label", &idx)) { | ||
if (vty->node == CONFIG_NODE) | ||
DEBUG_OFF(vpn, VPN_LEAK_LABEL); | ||
else | ||
TERM_DEBUG_OFF(vpn, VPN_LEAK_LABEL); | ||
} else { | ||
vty_out(vty, "%% unknown debug bgp vpn keyword\n"); | ||
return CMD_WARNING_CONFIG_FAILED; | ||
} | ||
|
||
if (vty->node != CONFIG_NODE) | ||
vty_out(vty, "disabled debug bgp vpn %s\n", argv[idx]->text); | ||
|
||
return CMD_SUCCESS; | ||
} | ||
|
||
DEFUN (no_debug_bgp, | ||
no_debug_bgp_cmd, | ||
"no debug bgp", | ||
|
@@ -1592,6 +1684,10 @@ DEFUN (no_debug_bgp, | |
TERM_DEBUG_OFF(zebra, ZEBRA); | ||
TERM_DEBUG_OFF(allow_martians, ALLOW_MARTIANS); | ||
TERM_DEBUG_OFF(nht, NHT); | ||
TERM_DEBUG_OFF(vpn, VPN_LEAK_FROM_VRF); | ||
TERM_DEBUG_OFF(vpn, VPN_LEAK_TO_VRF); | ||
TERM_DEBUG_OFF(vpn, VPN_LEAK_RMAP_EVENT); | ||
TERM_DEBUG_OFF(vpn, VPN_LEAK_LABEL); | ||
vty_out(vty, "All possible debugging has been turned off\n"); | ||
|
||
return CMD_SUCCESS; | ||
|
@@ -1651,6 +1747,18 @@ DEFUN_NOSH (show_debugging_bgp, | |
|
||
if (BGP_DEBUG(allow_martians, ALLOW_MARTIANS)) | ||
vty_out(vty, " BGP allow martian next hop debugging is on\n"); | ||
|
||
if (BGP_DEBUG(vpn, VPN_LEAK_FROM_VRF)) | ||
vty_out(vty, | ||
" BGP route leak from vrf to vpn debugging is on\n"); | ||
if (BGP_DEBUG(vpn, VPN_LEAK_TO_VRF)) | ||
vty_out(vty, | ||
" BGP route leak to vrf from vpn debugging is on\n"); | ||
if (BGP_DEBUG(vpn, VPN_LEAK_RMAP_EVENT)) | ||
vty_out(vty, " BGP vpn route-map event debugging is on\n"); | ||
if (BGP_DEBUG(vpn, VPN_LEAK_LABEL)) | ||
vty_out(vty, " BGP vpn label event debugging is on\n"); | ||
|
||
vty_out(vty, "\n"); | ||
return CMD_SUCCESS; | ||
} | ||
|
@@ -1695,6 +1803,15 @@ int bgp_debug_count(void) | |
if (BGP_DEBUG(allow_martians, ALLOW_MARTIANS)) | ||
ret++; | ||
|
||
if (BGP_DEBUG(vpn, VPN_LEAK_FROM_VRF)) | ||
ret++; | ||
if (BGP_DEBUG(vpn, VPN_LEAK_TO_VRF)) | ||
ret++; | ||
if (BGP_DEBUG(vpn, VPN_LEAK_RMAP_EVENT)) | ||
ret++; | ||
if (BGP_DEBUG(vpn, VPN_LEAK_LABEL)) | ||
ret++; | ||
|
||
return ret; | ||
} | ||
|
||
|
@@ -1771,6 +1888,23 @@ static int bgp_config_write_debug(struct vty *vty) | |
write++; | ||
} | ||
|
||
if (CONF_BGP_DEBUG(vpn, VPN_LEAK_FROM_VRF)) { | ||
vty_out(vty, "debug bgp vpn leak-from-vrf\n"); | ||
write++; | ||
} | ||
if (CONF_BGP_DEBUG(vpn, VPN_LEAK_TO_VRF)) { | ||
vty_out(vty, "debug bgp vpn leak-to-vrf\n"); | ||
write++; | ||
} | ||
if (CONF_BGP_DEBUG(vpn, VPN_LEAK_RMAP_EVENT)) { | ||
vty_out(vty, "debug bgp vpn rmap-event\n"); | ||
write++; | ||
} | ||
if (CONF_BGP_DEBUG(vpn, VPN_LEAK_LABEL)) { | ||
vty_out(vty, "debug bgp vpn label\n"); | ||
write++; | ||
} | ||
|
||
return write; | ||
} | ||
|
||
|
@@ -1864,6 +1998,11 @@ void bgp_debug_init(void) | |
install_element(CONFIG_NODE, &no_debug_bgp_bestpath_cmd); | ||
install_element(ENABLE_NODE, &no_debug_bgp_bestpath_prefix_cmd); | ||
install_element(CONFIG_NODE, &no_debug_bgp_bestpath_prefix_cmd); | ||
|
||
install_element(ENABLE_NODE, &debug_bgp_vpn_cmd); | ||
install_element(CONFIG_NODE, &debug_bgp_vpn_cmd); | ||
install_element(ENABLE_NODE, &no_debug_bgp_vpn_cmd); | ||
install_element(CONFIG_NODE, &no_debug_bgp_vpn_cmd); | ||
} | ||
|
||
/* Return true if this prefix is on the per_prefix_list of prefixes to debug | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Once the issues above are resolved you can delete this block.