summaryrefslogtreecommitdiff
path: root/src/kernel
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
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')
-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