Updated to remove obsolete constants
[people/sha0/gpxe.git] / src / include / gpxe / llh.h
1 #ifndef _LLH_H
2 #define _LLH_H
3
4 /** @file
5  *
6  * Link-layer headers
7  *
8  * This file defines a media-independent link-layer header, used for
9  * communication between the network and link layers of the stack.
10  *
11  */
12
13 #include <stdint.h>
14
15 /** Maximum length of a link-layer address */
16 #define MAX_LLH_ADDR_LEN 6
17
18 /** Maximum length of a network-layer address */
19 #define MAX_NET_ADDR_LEN 4
20
21 /* Network-layer address may be required to contain a raw link-layer address */
22 #if MAX_NET_ADDR_LEN < MAX_LLH_ADDR_LEN
23 #undef MAX_NET_ADDR_LEN
24 #define MAX_NET_ADDR_LEN MAX_LLH_ADDR_LEN
25 #endif
26
27 /** A media-independent link-layer header
28  *
29  * This structure represents a generic link-layer header.  It never
30  * appears on the wire, but is used to communicate between different
31  * layers within the gPXE protocol stack.
32  */
33 struct gpxehdr {
34         /** The network-layer protocol
35          *
36          * This is the network-layer protocol expressed as an
37          * ETH_P_XXX constant, in network-byte order.
38          */
39         uint16_t net_proto;
40         /** Flags
41          *
42          * Filled in only on outgoing packets.  Value is the
43          * bitwise-OR of zero or more GPXE_FL_XXX constants.
44          */
45         uint8_t flags;
46         /** Network-layer address length 
47          *
48          * Filled in only on outgoing packets.
49          */
50         uint8_t net_addr_len;
51         /** Network-layer address
52          *
53          * Filled in only on outgoing packets.
54          */
55         uint8_t net_addr[MAX_NET_ADDR_LEN];
56 } __attribute__ (( packed ));
57
58 /* Media-independent link-layer header flags */
59 #define GPXE_FL_BROADCAST       0x01
60 #define GPXE_FL_MULTICAST       0x02
61 #define GPXE_FL_RAW             0x04
62
63 #endif /* _LLH_H */