From cb2acdaf3d1ee158f41a7e2617ebaaadfeef53da Mon Sep 17 00:00:00 2001 From: Andreas Baumann Date: Sun, 6 Aug 2017 21:41:16 +0200 Subject: some cleanup in ethernet constants sending back an ARP packet rtl8139: started to implement write (work in progress) --- src/kernel/kernel.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) (limited to 'src/kernel/kernel.c') diff --git a/src/kernel/kernel.c b/src/kernel/kernel.c index 460cb74..0b10f45 100644 --- a/src/kernel/kernel.c +++ b/src/kernel/kernel.c @@ -456,7 +456,8 @@ void __stack_chk_fail( void ) void handle_network_event( network_event_t *event, void *context ) { - network_ethernet_packet_t *packet = (network_ethernet_packet_t *)event->data; + network_ethernet_packet_t *packet = (network_ethernet_packet_t *)event->buf.data; + network_t *network = (network_t *)context; char src_mac_addr[NETWORK_ETHERNET_MAC_ADDR_STRING]; char dst_mac_addr[NETWORK_ETHERNET_MAC_ADDR_STRING]; @@ -464,7 +465,7 @@ void handle_network_event( network_event_t *event, void *context ) network_mac_address_to_string( packet->header.dst_addr, dst_mac_addr, NETWORK_ETHERNET_MAC_ADDR_STRING ); printf( "NETWORK DATA: src: %s, dst: %s, len: %d, type: %X\n", src_mac_addr, dst_mac_addr, - event->length, + event->buf.length, packet->header.type ); if( packet->header.type == NETWORK_ETHER_PROTOCOL_TYPE_ARP ) { @@ -479,8 +480,19 @@ void handle_network_event( network_event_t *event, void *context ) printf( "ARP: hw src: %s, dst: %s, ip src: %s, dst: %s, oper: %d\n", src_mac_addr, dst_mac_addr, src_ip, dst_ip, arp->operation ); + + // TODO: remember the address mapping + + // send answer + packet->header.dst_addr = arp->source_hardware_address; + packet->header.src_addr = global_context.network->mac_address; + arp->operation = ARP_OPERATION_ANSWER; + arp->destination_hardware_address = arp->source_hardware_address; + arp->source_hardware_address = global_context.network->mac_address; + + ((network_vtable_t *)( global_context.network->base.vtable ))->write( global_context.network, event->buf ); } // we must free the data if we no longer need it - free( event->data ); + free( event->buf.data ); } -- cgit v1.2.3-54-g00ecf