summaryrefslogtreecommitdiff
path: root/src/net/arp.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/net/arp.h')
-rw-r--r--src/net/arp.h36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/net/arp.h b/src/net/arp.h
new file mode 100644
index 0000000..ba8de42
--- /dev/null
+++ b/src/net/arp.h
@@ -0,0 +1,36 @@
+#ifndef ARP_H
+#define ARP_H
+
+#include "ethernet.h"
+#include "ipv4.h"
+
+#if defined( __TINYC__ )
+#pragma pack(1)
+#endif
+
+typedef uint16_t network_hardware_type_t;
+
+// TODO: network order not host oder, so for now swap it
+#define ARP_HARDWARE_TYPE_ETHERNET (network_hardware_type_t)0x0100
+
+#define ARP_OPERATION_REQUEST 0x0100
+#define ARP_OPERATION_ANSWER 0x0200
+
+// TODO: fixed size structure, works for Ethernet MACs and IPv4 addresses
+typedef struct {
+ network_hardware_type_t hardware_type;
+ network_ether_type_t protocol_type;
+ uint8_t hardware_address_len;
+ uint8_t protocol_address_len;
+ uint16_t operation;
+ network_mac_address_t source_hardware_address;
+ network_ipv4_address_t source_protocol_address;
+ network_mac_address_t destination_hardware_address;
+ network_ipv4_address_t destination_protocol_address;
+} __attribute__( ( packed ) ) network_arp_packet_t;
+
+#if defined( __TINYC__ )
+#pragma pack()
+#endif
+
+#endif // ARP_H