From 1374272db6b784873a799578024a2f10e913da34 Mon Sep 17 00:00:00 2001 From: logicog Date: Wed, 4 Mar 2026 20:21:28 +0100 Subject: [PATCH] Add simulation support for bandwidth control --- tools/httpd_sim.c | 62 ++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 59 insertions(+), 3 deletions(-) diff --git a/tools/httpd_sim.c b/tools/httpd_sim.c index 21cdd19..cf80916 100644 --- a/tools/httpd_sim.c +++ b/tools/httpd_sim.c @@ -15,7 +15,7 @@ #define PASSWORD "1234" #define SESSION_TIMEOUT 2000 -#define PORTS 9 +#define PORTS 6 #define NSFP 1 #define N_COUNTERS 52 @@ -229,7 +229,7 @@ void send_status(int s) void send_counters(int s, int port) { - struct json_object *v, *counters; + struct json_object *counters; const char *jstring; char *header = "HTTP/1.1 200 OK\r\n" "Cache-Control: no-cache\r\n" @@ -239,7 +239,6 @@ void send_counters(int s, int port) counters = json_object_new_array_ext(N_COUNTERS); for (int i = 0; i < N_COUNTERS; i++) { - v = json_object_new_object(); sprintf(counter_buf, "0x%016lx", 0x1234UL + i); json_object_array_add(counters, json_object_new_string(counter_buf)); } @@ -283,6 +282,56 @@ void send_eee(int s) } +void send_bandwidth(int s) +{ + struct json_object *ports, *v; + const char *jstring; + uint32_t bw; + int limited, fcEnabled; + char *header = "HTTP/1.1 200 OK\r\n" + "Content-Type: application/json; charset=UTF-8\r\n\r\n"; + + ports = json_object_new_array_ext(PORTS); + for (int i = 1; i <= PORTS; i++) { + v = json_object_new_object(); + json_object_object_add(v, "portNum", json_object_new_int(i)); + if (i % 2) { + limited = 1; + fcEnabled = i % 4 ? 1 : 0; + bw = 0x100; + } else { + limited = 0; + fcEnabled = 0; + bw = 0xfffff; + } + char bw_buf[20]; + sprintf(bw_buf, "%08x", bw); + json_object_object_add(v, "iLimited", json_object_new_int(limited)); + json_object_object_add(v, "iFC", json_object_new_int(fcEnabled)); + json_object_object_add(v, "iBW", json_object_new_string(bw_buf)); + + if (i % 4) { + limited = 1; + bw = 0x1000; + } else { + limited = 0; + bw = 0xfffff; + } + sprintf(bw_buf, "%08x", bw); + json_object_object_add(v, "eLimited", json_object_new_int(limited)); + json_object_object_add(v, "eBW", json_object_new_string(bw_buf)); + + json_object_array_add(ports, v); + } + + write(s, header, strlen(header)); + + jstring = json_object_to_json_string_ext(ports, JSON_C_TO_STRING_PLAIN); + write(s, jstring, strlen(jstring)); + json_object_put(ports); +} + + void send_mirror(int s) { uint16_t mirror_tx, mirror_rx = 0; @@ -593,6 +642,13 @@ void launch(struct Server *server) else send_eee(new_socket); goto done; + } else if (!strncmp(&buffer[4], "/bandwidth.json", 15)) { + printf("Bandwidth request\n"); + if (!authenticated) + send_unauthorized(new_socket); + else + send_bandwidth(new_socket); + goto done; } else if (!strncmp(&buffer[4], "/information.json", 17)) { printf("Status request\n"); if (!authenticated)