summaryrefslogtreecommitdiff
path: root/src/net/ethernet.h
blob: a2726e7d53b9cfbb7d361bd313f9f47a59c0feaa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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