mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-09 05:58:17 +00:00
bgpd: Enable BGP dynamic capability by default for datacenter profile
Dynamic capability provides more value without resetting the sessions for some important other capabilities to exchange, like: graceful-restart, addpath, orf, fqdn, etc. Since we support it already, enable it by default. Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
This commit is contained in:
parent
617d82e4ce
commit
e2ac728c82
@ -1975,7 +1975,7 @@ uint16_t bgp_open_capability(struct stream *s, struct peer *peer,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Dynamic capability. */
|
/* Dynamic capability. */
|
||||||
if (CHECK_FLAG(peer->flags, PEER_FLAG_DYNAMIC_CAPABILITY)) {
|
if (peergroup_flag_check(peer, PEER_FLAG_DYNAMIC_CAPABILITY)) {
|
||||||
SET_FLAG(peer->cap, PEER_CAP_DYNAMIC_ADV);
|
SET_FLAG(peer->cap, PEER_CAP_DYNAMIC_ADV);
|
||||||
stream_putc(s, BGP_OPEN_OPT_CAP);
|
stream_putc(s, BGP_OPEN_OPT_CAP);
|
||||||
ext_opt_params
|
ext_opt_params
|
||||||
|
@ -126,6 +126,10 @@ FRR_CFG_DEFAULT_BOOL(BGP_SOFT_VERSION_CAPABILITY,
|
|||||||
{ .val_bool = true, .match_profile = "datacenter", },
|
{ .val_bool = true, .match_profile = "datacenter", },
|
||||||
{ .val_bool = false },
|
{ .val_bool = false },
|
||||||
);
|
);
|
||||||
|
FRR_CFG_DEFAULT_BOOL(BGP_DYNAMIC_CAPABILITY,
|
||||||
|
{ .val_bool = true, .match_profile = "datacenter", },
|
||||||
|
{ .val_bool = false },
|
||||||
|
);
|
||||||
FRR_CFG_DEFAULT_BOOL(BGP_ENFORCE_FIRST_AS,
|
FRR_CFG_DEFAULT_BOOL(BGP_ENFORCE_FIRST_AS,
|
||||||
{ .val_bool = false, .match_version = "< 9.1", },
|
{ .val_bool = false, .match_version = "< 9.1", },
|
||||||
{ .val_bool = true },
|
{ .val_bool = true },
|
||||||
@ -623,6 +627,9 @@ int bgp_get_vty(struct bgp **bgp, as_t *as, const char *name,
|
|||||||
if (DFLT_BGP_SOFT_VERSION_CAPABILITY)
|
if (DFLT_BGP_SOFT_VERSION_CAPABILITY)
|
||||||
SET_FLAG((*bgp)->flags,
|
SET_FLAG((*bgp)->flags,
|
||||||
BGP_FLAG_SOFT_VERSION_CAPABILITY);
|
BGP_FLAG_SOFT_VERSION_CAPABILITY);
|
||||||
|
if (DFLT_BGP_DYNAMIC_CAPABILITY)
|
||||||
|
SET_FLAG((*bgp)->flags,
|
||||||
|
BGP_FLAG_DYNAMIC_CAPABILITY);
|
||||||
if (DFLT_BGP_ENFORCE_FIRST_AS)
|
if (DFLT_BGP_ENFORCE_FIRST_AS)
|
||||||
SET_FLAG((*bgp)->flags, BGP_FLAG_ENFORCE_FIRST_AS);
|
SET_FLAG((*bgp)->flags, BGP_FLAG_ENFORCE_FIRST_AS);
|
||||||
|
|
||||||
@ -4298,6 +4305,24 @@ DEFPY (bgp_default_software_version_capability,
|
|||||||
return CMD_SUCCESS;
|
return CMD_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DEFPY (bgp_default_dynamic_capability,
|
||||||
|
bgp_default_dynamic_capability_cmd,
|
||||||
|
"[no] bgp default dynamic-capability",
|
||||||
|
NO_STR
|
||||||
|
BGP_STR
|
||||||
|
"Configure BGP defaults\n"
|
||||||
|
"Advertise dynamic capability for all neighbors\n")
|
||||||
|
{
|
||||||
|
VTY_DECLVAR_CONTEXT(bgp, bgp);
|
||||||
|
|
||||||
|
if (no)
|
||||||
|
UNSET_FLAG(bgp->flags, BGP_FLAG_DYNAMIC_CAPABILITY);
|
||||||
|
else
|
||||||
|
SET_FLAG(bgp->flags, BGP_FLAG_DYNAMIC_CAPABILITY);
|
||||||
|
|
||||||
|
return CMD_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
/* "bgp network import-check" configuration. */
|
/* "bgp network import-check" configuration. */
|
||||||
DEFUN (bgp_network_import_check,
|
DEFUN (bgp_network_import_check,
|
||||||
bgp_network_import_check_cmd,
|
bgp_network_import_check_cmd,
|
||||||
@ -18383,9 +18408,15 @@ static void bgp_config_write_peer_global(struct vty *vty, struct bgp *bgp,
|
|||||||
vty_out(vty, " neighbor %s timers delayopen %u\n", addr,
|
vty_out(vty, " neighbor %s timers delayopen %u\n", addr,
|
||||||
peer->bgp->default_delayopen);
|
peer->bgp->default_delayopen);
|
||||||
|
|
||||||
/* capability dynamic */
|
/* capability software-version */
|
||||||
if (peergroup_flag_check(peer, PEER_FLAG_DYNAMIC_CAPABILITY))
|
if (CHECK_FLAG(bgp->flags, BGP_FLAG_DYNAMIC_CAPABILITY)) {
|
||||||
vty_out(vty, " neighbor %s capability dynamic\n", addr);
|
if (!peergroup_flag_check(peer, PEER_FLAG_DYNAMIC_CAPABILITY))
|
||||||
|
vty_out(vty, " no neighbor %s capability dynamic\n",
|
||||||
|
addr);
|
||||||
|
} else {
|
||||||
|
if (peergroup_flag_check(peer, PEER_FLAG_DYNAMIC_CAPABILITY))
|
||||||
|
vty_out(vty, " neighbor %s capability dynamic\n", addr);
|
||||||
|
}
|
||||||
|
|
||||||
/* capability extended-nexthop */
|
/* capability extended-nexthop */
|
||||||
if (peergroup_flag_check(peer, PEER_FLAG_CAPABILITY_ENHE)) {
|
if (peergroup_flag_check(peer, PEER_FLAG_CAPABILITY_ENHE)) {
|
||||||
@ -19076,6 +19107,15 @@ int bgp_config_write(struct vty *vty)
|
|||||||
? ""
|
? ""
|
||||||
: "no ");
|
: "no ");
|
||||||
|
|
||||||
|
if (!!CHECK_FLAG(bgp->flags, BGP_FLAG_DYNAMIC_CAPABILITY) !=
|
||||||
|
SAVE_BGP_DYNAMIC_CAPABILITY)
|
||||||
|
vty_out(vty,
|
||||||
|
" %sbgp default dynamic-capability\n",
|
||||||
|
CHECK_FLAG(bgp->flags,
|
||||||
|
BGP_FLAG_DYNAMIC_CAPABILITY)
|
||||||
|
? ""
|
||||||
|
: "no ");
|
||||||
|
|
||||||
/* BGP default subgroup-pkt-queue-max. */
|
/* BGP default subgroup-pkt-queue-max. */
|
||||||
if (bgp->default_subgroup_pkt_queue_max
|
if (bgp->default_subgroup_pkt_queue_max
|
||||||
!= BGP_DEFAULT_SUBGROUP_PKT_QUEUE_MAX)
|
!= BGP_DEFAULT_SUBGROUP_PKT_QUEUE_MAX)
|
||||||
@ -20124,6 +20164,9 @@ void bgp_vty_init(void)
|
|||||||
/* bgp default software-version-capability */
|
/* bgp default software-version-capability */
|
||||||
install_element(BGP_NODE, &bgp_default_software_version_capability_cmd);
|
install_element(BGP_NODE, &bgp_default_software_version_capability_cmd);
|
||||||
|
|
||||||
|
/* bgp default dynamic-capability */
|
||||||
|
install_element(BGP_NODE, &bgp_default_dynamic_capability_cmd);
|
||||||
|
|
||||||
/* "bgp default subgroup-pkt-queue-max" commands. */
|
/* "bgp default subgroup-pkt-queue-max" commands. */
|
||||||
install_element(BGP_NODE, &bgp_default_subgroup_pkt_queue_max_cmd);
|
install_element(BGP_NODE, &bgp_default_subgroup_pkt_queue_max_cmd);
|
||||||
install_element(BGP_NODE, &no_bgp_default_subgroup_pkt_queue_max_cmd);
|
install_element(BGP_NODE, &no_bgp_default_subgroup_pkt_queue_max_cmd);
|
||||||
|
10
bgpd/bgpd.c
10
bgpd/bgpd.c
@ -1544,6 +1544,9 @@ struct peer *peer_new(struct bgp *bgp)
|
|||||||
if (CHECK_FLAG(bgp->flags, BGP_FLAG_SOFT_VERSION_CAPABILITY))
|
if (CHECK_FLAG(bgp->flags, BGP_FLAG_SOFT_VERSION_CAPABILITY))
|
||||||
SET_FLAG(peer->flags, PEER_FLAG_CAPABILITY_SOFT_VERSION);
|
SET_FLAG(peer->flags, PEER_FLAG_CAPABILITY_SOFT_VERSION);
|
||||||
|
|
||||||
|
if (CHECK_FLAG(bgp->flags, BGP_FLAG_DYNAMIC_CAPABILITY))
|
||||||
|
SET_FLAG(peer->flags, PEER_FLAG_DYNAMIC_CAPABILITY);
|
||||||
|
|
||||||
SET_FLAG(peer->flags_invert, PEER_FLAG_CAPABILITY_FQDN);
|
SET_FLAG(peer->flags_invert, PEER_FLAG_CAPABILITY_FQDN);
|
||||||
SET_FLAG(peer->flags, PEER_FLAG_CAPABILITY_FQDN);
|
SET_FLAG(peer->flags, PEER_FLAG_CAPABILITY_FQDN);
|
||||||
|
|
||||||
@ -2919,6 +2922,13 @@ static void peer_group2peer_config_copy(struct peer_group *group,
|
|||||||
SET_FLAG(peer->flags,
|
SET_FLAG(peer->flags,
|
||||||
PEER_FLAG_CAPABILITY_SOFT_VERSION);
|
PEER_FLAG_CAPABILITY_SOFT_VERSION);
|
||||||
|
|
||||||
|
/* capability dynamic apply */
|
||||||
|
if (!CHECK_FLAG(peer->flags_override,
|
||||||
|
PEER_FLAG_DYNAMIC_CAPABILITY))
|
||||||
|
if (CHECK_FLAG(conf->flags, PEER_FLAG_DYNAMIC_CAPABILITY))
|
||||||
|
SET_FLAG(peer->flags,
|
||||||
|
PEER_FLAG_DYNAMIC_CAPABILITY);
|
||||||
|
|
||||||
/* password apply */
|
/* password apply */
|
||||||
if (!CHECK_FLAG(peer->flags_override, PEER_FLAG_PASSWORD))
|
if (!CHECK_FLAG(peer->flags_override, PEER_FLAG_PASSWORD))
|
||||||
PEER_STR_ATTR_INHERIT(peer, group, password,
|
PEER_STR_ATTR_INHERIT(peer, group, password,
|
||||||
|
@ -522,6 +522,7 @@ struct bgp {
|
|||||||
#define BGP_FLAG_LU_IPV6_EXPLICIT_NULL (1ULL << 34)
|
#define BGP_FLAG_LU_IPV6_EXPLICIT_NULL (1ULL << 34)
|
||||||
#define BGP_FLAG_SOFT_VERSION_CAPABILITY (1ULL << 35)
|
#define BGP_FLAG_SOFT_VERSION_CAPABILITY (1ULL << 35)
|
||||||
#define BGP_FLAG_ENFORCE_FIRST_AS (1ULL << 36)
|
#define BGP_FLAG_ENFORCE_FIRST_AS (1ULL << 36)
|
||||||
|
#define BGP_FLAG_DYNAMIC_CAPABILITY (1ULL << 37)
|
||||||
|
|
||||||
/* BGP default address-families.
|
/* BGP default address-families.
|
||||||
* New peers inherit enabled afi/safis from bgp instance.
|
* New peers inherit enabled afi/safis from bgp instance.
|
||||||
|
@ -1816,7 +1816,7 @@ Configuring Peers
|
|||||||
This includes changing graceful-restart (LLGR also) timers,
|
This includes changing graceful-restart (LLGR also) timers,
|
||||||
enabling/disabling add-path, and other supported capabilities.
|
enabling/disabling add-path, and other supported capabilities.
|
||||||
|
|
||||||
.. clicmd:: neighbor PEER capability fqdn
|
.. clicmd:: neighbor PEER capability fqdn
|
||||||
|
|
||||||
Allow BGP to negotiate the FQDN Capability with its peers.
|
Allow BGP to negotiate the FQDN Capability with its peers.
|
||||||
|
|
||||||
@ -1825,7 +1825,7 @@ Configuring Peers
|
|||||||
|
|
||||||
This capability is activated by default. The ``no neighbor PEER capability
|
This capability is activated by default. The ``no neighbor PEER capability
|
||||||
fqdn`` avoid negotiation of that capability. This is useful for peers who
|
fqdn`` avoid negotiation of that capability. This is useful for peers who
|
||||||
are not supporting this capability or supporting BGP Capabilities
|
are not supporting this capability or supporting BGP Capabilities
|
||||||
Negotiation RFC 2842.
|
Negotiation RFC 2842.
|
||||||
|
|
||||||
.. clicmd:: neighbor <A.B.C.D|X:X::X:X|WORD> accept-own
|
.. clicmd:: neighbor <A.B.C.D|X:X::X:X|WORD> accept-own
|
||||||
@ -1949,6 +1949,13 @@ Configuring Peers
|
|||||||
outputs. It's easier to troubleshoot if you have a number of BGP peers
|
outputs. It's easier to troubleshoot if you have a number of BGP peers
|
||||||
and a number of routes to check.
|
and a number of routes to check.
|
||||||
|
|
||||||
|
.. clicmd:: bgp default dynamic-capability
|
||||||
|
|
||||||
|
This command enables dynamic capability advertisement by default
|
||||||
|
for all the neighbors.
|
||||||
|
|
||||||
|
For ``datacenter`` profile, this is enabled by default.
|
||||||
|
|
||||||
.. clicmd:: bgp default software-version-capability
|
.. clicmd:: bgp default software-version-capability
|
||||||
|
|
||||||
This command enables software version capability advertisement by default
|
This command enables software version capability advertisement by default
|
||||||
@ -3219,7 +3226,7 @@ that the 2001:db8:2:2:: prefix is valid.
|
|||||||
|
|
||||||
.. code-block:: frr
|
.. code-block:: frr
|
||||||
|
|
||||||
r1# show bgp nexthop detail
|
r1# show bgp nexthop detail
|
||||||
Current BGP nexthop cache:
|
Current BGP nexthop cache:
|
||||||
2001:db8:2:2:: valid [IGP metric 0], #paths 4
|
2001:db8:2:2:: valid [IGP metric 0], #paths 4
|
||||||
gate 2001:db8:12::2, if eth0
|
gate 2001:db8:12::2, if eth0
|
||||||
|
Loading…
Reference in New Issue
Block a user