]> git.puffer.fish Git - mirror/frr.git/commitdiff
bgpd: Adjust terminology related to DSCP 16146/head
authorDavid Ward <david.ward@ll.mit.edu>
Sun, 2 Jun 2024 10:42:23 +0000 (06:42 -0400)
committerDavid Ward <david.ward@ll.mit.edu>
Sun, 2 Jun 2024 10:44:59 +0000 (06:44 -0400)
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: 425bd64be847 ("bgpd: Allow bgp to control the DSCP session TOS value")
Signed-off-by: David Ward <david.ward@ll.mit.edu>
bgpd/bgp_network.c
bgpd/bgp_vty.c
bgpd/bgpd.c
bgpd/bgpd.h
doc/user/bgp.rst

index b409cbe706ecc4e4c1b94e57c42adead64317b06..e09dbc22af2d6b2c6ec7b07284cb78c15bb5124a 100644 (file)
@@ -817,9 +817,9 @@ int bgp_connect(struct peer_connection *connection)
 #ifdef IPTOS_PREC_INTERNETCONTROL
        frr_with_privs(&bgpd_privs) {
                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)
-                       setsockopt_ipv6_tclass(connection->fd, bm->tcp_dscp);
+                       setsockopt_ipv6_tclass(connection->fd, bm->ip_tos);
        }
 #endif
 
@@ -905,9 +905,9 @@ static int bgp_listener(int sock, struct sockaddr *sa, socklen_t salen,
 
 #ifdef IPTOS_PREC_INTERNETCONTROL
                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)
-                       setsockopt_ipv6_tclass(sock, bm->tcp_dscp);
+                       setsockopt_ipv6_tclass(sock, bm->ip_tos);
 #endif
 
                sockopt_v6only(sa->sa_family, sock);
index be9942afb6ea3996d2a564641966b14777562f3a..fbe1db9d2a007f89dcc830ee8e5912cb38936a36 100644 (file)
@@ -1760,10 +1760,10 @@ 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")
+       "Override default (CS6) DSCP for BGP connections\n"
+       "Manually configured DSCP value\n")
 {
-       bm->tcp_dscp = dscp << 2;
+       bm->ip_tos = dscp << 2;
 
        return CMD_SUCCESS;
 }
@@ -1773,10 +1773,10 @@ DEFPY (no_bgp_session_dscp,
        "no bgp session-dscp [(0-63)]",
        NO_STR
        BGP_STR
-       "Override default (C6) bgp TCP session DSCP value\n"
-       "Manually configured dscp parameter\n")
+       "Override default (CS6) DSCP for BGP connections\n"
+       "Manually configured DSCP value\n")
 {
-       bm->tcp_dscp = IPTOS_PREC_INTERNETCONTROL;
+       bm->ip_tos = IPTOS_PREC_INTERNETCONTROL;
 
        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))
                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);
+       /* DSCP value for outgoing packets in BGP connections */
+       if (bm->ip_tos != IPTOS_PREC_INTERNETCONTROL)
+               vty_out(vty, "bgp session-dscp %u\n", bm->ip_tos >> 2);
 
        /* BGP InQ limit */
        if (bm->inq_limit != BM_DEFAULT_Q_LIMIT)
index 09e64cf9ec31ebd416f9ea941ee2f62d5cd48bf8..d8eba0ab2234738b71a3fb2d0e0b8c5d916d4e0a 100644 (file)
@@ -8375,7 +8375,7 @@ void bgp_master_init(struct event_loop *master, const int buffer_size,
        bm->terminating = false;
        bm->socket_buffer = buffer_size;
        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->outq_limit = BM_DEFAULT_Q_LIMIT;
        bm->t_bgp_sync_label_manager = NULL;
index ad749ba67675f8dc02680c970e2c2f08d92359aa..1f8cc533498613d32ab708373220f3a617359c26 100644 (file)
@@ -166,8 +166,8 @@ struct bgp_master {
 
        bool terminating;       /* global flag that sigint terminate seen */
 
-       /* DSCP value for TCP sessions */
-       uint8_t tcp_dscp;
+       /* TOS value for outgoing packets in BGP connections */
+       uint8_t ip_tos;
 
 #define BM_DEFAULT_Q_LIMIT 10000
        uint32_t inq_limit;
index ae342e4c13595555cd818a80f96402fa90733195..58fdbf969bd765a2ba1935c1540d31ec850f29aa 100644 (file)
@@ -4933,8 +4933,8 @@ 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.
+This command allows the BGP daemon to control, at a global level, the DSCP value
+used in outgoing packets for each BGP connection.
 
 .. _bgp-suppress-fib: