1 // SPDX-License-Identifier: GPL-2.0+
6 #include <linux/dcbnl.h>
11 static void dcb_maxrate_help_set(void)
14 "Usage: dcb maxrate set dev STRING\n"
15 " [ tc-maxrate RATE-MAP ]\n"
17 " where RATE-MAP := [ RATE-MAP ] RATE-MAPPING\n"
18 " RATE-MAPPING := { all | TC }:RATE\n"
24 static void dcb_maxrate_help_show(void)
27 "Usage: dcb [ -i ] maxrate show dev STRING\n"
33 static void dcb_maxrate_help(void)
36 "Usage: dcb maxrate help\n"
39 dcb_maxrate_help_show();
40 dcb_maxrate_help_set();
43 static int dcb_maxrate_parse_mapping_tc_maxrate(__u32 key
, char *value
, void *data
)
47 if (get_rate64(&rate
, value
))
50 return dcb_parse_mapping("TC", key
, IEEE_8021QAZ_MAX_TCS
- 1,
55 static void dcb_maxrate_print_tc_maxrate(struct dcb
*dcb
, const struct ieee_maxrate
*maxrate
)
57 size_t size
= ARRAY_SIZE(maxrate
->tc_maxrate
);
61 open_json_array(PRINT_JSON
, "tc_maxrate");
62 print_string(PRINT_FP
, NULL
, "tc-maxrate ", NULL
);
64 for (i
= 0; i
< size
; i
++) {
65 snprintf(b
, sizeof(b
), "%zd:%%s ", i
);
66 print_rate(dcb
->use_iec
, PRINT_ANY
, NULL
, b
, maxrate
->tc_maxrate
[i
]);
69 close_json_array(PRINT_JSON
, "tc_maxrate");
72 static void dcb_maxrate_print(struct dcb
*dcb
, const struct ieee_maxrate
*maxrate
)
74 dcb_maxrate_print_tc_maxrate(dcb
, maxrate
);
78 static int dcb_maxrate_get(struct dcb
*dcb
, const char *dev
, struct ieee_maxrate
*maxrate
)
80 return dcb_get_attribute(dcb
, dev
, DCB_ATTR_IEEE_MAXRATE
, maxrate
, sizeof(*maxrate
));
83 static int dcb_maxrate_set(struct dcb
*dcb
, const char *dev
, const struct ieee_maxrate
*maxrate
)
85 return dcb_set_attribute(dcb
, dev
, DCB_ATTR_IEEE_MAXRATE
, maxrate
, sizeof(*maxrate
));
88 static int dcb_cmd_maxrate_set(struct dcb
*dcb
, const char *dev
, int argc
, char **argv
)
90 struct ieee_maxrate maxrate
;
94 dcb_maxrate_help_set();
98 ret
= dcb_maxrate_get(dcb
, dev
, &maxrate
);
103 if (matches(*argv
, "help") == 0) {
104 dcb_maxrate_help_set();
106 } else if (matches(*argv
, "tc-maxrate") == 0) {
108 ret
= parse_mapping(&argc
, &argv
, true,
109 &dcb_maxrate_parse_mapping_tc_maxrate
, &maxrate
);
111 fprintf(stderr
, "Invalid mapping %s\n", *argv
);
116 fprintf(stderr
, "What is \"%s\"?\n", *argv
);
117 dcb_maxrate_help_set();
124 return dcb_maxrate_set(dcb
, dev
, &maxrate
);
127 static int dcb_cmd_maxrate_show(struct dcb
*dcb
, const char *dev
, int argc
, char **argv
)
129 struct ieee_maxrate maxrate
;
132 ret
= dcb_maxrate_get(dcb
, dev
, &maxrate
);
136 open_json_object(NULL
);
139 dcb_maxrate_print(dcb
, &maxrate
);
144 if (matches(*argv
, "help") == 0) {
145 dcb_maxrate_help_show();
147 } else if (matches(*argv
, "tc-maxrate") == 0) {
148 dcb_maxrate_print_tc_maxrate(dcb
, &maxrate
);
151 fprintf(stderr
, "What is \"%s\"?\n", *argv
);
152 dcb_maxrate_help_show();
164 int dcb_cmd_maxrate(struct dcb
*dcb
, int argc
, char **argv
)
166 if (!argc
|| matches(*argv
, "help") == 0) {
169 } else if (matches(*argv
, "show") == 0) {
171 return dcb_cmd_parse_dev(dcb
, argc
, argv
,
172 dcb_cmd_maxrate_show
, dcb_maxrate_help_show
);
173 } else if (matches(*argv
, "set") == 0) {
175 return dcb_cmd_parse_dev(dcb
, argc
, argv
,
176 dcb_cmd_maxrate_set
, dcb_maxrate_help_set
);
178 fprintf(stderr
, "What is \"%s\"?\n", *argv
);