mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-07-25 22:30:52 +00:00
bgpd: Adjust terminology related to DSCP
The default DSCP used for BGP connections is CS6. The DSCP value is
not part of the TCP header.
When setting the IP_TOS or IPV6_TCLASS socket options, the argument
is not the 6-bit DSCP value, but an 8-bit value for the former IPv4
Type of Service field or IPv6 Traffic Class field, respectively.
Fixes: 425bd64be8
("bgpd: Allow bgp to control the DSCP session TOS value")
Signed-off-by: David Ward <david.ward@ll.mit.edu>
This commit is contained in:
parent
8954dd3a6b
commit
172dd682d9
@ -817,9 +817,9 @@ int bgp_connect(struct peer_connection *connection)
|
|||||||
#ifdef IPTOS_PREC_INTERNETCONTROL
|
#ifdef IPTOS_PREC_INTERNETCONTROL
|
||||||
frr_with_privs(&bgpd_privs) {
|
frr_with_privs(&bgpd_privs) {
|
||||||
if (sockunion_family(&connection->su) == AF_INET)
|
if (sockunion_family(&connection->su) == AF_INET)
|
||||||
setsockopt_ipv4_tos(connection->fd, bm->tcp_dscp);
|
setsockopt_ipv4_tos(connection->fd, bm->ip_tos);
|
||||||
else if (sockunion_family(&connection->su) == AF_INET6)
|
else if (sockunion_family(&connection->su) == AF_INET6)
|
||||||
setsockopt_ipv6_tclass(connection->fd, bm->tcp_dscp);
|
setsockopt_ipv6_tclass(connection->fd, bm->ip_tos);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -905,9 +905,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, bm->tcp_dscp);
|
setsockopt_ipv4_tos(sock, bm->ip_tos);
|
||||||
else if (sa->sa_family == AF_INET6)
|
else if (sa->sa_family == AF_INET6)
|
||||||
setsockopt_ipv6_tclass(sock, bm->tcp_dscp);
|
setsockopt_ipv6_tclass(sock, bm->ip_tos);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
sockopt_v6only(sa->sa_family, sock);
|
sockopt_v6only(sa->sa_family, sock);
|
||||||
|
@ -1760,10 +1760,10 @@ DEFPY (bgp_session_dscp,
|
|||||||
bgp_session_dscp_cmd,
|
bgp_session_dscp_cmd,
|
||||||
"bgp session-dscp (0-63)$dscp",
|
"bgp session-dscp (0-63)$dscp",
|
||||||
BGP_STR
|
BGP_STR
|
||||||
"Override default (C6) bgp TCP session DSCP value\n"
|
"Override default (CS6) DSCP for BGP connections\n"
|
||||||
"Manually configured dscp parameter\n")
|
"Manually configured DSCP value\n")
|
||||||
{
|
{
|
||||||
bm->tcp_dscp = dscp << 2;
|
bm->ip_tos = dscp << 2;
|
||||||
|
|
||||||
return CMD_SUCCESS;
|
return CMD_SUCCESS;
|
||||||
}
|
}
|
||||||
@ -1773,10 +1773,10 @@ DEFPY (no_bgp_session_dscp,
|
|||||||
"no bgp session-dscp [(0-63)]",
|
"no bgp session-dscp [(0-63)]",
|
||||||
NO_STR
|
NO_STR
|
||||||
BGP_STR
|
BGP_STR
|
||||||
"Override default (C6) bgp TCP session DSCP value\n"
|
"Override default (CS6) DSCP for BGP connections\n"
|
||||||
"Manually configured dscp parameter\n")
|
"Manually configured DSCP value\n")
|
||||||
{
|
{
|
||||||
bm->tcp_dscp = IPTOS_PREC_INTERNETCONTROL;
|
bm->ip_tos = IPTOS_PREC_INTERNETCONTROL;
|
||||||
|
|
||||||
return CMD_SUCCESS;
|
return CMD_SUCCESS;
|
||||||
}
|
}
|
||||||
@ -19191,9 +19191,9 @@ 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 */
|
/* DSCP value for outgoing packets in BGP connections */
|
||||||
if (bm->tcp_dscp != IPTOS_PREC_INTERNETCONTROL)
|
if (bm->ip_tos != IPTOS_PREC_INTERNETCONTROL)
|
||||||
vty_out(vty, "bgp session-dscp %u\n", bm->tcp_dscp >> 2);
|
vty_out(vty, "bgp session-dscp %u\n", bm->ip_tos >> 2);
|
||||||
|
|
||||||
/* BGP InQ limit */
|
/* BGP InQ limit */
|
||||||
if (bm->inq_limit != BM_DEFAULT_Q_LIMIT)
|
if (bm->inq_limit != BM_DEFAULT_Q_LIMIT)
|
||||||
|
@ -8375,7 +8375,7 @@ void bgp_master_init(struct event_loop *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;
|
bm->ip_tos = IPTOS_PREC_INTERNETCONTROL;
|
||||||
bm->inq_limit = BM_DEFAULT_Q_LIMIT;
|
bm->inq_limit = BM_DEFAULT_Q_LIMIT;
|
||||||
bm->outq_limit = BM_DEFAULT_Q_LIMIT;
|
bm->outq_limit = BM_DEFAULT_Q_LIMIT;
|
||||||
bm->t_bgp_sync_label_manager = NULL;
|
bm->t_bgp_sync_label_manager = NULL;
|
||||||
|
@ -166,8 +166,8 @@ struct bgp_master {
|
|||||||
|
|
||||||
bool terminating; /* global flag that sigint terminate seen */
|
bool terminating; /* global flag that sigint terminate seen */
|
||||||
|
|
||||||
/* DSCP value for TCP sessions */
|
/* TOS value for outgoing packets in BGP connections */
|
||||||
uint8_t tcp_dscp;
|
uint8_t ip_tos;
|
||||||
|
|
||||||
#define BM_DEFAULT_Q_LIMIT 10000
|
#define BM_DEFAULT_Q_LIMIT 10000
|
||||||
uint32_t inq_limit;
|
uint32_t inq_limit;
|
||||||
|
@ -4933,8 +4933,8 @@ setting.
|
|||||||
|
|
||||||
.. clicmd:: bgp session-dscp (0-63)
|
.. clicmd:: bgp session-dscp (0-63)
|
||||||
|
|
||||||
This command allows bgp to control, at a global level, the TCP dscp values
|
This command allows the BGP daemon to control, at a global level, the DSCP value
|
||||||
in the TCP header.
|
used in outgoing packets for each BGP connection.
|
||||||
|
|
||||||
.. _bgp-suppress-fib:
|
.. _bgp-suppress-fib:
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user