Merge pull request #105 from logicog/mgmt_vlan

Add support for pin switch management features to a VLAN.
This commit is contained in:
René van Dorst
2026-01-29 19:31:32 +00:00
committed by GitHub
2 changed files with 19 additions and 12 deletions
+9 -4
View File
@@ -42,6 +42,7 @@ extern __xdata struct dhcp_state dhcp_state;
__xdata uint8_t vlan_names[VLAN_NAMES_SIZE]; __xdata uint8_t vlan_names[VLAN_NAMES_SIZE];
__xdata uint16_t vlan_ptr; __xdata uint16_t vlan_ptr;
extern __xdata uint16_t management_vlan;
__xdata uint8_t gpio_last_value[8] = { 0 }; __xdata uint8_t gpio_last_value[8] = { 0 };
// Temporatly for str to hex convertion value. // Temporatly for str to hex convertion value.
@@ -289,16 +290,20 @@ void parse_vlan(void)
vlan_delete(vlan); vlan_delete(vlan);
return; return;
} }
if (cmd_words_b[2] > 0 && cmd_compare(2, "mgmt")) {
management_vlan = vlan;
if (!vlan)
print_string("Management VLAN disabled\n");
else
print_string("Management VLAN set to "); print_short(management_vlan); write_char('\n');
return;
}
uint8_t w = 2; uint8_t w = 2;
write_char('#');
print_byte(cmd_words_b[w] );
write_char('#'); write_char(cmd_buffer[cmd_words_b[w]]);
if (cmd_words_b[w] > 0 && isletter(cmd_buffer[cmd_words_b[w]])) { if (cmd_words_b[w] > 0 && isletter(cmd_buffer[cmd_words_b[w]])) {
register uint8_t i = 0; register uint8_t i = 0;
vlan_names[vlan_ptr++] = hex[(vlan >> 8) & 0xf]; vlan_names[vlan_ptr++] = hex[(vlan >> 8) & 0xf];
vlan_names[vlan_ptr++] = hex[(vlan >> 4) & 0xf] ; vlan_names[vlan_ptr++] = hex[(vlan >> 4) & 0xf] ;
vlan_names[vlan_ptr++] = hex[vlan & 0xf]; vlan_names[vlan_ptr++] = hex[vlan & 0xf];
print_string("COPYING: >");
while(cmd_buffer[cmd_words_b[w] + i] != ' ') { while(cmd_buffer[cmd_words_b[w] + i] != ' ') {
write_char(cmd_buffer[cmd_words_b[w] + i]); write_char(cmd_buffer[cmd_words_b[w] + i]);
vlan_names[vlan_ptr++] = cmd_buffer[cmd_words_b[w] + i++]; vlan_names[vlan_ptr++] = cmd_buffer[cmd_words_b[w] + i++];
+10 -8
View File
@@ -105,6 +105,7 @@ __xdata uint8_t rx_headers[16]; // Packet header(s) on RX
__xdata uint8_t uip_buf[UIP_CONF_BUFFER_SIZE+2]; __xdata uint8_t uip_buf[UIP_CONF_BUFFER_SIZE+2];
__xdata uint16_t rx_packet_vlan; __xdata uint16_t rx_packet_vlan;
__xdata uint16_t management_vlan;
__xdata uint8_t tx_seq; __xdata uint8_t tx_seq;
__xdata uint8_t stpEnabled; __xdata uint8_t stpEnabled;
@@ -115,7 +116,6 @@ __code uint16_t bit_mask[16] = {
}; };
__xdata uint8_t was_offline;
__xdata uint8_t linkbits_last[4]; __xdata uint8_t linkbits_last[4];
__xdata uint8_t linkbits_last_p89; __xdata uint8_t linkbits_last_p89;
__xdata uint8_t sfp_pins_last; __xdata uint8_t sfp_pins_last;
@@ -921,12 +921,14 @@ void handle_rx(void)
tcpip_output(); tcpip_output();
} }
} else if (uip_buf[ETHERTYPE_OFFSET] == 0x08 && uip_buf[ETHERTYPE_OFFSET + 1] == 0x00) { // TCP? } else if (uip_buf[ETHERTYPE_OFFSET] == 0x08 && uip_buf[ETHERTYPE_OFFSET + 1] == 0x00) { // TCP?
uip_arp_ipin(); // Learn MAC addresses in TCP packets if (!management_vlan || management_vlan == rx_packet_vlan) {
uip_input(); uip_arp_ipin(); // Learn MAC addresses in TCP packets
if (uip_len) { uip_input();
// Add ethernet frame if (uip_len) {
uip_arp_out(); // Add ethernet frame
tcpip_output(); uip_arp_out();
tcpip_output();
}
} }
} else { } else {
#ifdef RXTXDBG #ifdef RXTXDBG
@@ -1950,7 +1952,7 @@ void bootloader(void)
uip_arp_init(); uip_arp_init();
httpd_init(); httpd_init();
was_offline = 1; management_vlan = 0; // Disabled
setup_i2c(); setup_i2c();