From db1f6609d13a888dd7212c9ed2840846e70a284e Mon Sep 17 00:00:00 2001 From: Andreas Baumann Date: Wed, 2 Aug 2017 18:26:23 +0200 Subject: added an IPv4 module, currently containg an address to string function started to add ARP packet definition, reading and printing ARP request now some renames in networking layer --- src/kernel/kernel.c | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) (limited to 'src/kernel/kernel.c') diff --git a/src/kernel/kernel.c b/src/kernel/kernel.c index 7cef578..d870375 100644 --- a/src/kernel/kernel.c +++ b/src/kernel/kernel.c @@ -20,6 +20,7 @@ // TODO: move away from main! #include "network.h" #include "ethernet.h" +#include "arp.h" #include "setjmp.h" @@ -457,15 +458,27 @@ void handle_network_event( network_event_t *event, void *context ) { network_ethernet_packet_t *packet = (network_ethernet_packet_t *)event->data; - printf( "NETWORK DATA: len: %d, type: %X\n", event->length, + char src[NETWORK_ETHERNET_MAC_ADDR_STRING]; + char dst[NETWORK_ETHERNET_MAC_ADDR_STRING]; + network_mac_address_to_string( packet->header.src_addr, src, NETWORK_ETHERNET_MAC_ADDR_STRING ); + network_mac_address_to_string( packet->header.dst_addr, dst, NETWORK_ETHERNET_MAC_ADDR_STRING ); + printf( "NETWORK DATA: src: %s, dst: %s, len: %d, type: %X\n", + src, dst, + event->length, packet->header.type ); - if( packet->header.type == NETWORK_ETHER_TYPE_ARP ) { - char src[NETWORK_ETHERNET_MAC_ADDR_STRING]; - char dst[NETWORK_ETHERNET_MAC_ADDR_STRING]; - network_mac_to_string( packet->header.src_addr, src, NETWORK_ETHERNET_MAC_ADDR_STRING ); - network_mac_to_string( packet->header.dst_addr, dst, NETWORK_ETHERNET_MAC_ADDR_STRING ); - printf( "ARP: src: %s dst: %s\n", src, dst ); + if( packet->header.type == NETWORK_ETHER_PROTOCOL_TYPE_ARP ) { + network_arp_packet_t *arp = (network_arp_packet_t *)&packet->data; + char src2[NETWORK_PROTOCOL_IPV4_ADDR_STRING]; + char dst2[NETWORK_PROTOCOL_IPV4_ADDR_STRING]; + + network_mac_address_to_string( arp->source_hardware_address, src, NETWORK_ETHERNET_MAC_ADDR_STRING ); + network_mac_address_to_string( arp->destination_hardware_address, dst, NETWORK_ETHERNET_MAC_ADDR_STRING ); + network_ipv4_address_to_string( arp->source_protocol_address, src2, NETWORK_PROTOCOL_IPV4_ADDR_STRING ); + network_ipv4_address_to_string( arp->destination_protocol_address, dst2, NETWORK_PROTOCOL_IPV4_ADDR_STRING ); + + printf( "ARP: hw src: %s, dst: %s, ip src: %s, dst: %s, oper: %d\n", + src, dst, src2, dst2, arp->operation ); } // we must free if data if we no longer need it -- cgit v1.2.3-54-g00ecf