]> git.ipfire.org Git - thirdparty/iproute2.git/commitdiff
dcb: fix tc-maxrate unit conversions
authorYijing Zeng <yijingzeng@meta.com>
Sat, 11 Oct 2025 22:25:24 +0000 (15:25 -0700)
committerStephen Hemminger <stephen@networkplumber.org>
Tue, 21 Oct 2025 22:06:14 +0000 (15:06 -0700)
The ieee_maxrate UAPI is defined as kbps, but dcb_maxrate uses Bps.
This fix patch converts Bps to kbps for parse by dividing 125,
and convert kbps to Bps for print_rate() by multiplying 125.

Fixes: 117939d9bd89 ("dcb: Add a subtool for the DCB maxrate object")
Signed-off-by: Yijing Zeng <yijingzeng@meta.com>
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
dcb/dcb_maxrate.c

index 1538c6d7c4cfa20b9d5382031b80ed99a1733fcd..8c5a7e5532d68db858ca29890186260047aed18e 100644 (file)
@@ -42,13 +42,20 @@ static void dcb_maxrate_help(void)
 
 static int dcb_maxrate_parse_mapping_tc_maxrate(__u32 key, char *value, void *data)
 {
-       __u64 rate;
+       __u64 rate_bytes_per_sec;
+       __u64 rate_kbits_per_sec;
 
-       if (get_rate64(&rate, value))
+       if (get_rate64(&rate_bytes_per_sec, value))
                return -EINVAL;
 
+       /* get_rate64() returns Bps.
+        * ieee_maxrate UAPI expects kbps.
+        * convert Bps to kbps by dividing 125.
+        */
+       rate_kbits_per_sec = rate_bytes_per_sec / 125;
+
        return dcb_parse_mapping("TC", key, IEEE_8021QAZ_MAX_TCS - 1,
-                                "RATE", rate, -1,
+                                "RATE", rate_kbits_per_sec, -1,
                                 dcb_set_u64, data);
 }
 
@@ -62,8 +69,14 @@ static void dcb_maxrate_print_tc_maxrate(struct dcb *dcb, const struct ieee_maxr
        print_string(PRINT_FP, NULL, "tc-maxrate ", NULL);
 
        for (i = 0; i < size; i++) {
+               /* ieee_maxrate UAPI returns kbps.
+                * print_rate() expects Bps for display.
+                * convert kbps to Bps by multiplying 125.
+                */
+               __u64 rate_bytes_per_sec  = maxrate->tc_maxrate[i] * 125;
+
                snprintf(b, sizeof(b), "%zd:%%s ", i);
-               print_rate(dcb->use_iec, PRINT_ANY, NULL, b, maxrate->tc_maxrate[i]);
+               print_rate(dcb->use_iec, PRINT_ANY, NULL, b, rate_bytes_per_sec);
        }
 
        close_json_array(PRINT_JSON, "tc_maxrate");