From 3679b46ff2002ce1380faa0f518ac3f9454aa09a Mon Sep 17 00:00:00 2001 From: logicog Date: Sun, 30 Nov 2025 22:27:43 +0100 Subject: [PATCH] Add LAG implementation in httpd --- httpd/httpd.c | 2 ++ httpd/page_impl.c | 33 +++++++++++++++++++++++++++++---- 2 files changed, 31 insertions(+), 4 deletions(-) diff --git a/httpd/httpd.c b/httpd/httpd.c index eb25cfd..8f6c923 100644 --- a/httpd/httpd.c +++ b/httpd/httpd.c @@ -570,6 +570,8 @@ void httpd_appcall(void) send_eee(); } else if (is_word(q, "/mirror.json")) { send_mirror(); + } else if (is_word(q, "/lag.json")) { + send_lag(); } else if (is_word(q, "/config")) { send_config(); } else if (is_word(q, "/cmd_log")) { diff --git a/httpd/page_impl.c b/httpd/page_impl.c index 5c66f99..21c4b38 100644 --- a/httpd/page_impl.c +++ b/httpd/page_impl.c @@ -216,9 +216,8 @@ void send_counters(char port) void send_mirror(void) { - print_string("send_eee called\n"); + print_string("send_mirror called\n"); slen = strtox(outbuf, HTTP_RESPONCE_JSON); - print_string("sending EEE status\n"); reg_read_m(RTL837x_MIRROR_CTRL); uint8_t mPort = sfr_data[3]; @@ -237,14 +236,14 @@ void send_mirror(void) m = (m << 8) | sfr_data[1]; slen += strtox(outbuf + slen, ",\"mirror_rx\":\""); for (uint8_t i = 0; i < 16; i++) { - bool_to_html(m & 0x8000); + bool_to_html(!!(m & 0x8000)); m <<= 1; } m = sfr_data[2]; m = (m << 8) | sfr_data[3]; slen += strtox(outbuf + slen, "\",\"mirror_tx\":\""); for (uint8_t i = 0; i < 16; i++) { - bool_to_html(m & 0x8000); + bool_to_html(!!(m & 0x8000)); m <<= 1; } char_to_html('\"'); @@ -252,6 +251,32 @@ void send_mirror(void) } +void send_lag(void) +{ + print_string("send_lag called\n"); + slen = strtox(outbuf, HTTP_RESPONCE_JSON); + + char_to_html('['); + for (uint8_t l=0; l < 4; l++) { + slen += strtox(outbuf + slen, "{\"lagNum\":"); + itoa_html(l); + slen += strtox(outbuf + slen, ",\"members\":\""); + reg_read_m(RTL837X_TRK_MBR_CTRL_BASE + (l << 2)); + uint16_t ports = ((uint16_t)sfr_data[2] << 8) | sfr_data[3]; + for (uint8_t i = 0; i < 16; i++) { + bool_to_html(!!(ports & 0x8000)); + ports <<= 1; + } + slen += strtox(outbuf + slen, "\",\"hash\":\""); + reg_read_m(RTL837X_TRK_HASH_CTRL_BASE + (l << 2)); + sfr_data_to_html(); + slen += strtox(outbuf + slen, "\"},"); + } + slen -=1; // remove comma + char_to_html(']'); +} + + void send_eee(void) { print_string("send_eee called\nsending EEE status\n");