summaryrefslogtreecommitdiff
path: root/src/kernel/kernel.c
diff options
context:
space:
mode:
authorAndreas Baumann <mail@andreasbaumann.cc>2017-08-02 18:26:23 +0200
committerAndreas Baumann <mail@andreasbaumann.cc>2017-08-02 18:26:23 +0200
commitdb1f6609d13a888dd7212c9ed2840846e70a284e (patch)
treee8a4c777bb5feafda1a50feb9c6280a36d0a0dfb /src/kernel/kernel.c
parent7d40548496f4d3cdfce828fc8e4f0fd4286e873a (diff)
downloadabaos-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.c27
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