Fix and refactor parse_bw()

This commit is contained in:
René van Dorst
2026-08-25 07:54:15 +02:00
parent 5ddec9710a
commit 3776f12f5c
+18 -19
View File
@@ -1327,9 +1327,7 @@ void parse_eee(void)
void parse_bw(void) void parse_bw(void)
{ {
__xdata uint32_t bw = 0; if (cmd_words_len < 3) // Check for at least 3 arguments
if (cmd_words_len < 2) // Check for at least 2 arguments
goto err; goto err;
if (cmd_parse_port_separator(cmd_words_b[2]) == 0) if (cmd_parse_port_separator(cmd_words_b[2]) == 0)
@@ -1344,8 +1342,13 @@ void parse_bw(void)
if (cmd_words_len < 4) // Check for at least 4 arguments if (cmd_words_len < 4) // Check for at least 4 arguments
goto err; goto err;
// Ensure first argument is only `in` or `out`.
__bit is_in = cmd_compare(1, "in") != 0;
if (!(is_in || cmd_compare(1, "out")))
goto err;
if (cmd_compare(3, "drop")) { if (cmd_compare(3, "drop")) {
if (cmd_compare(1, "in")) { if (is_in) {
bandwidth_ingress_drop(port); bandwidth_ingress_drop(port);
return; return;
} }
@@ -1353,7 +1356,7 @@ void parse_bw(void)
} }
if (cmd_compare(3, "fc")) { if (cmd_compare(3, "fc")) {
if (cmd_compare(1, "in")) { if (is_in) {
bandwidth_ingress_fc(port); bandwidth_ingress_fc(port);
return; return;
} }
@@ -1361,34 +1364,30 @@ void parse_bw(void)
} }
if (cmd_compare(3, "off")) { if (cmd_compare(3, "off")) {
if (cmd_compare(1, "in")) { if (is_in) {
bandwidth_ingress_disable(port); bandwidth_ingress_disable(port);
return; } else {
} else if (cmd_compare(1, "out")) {
bandwidth_egress_disable(port); bandwidth_egress_disable(port);
return;
} }
goto err; return;
} }
__xdata uint32_t bw = 0;
uint8_t hex_size = atoi_hex(cmd_words_b[3]); uint8_t hex_size = atoi_hex(cmd_words_b[3]);
if (hex_size == 0 || hex_size > 4) { if (hex_size == 0 || hex_size > 4)
goto err; goto err;
}
uint8_t i = 0; uint8_t i = 0;
while (hex_size) { do {
hex_size--; hex_size--;
*(((uint8_t *) &bw) + hex_size) = hexvalue[i++]; *(((uint8_t *) &bw) + hex_size) = hexvalue[i++];
} } while (hex_size);
if (cmd_compare(1, "in")) { if (is_in) {
bandwidth_ingress_set(port, bw); bandwidth_ingress_set(port, bw);
} else if (cmd_compare(1, "out")) {
bandwidth_egress_set(port, bw);
} else { } else {
goto err; bandwidth_egress_set(port, bw);
} }
return; return;
err: err: