diff options
author | Andreas Baumann <mail@andreasbaumann.cc> | 2017-08-02 18:26:23 +0200 |
---|---|---|
committer | Andreas Baumann <mail@andreasbaumann.cc> | 2017-08-02 18:26:23 +0200 |
commit | db1f6609d13a888dd7212c9ed2840846e70a284e (patch) | |
tree | e8a4c777bb5feafda1a50feb9c6280a36d0a0dfb /src/kernel/kernel.c | |
parent | 7d40548496f4d3cdfce828fc8e4f0fd4286e873a (diff) | |
download | abaos-db1f6609d13a888dd7212c9ed2840846e70a284e.tar.gz abaos-db1f6609d13a888dd7212c9ed2840846e70a284e.tar.bz2 |
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
Diffstat (limited to 'src/kernel/kernel.c')
-rw-r--r-- | src/kernel/kernel.c | 27 |
1 files changed, 20 insertions, 7 deletions
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 |