Embedded Xinu Operating System
An ongoing research project and educational operating system.
 All Data Structures Files Functions Variables Typedefs Enumerations Macros Groups Pages
dhcp.h
Go to the documentation of this file.
1 
5 /* Embedded Xinu, Copyright (C) 2008, 2013. All rights reserved. */
6 
7 #ifndef _DHCP_H_
8 #define _DHCP_H_
9 
10 #include <stddef.h>
11 #include <network.h>
12 #include <dhcpc.h>
13 
14 /* DHCP Operations */
15 #define DHCP_OP_REQUEST 1
16 #define DHCP_OP_REPLY 2
17 
18 
19 /* DHCP Timeout definitions */
20 #define DHCP_RETRANSMIT_COUNT 4
21 #define DHCP_RETRANSMIT_TIME 5000 /* in ms */
22 
23 /* DHCP Client States */
24 #define DHCPC_STATE_INIT 0
25 #define DHCPC_STATE_SELECTING 1
26 #define DHCPC_STATE_REQUESTING 2
27 #define DHCPC_STATE_BOUND 3
28 #define DHCPC_STATE_RENEW 4
29 #define DHCPC_STATE_REBIND 5
30 
31 /* DHCP Message Types */
32 #define DHCPDISCOVER 1
33 #define DHCPOFFER 2
34 #define DHCPREQUEST 3
35 #define DHCPDECLINE 4
36 #define DHCPACK 5
37 #define DHCPNAK 6
38 #define DHCPRELEASE 7
39 #define DHCP_TIMEOUT 0
40 
41 /* DHCP definitions */
42 #define DHCP_HDR_LEN 240
43 #define DHCP_OMSGTYPE_LEN 3
44 #define DHCP_MAGICCOOKIE 0x63825363
45 #define DHCP_HTYPE_ETHER 1
46 #define DHCP_BROADCAST 0x8000
47 
48 /* DHCP OPTIONS */
49 #define DHCP_OPT_END 255
50 #define DHCP_OPT_PAD 0
51 #define DHCP_OPT_SUBNET 1
52 #define DHCP_OPT_GATEWAY 3
53 #define DHCP_OPT_DNS 6
54 #define DHCP_OPT_HNAME 12
55 #define DHCP_OPT_DOMAIN 15
56 #define DHCP_OPT_REQUEST 50
57 #define DHCP_OPT_LEASE 51
58 #define DHCP_OPT_MSGTYPE 53
59 #define DHCP_OPT_SERVER 54
60 #define DHCP_OPT_PARAMREQ 55
61 
62 /*
63  * DHCP PACKET
64  *
65  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
66  * | Ethernet Header (14 octets) |
67  * | ... |
68  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
69  * | IP Header (20 octets) |
70  * | ... |
71  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
72  * | UDP Header (8 octets) |
73  * | ... |
74  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
75  * | Op | Hardware Type | Hardware Len | Hops |
76  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
77  * | Transaction Id |
78  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
79  * | Seconds | Flags |
80  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
81  * | Client IP |
82  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
83  * | Your IP |
84  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
85  * | Server IP |
86  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
87  * | Gateway IP |
88  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
89  * | Client Hardware (16 octets) |
90  * | ... |
91  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
92  * | Server Hostname (64 octets) |
93  * | ... |
94  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
95  * | Boot filename (128 octets) |
96  * | ... |
97  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
98  * | DHCP Options (Variable octets) |
99  * | Each options has: Type (1 octet), Len (1 octet), and Value |
100  * | ... |
101  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
102  */
103 
104 struct dhcpPkt
105 {
106  uchar op;
107  uchar htype;
108  uchar hlen;
109  uchar hops;
111  uint xid;
112  ushort secs;
113  ushort flags;
115  uint ciaddr;
116  uint yiaddr;
117  uint siaddr;
118  uint giaddr;
119  uchar chaddr[16];
121  char sname[64];
122  char file[128];
123  uint cookie;
124  uchar opts[1];
125 };
126 
127 
128 //#define ENABLE_DHCP_TRACE
129 
130 #ifdef ENABLE_DHCP_TRACE
131 # include <stdio.h>
132 # include <thread.h>
133 # define DHCP_TRACE(format, ...) \
134 do \
135 { \
136  fprintf(stderr, "%s:%d (%d) ", __FILE__, __LINE__, gettid()); \
137  fprintf(stderr, format, ## __VA_ARGS__); \
138  fprintf(stderr, "\n"); \
139 } while (0)
140 #else
141 # define DHCP_TRACE(format, ...)
142 #endif
143 
144 
145 /* Note: dhcpClient() is declared in dhcpc.h */
146 syscall dhcpSendRequest(int descrp, struct dhcpData *data);
147 syscall dhcpRecvReply(int descrp, struct dhcpData *data, uint timeout);
148 
149 #endif /* _DHCP_H_ */
syscall dhcpSendRequest(int descrp, struct dhcpData *data)
Definition: dhcpSendRequest.c:29
uint cookie
Definition: dhcp.h:123
uchar chaddr[16]
Definition: dhcp.h:119
Definition: dhcp.h:104
uchar hops
Definition: dhcp.h:109
uchar op
Definition: dhcp.h:106
uint ciaddr
Definition: dhcp.h:115
uint siaddr
Definition: dhcp.h:117
uint xid
Definition: dhcp.h:111
ushort flags
Definition: dhcp.h:113
uint yiaddr
Definition: dhcp.h:116
uint giaddr
Definition: dhcp.h:118
syscall dhcpRecvReply(int descrp, struct dhcpData *data, uint timeout)
Definition: dhcpRecvReply.c:48
uchar hlen
Definition: dhcp.h:108
uchar htype
Definition: dhcp.h:107
char file[128]
Definition: dhcp.h:122
char sname[64]
Definition: dhcp.h:121
uchar opts[1]
Definition: dhcp.h:124
ushort secs
Definition: dhcp.h:112