mirror of
https://github.com/logicog/RTLPlayground.git
synced 2026-08-30 14:52:51 +08:00
Add L2 entry deletion support via web
This commit is contained in:
+1
-1
@@ -134,6 +134,6 @@ function getL2() {
|
||||
}
|
||||
|
||||
window.addEventListener("load", function() {
|
||||
l2GetInterval = setInterval(getL2, 300);
|
||||
l2GetInterval = setInterval(getL2, 1000);
|
||||
});
|
||||
|
||||
|
||||
@@ -576,6 +576,9 @@ void httpd_appcall(void)
|
||||
} else if (is_word(q, "/l2.json")) {
|
||||
parse_short(q + 13); // e.g.: /l2.json?idx=10
|
||||
send_l2(short_parsed);
|
||||
} else if (is_word(q, "/l2_del.json")) {
|
||||
parse_short(q + 17);
|
||||
l2_delete(short_parsed);
|
||||
} else if (is_word(q, "/mirror.json")) {
|
||||
send_mirror();
|
||||
} else if (is_word(q, "/mtu.json")) {
|
||||
|
||||
+52
-3
@@ -16,7 +16,7 @@
|
||||
// #define DEBUG
|
||||
#include "debug.h"
|
||||
|
||||
#define L2_MAX_TRANSFER 2
|
||||
#define L2_MAX_TRANSFER 30
|
||||
|
||||
#pragma codeseg BANK1
|
||||
#pragma constseg BANK1
|
||||
@@ -288,8 +288,8 @@ void send_counters(char port)
|
||||
void send_l2(uint16_t idx)
|
||||
{
|
||||
slen = strtox(outbuf, HTTP_RESPONCE_JSON);
|
||||
dbg_string("sending L2\n"); // TODO: Remove
|
||||
print_short(idx);
|
||||
dbg_string("sending L2\n");
|
||||
dbg_short(idx);
|
||||
__xdata uint8_t entries_left = L2_MAX_TRANSFER;
|
||||
|
||||
do {
|
||||
@@ -379,6 +379,55 @@ void send_l2(uint16_t idx)
|
||||
}
|
||||
|
||||
|
||||
void l2_delete(uint16_t idx)
|
||||
{
|
||||
slen = strtox(outbuf, HTTP_RESPONCE_JSON);
|
||||
dbg_string("L2 DELETE\n");
|
||||
dbg_short(idx);
|
||||
__xdata uint8_t entries_left = L2_MAX_TRANSFER;
|
||||
|
||||
do {
|
||||
reg_read_m(RTL837X_TBL_CTRL);
|
||||
} while (sfr_data[3] & 0x01);
|
||||
slen += strtox(outbuf + slen, "{\"result\":");
|
||||
// First, search for the entry based on the index
|
||||
reg_read_m(RTL837x_TBL_DATA_0);
|
||||
REG_WRITE(RTL837x_TBL_DATA_0, sfr_data[0], sfr_data[1],sfr_data[2] | 0xc0, sfr_data[3]);
|
||||
|
||||
REG_WRITE(RTL837X_TBL_CTRL, idx >> 8, idx, TBL_L2_UNICAST, 0x1);
|
||||
do {
|
||||
reg_read_m(RTL837X_TBL_CTRL);
|
||||
} while (sfr_data[3] & 0x1);
|
||||
reg_read_m(RTL837x_L2_DATA_OUT_B);
|
||||
if (!(sfr_data[0] & 0x20)) {
|
||||
char_to_html('0');
|
||||
} else {
|
||||
sfr_data[0] &= 0x3f; // Clear SPA
|
||||
reg_write_m(RTL837x_TBL_DATA_IN_B);
|
||||
|
||||
// Second half of MAC is copied
|
||||
reg_read_m(RTL837x_L2_DATA_OUT_A);
|
||||
reg_write_m(RTL837x_TBL_DATA_IN_A);
|
||||
|
||||
reg_read_m(RTL837x_L2_DATA_OUT_C);
|
||||
sfr_data[3] &= 0xc0; // Clear age, auth and second part of ports
|
||||
sfr_data[1] &= 0xfe; // Clear nosalearn
|
||||
reg_write_m(RTL837x_TBL_DATA_IN_C);
|
||||
|
||||
reg_read_m(RTL837x_TBL_DATA_0);
|
||||
REG_WRITE(RTL837x_TBL_DATA_0, sfr_data[0], sfr_data[1],TBL_L2_UNICAST, sfr_data[3]);
|
||||
|
||||
REG_WRITE(RTL837X_TBL_CTRL, idx >> 8, idx, TBL_L2_UNICAST, TBL_WRITE | TBL_EXECUTE);
|
||||
do {
|
||||
reg_read_m(RTL837X_TBL_CTRL);
|
||||
} while (sfr_data[3] & 0x1);
|
||||
|
||||
char_to_html('1');
|
||||
}
|
||||
char_to_html('}');
|
||||
}
|
||||
|
||||
|
||||
void send_mirror(void)
|
||||
{
|
||||
dbg_string("send_mirror called\n");
|
||||
|
||||
@@ -7,6 +7,7 @@ void send_vlan(uint16_t vlan);
|
||||
void send_basic_info(void);
|
||||
void send_eee(void);
|
||||
void send_l2(uint16_t idx);
|
||||
void l2_delete(uint16_t idx);
|
||||
void send_mirror(void);
|
||||
void send_mtu(void);
|
||||
void send_config(void);
|
||||
|
||||
Reference in New Issue
Block a user