mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-05-27 18:42:27 +00:00
bgpd: Allow bgp to control the DSCP session TOS value
Allow BGP to control the TOS DSCP value in the tcp header via a new command at the bgp global level `bgp session-dscp <0-63>` Signed-off-by: Donald Sharp <sharpd@nvidia.com> Signed-off-by: Pavel Shirhov <pavelsh@microsoft.com>
This commit is contained in:
parent
64b43136b9
commit
425bd64be8
@ -741,11 +741,9 @@ int bgp_connect(struct peer *peer)
|
|||||||
#ifdef IPTOS_PREC_INTERNETCONTROL
|
#ifdef IPTOS_PREC_INTERNETCONTROL
|
||||||
frr_with_privs(&bgpd_privs) {
|
frr_with_privs(&bgpd_privs) {
|
||||||
if (sockunion_family(&peer->su) == AF_INET)
|
if (sockunion_family(&peer->su) == AF_INET)
|
||||||
setsockopt_ipv4_tos(peer->fd,
|
setsockopt_ipv4_tos(peer->fd, bm->tcp_dscp);
|
||||||
IPTOS_PREC_INTERNETCONTROL);
|
|
||||||
else if (sockunion_family(&peer->su) == AF_INET6)
|
else if (sockunion_family(&peer->su) == AF_INET6)
|
||||||
setsockopt_ipv6_tclass(peer->fd,
|
setsockopt_ipv6_tclass(peer->fd, bm->tcp_dscp);
|
||||||
IPTOS_PREC_INTERNETCONTROL);
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -822,10 +820,9 @@ static int bgp_listener(int sock, struct sockaddr *sa, socklen_t salen,
|
|||||||
|
|
||||||
#ifdef IPTOS_PREC_INTERNETCONTROL
|
#ifdef IPTOS_PREC_INTERNETCONTROL
|
||||||
if (sa->sa_family == AF_INET)
|
if (sa->sa_family == AF_INET)
|
||||||
setsockopt_ipv4_tos(sock, IPTOS_PREC_INTERNETCONTROL);
|
setsockopt_ipv4_tos(sock, bm->tcp_dscp);
|
||||||
else if (sa->sa_family == AF_INET6)
|
else if (sa->sa_family == AF_INET6)
|
||||||
setsockopt_ipv6_tclass(sock,
|
setsockopt_ipv6_tclass(sock, bm->tcp_dscp);
|
||||||
IPTOS_PREC_INTERNETCONTROL);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
sockopt_v6only(sa->sa_family, sock);
|
sockopt_v6only(sa->sa_family, sock);
|
||||||
|
@ -1568,6 +1568,32 @@ DEFUN (no_router_bgp,
|
|||||||
return CMD_SUCCESS;
|
return CMD_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* bgp session-dscp */
|
||||||
|
|
||||||
|
DEFPY (bgp_session_dscp,
|
||||||
|
bgp_session_dscp_cmd,
|
||||||
|
"bgp session-dscp (0-63)$dscp",
|
||||||
|
BGP_STR
|
||||||
|
"Override default (C6) bgp TCP session DSCP value\n"
|
||||||
|
"Manually configured dscp parameter\n")
|
||||||
|
{
|
||||||
|
bm->tcp_dscp = dscp << 2;
|
||||||
|
|
||||||
|
return CMD_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
DEFPY (no_bgp_session_dscp,
|
||||||
|
no_bgp_session_dscp_cmd,
|
||||||
|
"no bgp session-dscp [(0-63)]",
|
||||||
|
NO_STR
|
||||||
|
BGP_STR
|
||||||
|
"Override default (C6) bgp TCP session DSCP value\n"
|
||||||
|
"Manually configured dscp parameter\n")
|
||||||
|
{
|
||||||
|
bm->tcp_dscp = IPTOS_PREC_INTERNETCONTROL;
|
||||||
|
|
||||||
|
return CMD_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
/* BGP router-id. */
|
/* BGP router-id. */
|
||||||
|
|
||||||
@ -17126,6 +17152,10 @@ int bgp_config_write(struct vty *vty)
|
|||||||
if (CHECK_FLAG(bm->flags, BM_FLAG_SEND_EXTRA_DATA_TO_ZEBRA))
|
if (CHECK_FLAG(bm->flags, BM_FLAG_SEND_EXTRA_DATA_TO_ZEBRA))
|
||||||
vty_out(vty, "bgp send-extra-data zebra\n");
|
vty_out(vty, "bgp send-extra-data zebra\n");
|
||||||
|
|
||||||
|
/* BGP session DSCP value */
|
||||||
|
if (bm->tcp_dscp != IPTOS_PREC_INTERNETCONTROL)
|
||||||
|
vty_out(vty, "bgp session-dscp %u\n", bm->tcp_dscp >> 2);
|
||||||
|
|
||||||
/* BGP configuration. */
|
/* BGP configuration. */
|
||||||
for (ALL_LIST_ELEMENTS(bm->bgp, mnode, mnnode, bgp)) {
|
for (ALL_LIST_ELEMENTS(bm->bgp, mnode, mnnode, bgp)) {
|
||||||
|
|
||||||
@ -17829,6 +17859,10 @@ void bgp_vty_init(void)
|
|||||||
/* "no router bgp" commands. */
|
/* "no router bgp" commands. */
|
||||||
install_element(CONFIG_NODE, &no_router_bgp_cmd);
|
install_element(CONFIG_NODE, &no_router_bgp_cmd);
|
||||||
|
|
||||||
|
/* "bgp session-dscp command */
|
||||||
|
install_element(CONFIG_NODE, &bgp_session_dscp_cmd);
|
||||||
|
install_element(CONFIG_NODE, &no_bgp_session_dscp_cmd);
|
||||||
|
|
||||||
/* "bgp router-id" commands. */
|
/* "bgp router-id" commands. */
|
||||||
install_element(BGP_NODE, &bgp_router_id_cmd);
|
install_element(BGP_NODE, &bgp_router_id_cmd);
|
||||||
install_element(BGP_NODE, &no_bgp_router_id_cmd);
|
install_element(BGP_NODE, &no_bgp_router_id_cmd);
|
||||||
|
@ -3259,7 +3259,6 @@ static struct bgp *bgp_create(as_t *as, const char *name,
|
|||||||
|
|
||||||
bgp->evpn_info = XCALLOC(MTYPE_BGP_EVPN_INFO,
|
bgp->evpn_info = XCALLOC(MTYPE_BGP_EVPN_INFO,
|
||||||
sizeof(struct bgp_evpn_info));
|
sizeof(struct bgp_evpn_info));
|
||||||
|
|
||||||
bgp_evpn_init(bgp);
|
bgp_evpn_init(bgp);
|
||||||
bgp_evpn_vrf_es_init(bgp);
|
bgp_evpn_vrf_es_init(bgp);
|
||||||
bgp_pbr_init(bgp);
|
bgp_pbr_init(bgp);
|
||||||
@ -7854,6 +7853,7 @@ void bgp_master_init(struct thread_master *master, const int buffer_size,
|
|||||||
bm->terminating = false;
|
bm->terminating = false;
|
||||||
bm->socket_buffer = buffer_size;
|
bm->socket_buffer = buffer_size;
|
||||||
bm->wait_for_fib = false;
|
bm->wait_for_fib = false;
|
||||||
|
bm->tcp_dscp = IPTOS_PREC_INTERNETCONTROL;
|
||||||
|
|
||||||
bgp_mac_init();
|
bgp_mac_init();
|
||||||
/* init the rd id space.
|
/* init the rd id space.
|
||||||
|
@ -171,6 +171,10 @@ struct bgp_master {
|
|||||||
#define BM_FLAG_SEND_EXTRA_DATA_TO_ZEBRA (1 << 1)
|
#define BM_FLAG_SEND_EXTRA_DATA_TO_ZEBRA (1 << 1)
|
||||||
|
|
||||||
bool terminating; /* global flag that sigint terminate seen */
|
bool terminating; /* global flag that sigint terminate seen */
|
||||||
|
|
||||||
|
/* DSCP value for TCP sessions */
|
||||||
|
uint8_t tcp_dscp;
|
||||||
|
|
||||||
QOBJ_FIELDS;
|
QOBJ_FIELDS;
|
||||||
};
|
};
|
||||||
DECLARE_QOBJ_TYPE(bgp_master);
|
DECLARE_QOBJ_TYPE(bgp_master);
|
||||||
|
@ -4014,6 +4014,11 @@ behavior in BGP is not to send this data. If the routes were sent to zebra and
|
|||||||
the option is changed, bgpd doesn't reinstall the routes to comply with the new
|
the option is changed, bgpd doesn't reinstall the routes to comply with the new
|
||||||
setting.
|
setting.
|
||||||
|
|
||||||
|
.. clicmd:: bgp session-dscp (0-63)
|
||||||
|
|
||||||
|
This command allows bgp to control, at a global level, the TCP dscp values
|
||||||
|
in the TCP header.
|
||||||
|
|
||||||
.. _bgp-suppress-fib:
|
.. _bgp-suppress-fib:
|
||||||
|
|
||||||
Suppressing routes not installed in FIB
|
Suppressing routes not installed in FIB
|
||||||
|
Loading…
Reference in New Issue
Block a user