diff --git a/httpd/page_impl.c b/httpd/page_impl.c index 44c9ddcb..94ccb483 100644 --- a/httpd/page_impl.c +++ b/httpd/page_impl.c @@ -409,19 +409,14 @@ void send_l2(uint16_t idx) */ __xdata uint16_t entry = idx & 0xfff; __xdata uint16_t first_entry = 0xffff; // An illegal entry index - __xdata uint16_t mbr; __bit first = true; char_to_html('['); while (1) { entries_left--; uint8_t port = 0; uint8_t lag; - uint8_t mc = 0; reg_read_m(RTL837x_TBL_DATA_0); - // Iterate with "next address" (method 2) so static multicast entries - - // an IGMP group entry, say - are listed too, not only learned or - // static unicast ones. - REG_WRITE(RTL837x_TBL_DATA_0, sfr_data[0], sfr_data[1] & 0xfc, sfr_data[2] | (TBL_LUTREAD_NEXT_ADDRESS << 6), sfr_data[3]); + REG_WRITE(RTL837x_TBL_DATA_0, sfr_data[0], sfr_data[1] & 0xfc, sfr_data[2] | (TBL_LUTREAD_NEXT_L2UC << 6), sfr_data[3]); REG_WRITE(RTL837X_TBL_CTRL, entry >> 8, entry, TBL_L2_UNICAST, TBL_EXECUTE); do { @@ -429,7 +424,7 @@ void send_l2(uint16_t idx) } while (sfr_data[3] & TBL_EXECUTE); reg_read_m(RTL837x_L2_DATA_OUT_B); - __bit valid = (sfr_data[0] & 0x20) && !(sfr_data[0] & 0x10); + __bit valid = (sfr_data[0] & 0x20) != 0; if (valid) { /* separator + 74-byte worst-case entry + closing "]" */ if (slen + 76 > TCP_OUTBUF_SIZE) @@ -438,8 +433,6 @@ void send_l2(uint16_t idx) char_to_html(','); first = false; - mc = sfr_data[2] & 0x01; // multicast MAC: member mask, no SPA/age - // VLAN, taken from the read above instead of reading the register twice slen += strtox(outbuf + slen, "{\"vlan\":\""); charhex_to_html(sfr_data[0] & 0x0f); @@ -458,23 +451,12 @@ void send_l2(uint16_t idx) // type reg_read_m(RTL837x_L2_DATA_OUT_C); - if (mc || (sfr_data[1] & 0x1)) + if (sfr_data[1] & 0x1) slen += strtox(outbuf + slen, "\",\"type\":\"s\",\"port\":"); else slen += strtox(outbuf + slen, "\",\"type\":\"l\",\"port\":"); - if (mc) { - // Report the lowest member of the mask (an entry holding only - // the CPU port is rendered as "CPU" by the UI) - mbr = port | ((uint16_t)sfr_data[3] << 2); - port = 0; - while (mbr && !(mbr & 1)) { - mbr >>= 1; - port++; - } - } else { - port |= (sfr_data[3] & 0x3) << 2; - } + port |= (sfr_data[3] & 0x3) << 2; itoa_html(port); slen += strtox(outbuf + slen, ",\"lag\":"); lag = port_lag_of(port);