Mistake on this page?
Report an issue in GitHub or email us
prot/dhcp.h
Go to the documentation of this file.
1 /**
2  * @file
3  * DHCP protocol definitions
4  */
5 
6 /*
7  * Copyright (c) 2001-2004 Leon Woestenberg <leon.woestenberg@gmx.net>
8  * Copyright (c) 2001-2004 Axon Digital Design B.V., The Netherlands.
9  * All rights reserved.
10  *
11  * Redistribution and use in source and binary forms, with or without modification,
12  * are permitted provided that the following conditions are met:
13  *
14  * 1. Redistributions of source code must retain the above copyright notice,
15  * this list of conditions and the following disclaimer.
16  * 2. Redistributions in binary form must reproduce the above copyright notice,
17  * this list of conditions and the following disclaimer in the documentation
18  * and/or other materials provided with the distribution.
19  * 3. The name of the author may not be used to endorse or promote products
20  * derived from this software without specific prior written permission.
21  *
22  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
23  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
24  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
25  * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
26  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
27  * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
28  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
29  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
30  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
31  * OF SUCH DAMAGE.
32  *
33  * This file is part of the lwIP TCP/IP stack.
34  *
35  * Author: Leon Woestenberg <leon.woestenberg@gmx.net>
36  *
37  */
38 #ifndef LWIP_HDR_PROT_DHCP_H
39 #define LWIP_HDR_PROT_DHCP_H
40 
41 #include "lwip/opt.h"
42 #include "lwip/arch.h"
43 #include "lwip/prot/ip4.h"
44 
45 #ifdef __cplusplus
46 extern "C" {
47 #endif
48 
49  /* DHCP message item offsets and length */
50 #define DHCP_CHADDR_LEN 16U
51 #define DHCP_SNAME_OFS 44U
52 #define DHCP_SNAME_LEN 64U
53 #define DHCP_FILE_OFS 108U
54 #define DHCP_FILE_LEN 128U
55 #define DHCP_MSG_LEN 236U
56 #define DHCP_OPTIONS_OFS (DHCP_MSG_LEN + 4U) /* 4 byte: cookie */
57 
58 #ifdef PACK_STRUCT_USE_INCLUDES
59 # include "arch/bpstruct.h"
60 #endif
62 /** minimum set of fields of any DHCP message */
63 struct dhcp_msg
64 {
65  PACK_STRUCT_FLD_8(u8_t op);
66  PACK_STRUCT_FLD_8(u8_t htype);
67  PACK_STRUCT_FLD_8(u8_t hlen);
68  PACK_STRUCT_FLD_8(u8_t hops);
69  PACK_STRUCT_FIELD(u32_t xid);
70  PACK_STRUCT_FIELD(u16_t secs);
71  PACK_STRUCT_FIELD(u16_t flags);
72  PACK_STRUCT_FLD_S(ip4_addr_p_t ciaddr);
73  PACK_STRUCT_FLD_S(ip4_addr_p_t yiaddr);
74  PACK_STRUCT_FLD_S(ip4_addr_p_t siaddr);
75  PACK_STRUCT_FLD_S(ip4_addr_p_t giaddr);
76  PACK_STRUCT_FLD_8(u8_t chaddr[DHCP_CHADDR_LEN]);
77  PACK_STRUCT_FLD_8(u8_t sname[DHCP_SNAME_LEN]);
78  PACK_STRUCT_FLD_8(u8_t file[DHCP_FILE_LEN]);
79  PACK_STRUCT_FIELD(u32_t cookie);
80 #define DHCP_MIN_OPTIONS_LEN 68U
81 /** make sure user does not configure this too small */
82 #if ((defined(DHCP_OPTIONS_LEN)) && (DHCP_OPTIONS_LEN < DHCP_MIN_OPTIONS_LEN))
83 # undef DHCP_OPTIONS_LEN
84 #endif
85 /** allow this to be configured in lwipopts.h, but not too small */
86 #if (!defined(DHCP_OPTIONS_LEN))
87 /** set this to be sufficient for your options in outgoing DHCP msgs */
88 # define DHCP_OPTIONS_LEN DHCP_MIN_OPTIONS_LEN
89 #endif
90  PACK_STRUCT_FLD_8(u8_t options[DHCP_OPTIONS_LEN]);
93 #ifdef PACK_STRUCT_USE_INCLUDES
94 # include "arch/epstruct.h"
95 #endif
96 
97 
98 /* DHCP client states */
99 typedef enum {
100  DHCP_STATE_OFF = 0,
101  DHCP_STATE_REQUESTING = 1,
102  DHCP_STATE_INIT = 2,
103  DHCP_STATE_REBOOTING = 3,
104  DHCP_STATE_REBINDING = 4,
105  DHCP_STATE_RENEWING = 5,
106  DHCP_STATE_SELECTING = 6,
107  DHCP_STATE_INFORMING = 7,
108  DHCP_STATE_CHECKING = 8,
109  DHCP_STATE_PERMANENT = 9, /* not yet implemented */
110  DHCP_STATE_BOUND = 10,
111  DHCP_STATE_RELEASING = 11, /* not yet implemented */
112  DHCP_STATE_BACKING_OFF = 12
113 } dhcp_state_enum_t;
114 
115 /* DHCP op codes */
116 #define DHCP_BOOTREQUEST 1
117 #define DHCP_BOOTREPLY 2
118 
119 /* DHCP message types */
120 #define DHCP_DISCOVER 1
121 #define DHCP_OFFER 2
122 #define DHCP_REQUEST 3
123 #define DHCP_DECLINE 4
124 #define DHCP_ACK 5
125 #define DHCP_NAK 6
126 #define DHCP_RELEASE 7
127 #define DHCP_INFORM 8
128 
129 #define DHCP_MAGIC_COOKIE 0x63825363UL
130 
131 /* This is a list of options for BOOTP and DHCP, see RFC 2132 for descriptions */
132 
133 /* BootP options */
134 #define DHCP_OPTION_PAD 0
135 #define DHCP_OPTION_SUBNET_MASK 1 /* RFC 2132 3.3 */
136 #define DHCP_OPTION_ROUTER 3
137 #define DHCP_OPTION_DNS_SERVER 6
138 #define DHCP_OPTION_HOSTNAME 12
139 #define DHCP_OPTION_IP_TTL 23
140 #define DHCP_OPTION_MTU 26
141 #define DHCP_OPTION_BROADCAST 28
142 #define DHCP_OPTION_TCP_TTL 37
143 #define DHCP_OPTION_NTP 42
144 #define DHCP_OPTION_END 255
145 
146 /* DHCP options */
147 #define DHCP_OPTION_REQUESTED_IP 50 /* RFC 2132 9.1, requested IP address */
148 #define DHCP_OPTION_LEASE_TIME 51 /* RFC 2132 9.2, time in seconds, in 4 bytes */
149 #define DHCP_OPTION_OVERLOAD 52 /* RFC2132 9.3, use file and/or sname field for options */
150 
151 #define DHCP_OPTION_MESSAGE_TYPE 53 /* RFC 2132 9.6, important for DHCP */
152 #define DHCP_OPTION_MESSAGE_TYPE_LEN 1
153 
154 #define DHCP_OPTION_SERVER_ID 54 /* RFC 2132 9.7, server IP address */
155 #define DHCP_OPTION_PARAMETER_REQUEST_LIST 55 /* RFC 2132 9.8, requested option types */
156 
157 #define DHCP_OPTION_MAX_MSG_SIZE 57 /* RFC 2132 9.10, message size accepted >= 576 */
158 #define DHCP_OPTION_MAX_MSG_SIZE_LEN 2
159 
160 #define DHCP_OPTION_T1 58 /* T1 renewal time */
161 #define DHCP_OPTION_T2 59 /* T2 rebinding time */
162 #define DHCP_OPTION_US 60
163 #define DHCP_OPTION_CLIENT_ID 61
164 #define DHCP_OPTION_TFTP_SERVERNAME 66
165 #define DHCP_OPTION_BOOTFILE 67
166 
167 /* possible combinations of overloading the file and sname fields with options */
168 #define DHCP_OVERLOAD_NONE 0
169 #define DHCP_OVERLOAD_FILE 1
170 #define DHCP_OVERLOAD_SNAME 2
171 #define DHCP_OVERLOAD_SNAME_FILE 3
172 
173 
174 #ifdef __cplusplus
175 }
176 #endif
177 
178 #endif /* LWIP_HDR_PROT_DHCP_H */
IPv4 protocol definitions.
lwIP Options Configuration
#define PACK_STRUCT_BEGIN
Packed structs support.
Definition: arch.h:307
#define PACK_STRUCT_STRUCT
Packed structs support.
Definition: arch.h:328
#define DHCP_OPTIONS_LEN
make sure user does not configure this too small
Definition: prot/dhcp.h:88
#define PACK_STRUCT_END
Packed structs support.
Definition: arch.h:316
minimum set of fields of any DHCP message
Definition: prot/dhcp.h:63
Support for different processor and compiler architectures.
Important Information for this Arm website

This site uses cookies to store information on your computer. By continuing to use our site, you consent to our cookies. If you are not happy with the use of these cookies, please review our Cookie Policy to learn how they can be disabled. By disabling cookies, some features of the site will not work.