From 7d40548496f4d3cdfce828fc8e4f0fd4286e873a Mon Sep 17 00:00:00 2001 From: Andreas Baumann Date: Wed, 2 Aug 2017 11:24:26 +0200 Subject: introduced a network library, added ethernet structure, moved generic stuff out of the network driver, kernel now sees ARP messages and prints src and dst MAC addresses --- src/net/ethernet.c | 13 +++++++++++++ src/net/ethernet.h | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 src/net/ethernet.c create mode 100644 src/net/ethernet.h (limited to 'src/net') diff --git a/src/net/ethernet.c b/src/net/ethernet.c new file mode 100644 index 0000000..48db20c --- /dev/null +++ b/src/net/ethernet.c @@ -0,0 +1,13 @@ +#include "ethernet.h" + +#include "stdio.h" + +char *network_mac_to_string( network_mac_address_t mac, char *buf, size_t buflen ) +{ + snprintf( buf, buflen, "%X:%X:%X:%X:%X:%X", + mac.byte[0], mac.byte[1], mac.byte[2], + mac.byte[3], mac.byte[4], mac.byte[5] ); + + return buf; +} + diff --git a/src/net/ethernet.h b/src/net/ethernet.h new file mode 100644 index 0000000..a2726e7 --- /dev/null +++ b/src/net/ethernet.h @@ -0,0 +1,38 @@ +#ifndef ETHERNET_H +#define ETHERNET_H + +#include "stddef.h" + +#define NETWORK_ETHERNET_MAC_ADDR_STRING 6 * 3 + 1 + +typedef struct { + uint8_t byte[6]; +} network_mac_address_t; + +typedef uint16_t ether_type_t; + +// TODO: network order not host oder, so for now swap it +#define NETWORK_ETHER_TYPE_ARP 0x0608 + +#if defined( __TINYC__ ) +#pragma pack(1) +#endif + +typedef struct { + network_mac_address_t dst_addr; + network_mac_address_t src_addr; + ether_type_t type; +} __attribute__( ( packed ) ) network_ethernet_packet_header_t; + +typedef struct { + network_ethernet_packet_header_t header; + uint8_t *data; +} __attribute__( ( packed ) ) network_ethernet_packet_t; + +#if defined( __TINYC__ ) +#pragma pack() +#endif + +char *network_mac_to_string( network_mac_address_t mac, char *buf, size_t buflen ); + +#endif // ETHERNET_H -- cgit v1.2.3-54-g00ecf