mirror of
https://github.com/logicog/RTLPlayground.git
synced 2026-08-30 14:52:51 +08:00
Merge pull request #105 from logicog/mgmt_vlan
Add support for pin switch management features to a VLAN.
This commit is contained in:
+9
-4
@@ -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
@@ -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();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user