Merge pull request #349 from DrDoof/fix/lag-cmd-bounds

lag: number the groups from one and bound what the command is given
This commit is contained in:
René van Dorst
2026-08-16 06:48:28 +00:00
committed by GitHub
4 changed files with 23 additions and 10 deletions
+14 -3
View File
@@ -273,7 +273,9 @@ void parse_lag(void)
if (cmd_words_len < 2 || !isnumber(cmd_buffer[cmd_words_b[1]])) if (cmd_words_len < 2 || !isnumber(cmd_buffer[cmd_words_b[1]]))
goto err; goto err;
group = cmd_buffer[cmd_words_b[1]] - '0'; group = cmd_buffer[cmd_words_b[1]] - '1';
if (group > 3) /* '0' wraps well past three, so one test does both ends */
goto err;
uint8_t w = 2; uint8_t w = 2;
while (w < cmd_words_len) { while (w < cmd_words_len) {
@@ -283,6 +285,8 @@ void parse_lag(void)
port = cmd_buffer[cmd_words_b[w]] - '1'; port = cmd_buffer[cmd_words_b[w]] - '1';
if (isnumber(cmd_buffer[cmd_words_b[w] + 1])) if (isnumber(cmd_buffer[cmd_words_b[w] + 1]))
port = (port + 1) * 10 + cmd_buffer[cmd_words_b[w] + 1] - '1'; port = (port + 1) * 10 + cmd_buffer[cmd_words_b[w] + 1] - '1';
if (port > 8) /* phys_to_log_port holds nine entries */
goto err;
port = machine.phys_to_log_port[port]; port = machine.phys_to_log_port[port];
} else { } else {
goto err; goto err;
@@ -295,7 +299,7 @@ void parse_lag(void)
port_lag_members_set(group, members); port_lag_members_set(group, members);
return; return;
err: err:
print_string("Error: lag <lag> [port]...\n"); print_string("Error: lag <1-4> [port]...\n");
} }
@@ -304,7 +308,11 @@ void parse_lag_hash(void)
__xdata uint8_t group; __xdata uint8_t group;
__xdata uint8_t hash = 0; __xdata uint8_t hash = 0;
group = cmd_buffer[cmd_words_b[1]] - '0'; if (cmd_words_len < 2 || !isnumber(cmd_buffer[cmd_words_b[1]]))
goto err;
group = cmd_buffer[cmd_words_b[1]] - '1';
if (group > 3) /* '0' wraps well past three, so one test does both ends */
goto err;
uint8_t w = 2; uint8_t w = 2;
while (w < cmd_words_len) { while (w < cmd_words_len) {
@@ -330,6 +338,9 @@ void parse_lag_hash(void)
w++; w++;
} }
port_lag_hash_set(group, hash); port_lag_hash_set(group, hash);
return;
err:
print_string("Error: lag hash <1-4> [type]...\n");
} }
+1 -1
View File
@@ -92,7 +92,7 @@ The following shows the network configuration
On _both_ switches create a LAG with ports 1 and 2 inside and the default hash algorithm which takes On _both_ switches create a LAG with ports 1 and 2 inside and the default hash algorithm which takes
source and destination ports into account, e.g. just use the default: source and destination ports into account, e.g. just use the default:
``` ```
> lag 0 1 2 > lag 1 1 2
``` ```
+2 -2
View File
@@ -356,7 +356,7 @@ void send_l2(uint16_t idx)
*/ */
__xdata uint16_t entry = idx & 0xfff; __xdata uint16_t entry = idx & 0xfff;
__xdata uint16_t first_entry = 0xffff; // An illegal entry index __xdata uint16_t first_entry = 0xffff; // An illegal entry index
bool first = true; __bit first = true;
char_to_html('['); char_to_html('[');
while (1) { while (1) {
entries_left--; entries_left--;
@@ -370,7 +370,7 @@ void send_l2(uint16_t idx)
} while (sfr_data[3] & TBL_EXECUTE); } while (sfr_data[3] & TBL_EXECUTE);
reg_read_m(RTL837x_L2_DATA_OUT_B); reg_read_m(RTL837x_L2_DATA_OUT_B);
bool valid = (sfr_data[0] & 0x20) != 0; __bit valid = (sfr_data[0] & 0x20) != 0;
if (valid) { if (valid) {
/* separator + 74-byte worst-case entry + closing "]" */ /* separator + 74-byte worst-case entry + closing "]" */
if (slen + 76 > TCP_OUTBUF_SIZE) if (slen + 76 > TCP_OUTBUF_SIZE)
+5 -3
View File
@@ -758,7 +758,7 @@ void port_lag_members_set(__xdata uint8_t lag, __xdata uint16_t members) __banke
print_string("port_lag_members_set, lag: "); print_byte(lag); print_string(", members: "); print_short(members); print_string("port_lag_members_set, lag: "); print_byte(lag); print_string(", members: "); print_short(members);
write_char('\n'); write_char('\n');
if (lag > 3) { if (lag > 3) {
print_string("Link aggregation group must be 0-3!\n"); print_string("Link aggregation group out of range\n");
return; return;
} }
reg_read_m(RTL837X_TRK_HASH_CTRL_BASE + (lag << 2)); reg_read_m(RTL837X_TRK_HASH_CTRL_BASE + (lag << 2));
@@ -777,8 +777,10 @@ void port_lag_hash_set(__xdata uint8_t lag, __xdata uint8_t hash_bits) __banked
{ {
print_string("port_lag_hash_set, lag: "); print_byte(lag); print_string(", hash: "); print_byte(hash_bits); print_string("port_lag_hash_set, lag: "); print_byte(lag); print_string(", hash: "); print_byte(hash_bits);
write_char('\n'); write_char('\n');
if (lag > 3) if (lag > 3) {
print_string("Link aggregation group must be 0-3!\n"); print_string("Link aggregation group out of range\n");
return;
}
REG_WRITE(RTL837X_TRK_HASH_CTRL_BASE + (lag << 2), 0, 0, 0, hash_bits); REG_WRITE(RTL837X_TRK_HASH_CTRL_BASE + (lag << 2), 0, 0, 0, hash_bits);
} }