]>
Commit | Line | Data |
---|---|---|
772db4bb | 1 | /** @file |
2 | ||
3 | Copyright (c) 2006, Intel Corporation | |
4 | All rights reserved. This program and the accompanying materials | |
5 | are licensed and made available under the terms and conditions of the BSD License | |
6 | which accompanies this distribution. The full text of the license may be found at | |
7 | http://opensource.org/licenses/bsd-license.php | |
8 | ||
9 | THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, | |
10 | WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. | |
11 | ||
12 | ||
13 | Module Name: | |
14 | ||
15 | Dhcp4Option.h | |
16 | ||
17 | Abstract: | |
18 | ||
19 | To validate, parse and process the DHCP options | |
20 | ||
21 | ||
22 | **/ | |
23 | ||
24 | #ifndef __EFI_DHCP4_OPTION_H__ | |
25 | #define __EFI_DHCP4_OPTION_H__ | |
26 | ||
27 | // | |
28 | // DHCP option tags (types) | |
29 | // | |
30 | enum { | |
31 | // | |
32 | // RFC1497 vendor extensions | |
33 | // | |
34 | DHCP_TAG_PAD = 0, // Pad Option | |
35 | DHCP_TAG_EOP = 255, // End Option | |
36 | DHCP_TAG_NETMASK = 1, // Subnet Mask | |
37 | DHCP_TAG_TIME_OFFSET = 2, // Time Offset from UTC | |
38 | DHCP_TAG_ROUTER = 3, // Router option, | |
39 | DHCP_TAG_TIME_SERVER = 4, // Time Server | |
40 | DHCP_TAG_NAME_SERVER = 5, // Name Server | |
41 | DHCP_TAG_DNS_SERVER = 6, // Domain Name Server | |
42 | DHCP_TAG_LOG_SERVER = 7, // Log Server | |
43 | DHCP_TAG_COOKIE_SERVER = 8, // Cookie Server | |
44 | DHCP_TAG_LPR_SERVER = 9, // LPR Print Server | |
45 | DHCP_TAG_IMPRESS_SERVER = 10, // Impress Server | |
46 | DHCP_TAG_RL_SERVER = 11, // Resource Location Server | |
47 | DHCP_TAG_HOSTNAME = 12, // Host Name | |
48 | DHCP_TAG_BOOTFILE_LEN = 13, // Boot File Size | |
49 | DHCP_TAG_DUMP = 14, // Merit Dump File | |
50 | DHCP_TAG_DOMAINNAME = 15, // Domain Name | |
51 | DHCP_TAG_SWAP_SERVER = 16, // Swap Server | |
52 | DHCP_TAG_ROOTPATH = 17, // Root path | |
53 | DHCP_TAG_EXTEND_PATH = 18, // Extensions Path | |
54 | ||
55 | // | |
56 | // IP Layer Parameters per Host | |
57 | // | |
58 | DHCP_TAG_IPFORWARD = 19, // IP Forwarding Enable/Disable | |
59 | DHCP_TAG_NONLOCAL_SRR = 20, // on-Local Source Routing Enable/Disable | |
60 | DHCP_TAG_POLICY_SRR = 21, // Policy Filter | |
61 | DHCP_TAG_EMTU = 22, // Maximum Datagram Reassembly Size | |
62 | DHCP_TAG_TTL = 23, // Default IP Time-to-live | |
63 | DHCP_TAG_PATHMTU_AGE = 24, // Path MTU Aging Timeout | |
64 | DHCP_TAG_PATHMTU_PLATEAU = 25, // Path MTU Plateau Table | |
65 | ||
66 | // | |
67 | // IP Layer Parameters per Interface | |
68 | // | |
69 | DHCP_TAG_IFMTU = 26, // Interface MTU | |
70 | DHCP_TAG_SUBNET_LOCAL = 27, // All Subnets are Local | |
71 | DHCP_TAG_BROADCAST = 28, // Broadcast Address | |
72 | DHCP_TAG_DISCOVER_MASK = 29, // Perform Mask Discovery | |
73 | DHCP_TAG_SUPPLY_MASK = 30, // Mask Supplier | |
74 | DHCP_TAG_DISCOVER_ROUTE = 31, // Perform Router Discovery | |
75 | DHCP_TAG_ROUTER_SOLICIT = 32, // Router Solicitation Address | |
76 | DHCP_TAG_STATIC_ROUTE = 33, // Static Route | |
77 | ||
78 | // | |
79 | // Link Layer Parameters per Interface | |
80 | // | |
81 | DHCP_TAG_TRAILER = 34, // Trailer Encapsulation | |
82 | DHCP_TAG_ARPAGE = 35, // ARP Cache Timeout | |
83 | DHCP_TAG_ETHER_ENCAP = 36, // Ethernet Encapsulation | |
84 | ||
85 | // | |
86 | // TCP Parameters | |
87 | // | |
88 | DHCP_TAG_TCP_TTL = 37, // TCP Default TTL | |
89 | DHCP_TAG_KEEP_INTERVAL = 38, // TCP Keepalive Interval | |
90 | DHCP_TAG_KEEP_GARBAGE = 39, // TCP Keepalive Garbage | |
91 | ||
92 | // | |
93 | // Application and Service Parameters | |
94 | // | |
95 | DHCP_TAG_NIS_DOMAIN = 40, // Network Information Service Domain | |
96 | DHCP_TAG_NIS_SERVER = 41, // Network Information Servers | |
97 | DHCP_TAG_NTP_SERVER = 42, // Network Time Protocol Servers | |
98 | DHCP_TAG_VENDOR = 43, // Vendor Specific Information | |
99 | DHCP_TAG_NBNS = 44, // NetBIOS over TCP/IP Name Server | |
100 | DHCP_TAG_NBDD = 45, // NetBIOS Datagram Distribution Server | |
101 | DHCP_TAG_NBTYPE = 46, // NetBIOS over TCP/IP Node Type | |
102 | DHCP_TAG_NBSCOPE = 47, // NetBIOS over TCP/IP Scope | |
103 | DHCP_TAG_XFONT = 48, // X Window System Font Server | |
104 | DHCP_TAG_XDM = 49, // X Window System Display Manager | |
105 | DHCP_TAG_NISPLUS = 64, // Network Information Service+ Domain | |
106 | DHCP_TAG_NISPLUS_SERVER = 65, // Network Information Service+ Servers | |
107 | DHCP_TAG_MOBILEIP = 68, // Mobile IP Home Agent | |
108 | DHCP_TAG_SMTP = 69, // Simple Mail Transport Protocol Server | |
109 | DHCP_TAG_POP3 = 70, // Post Office Protocol (POP3) Server | |
110 | DHCP_TAG_NNTP = 71, // Network News Transport Protocol Server | |
111 | DHCP_TAG_WWW = 72, // Default World Wide Web (WWW) Server | |
112 | DHCP_TAG_FINGER = 73, // Default Finger Server | |
113 | DHCP_TAG_IRC = 74, // Default Internet Relay Chat (IRC) Server | |
114 | DHCP_TAG_STTALK = 75, // StreetTalk Server | |
115 | DHCP_TAG_STDA = 76, // StreetTalk Directory Assistance Server | |
116 | DHCP_TAG_CLASSLESS_ROUTE = 121, // Classless Route | |
117 | ||
118 | // | |
119 | // DHCP Extensions | |
120 | // | |
121 | DHCP_TAG_REQUEST_IP = 50, // Requested IP Address | |
122 | DHCP_TAG_LEASE = 51, // IP Address Lease Time | |
123 | DHCP_TAG_OVERLOAD = 52, // Option Overload | |
124 | DHCP_TAG_TFTP = 66, // TFTP server name | |
125 | DHCP_TAG_BOOTFILE = 67, // Bootfile name | |
126 | DHCP_TAG_TYPE = 53, // DHCP Message Type | |
127 | DHCP_TAG_SERVER_ID = 54, // Server Identifier | |
128 | DHCP_TAG_PARA_LIST = 55, // Parameter Request List | |
129 | DHCP_TAG_MESSAGE = 56, // Message | |
130 | DHCP_TAG_MAXMSG = 57, // Maximum DHCP Message Size | |
131 | DHCP_TAG_T1 = 58, // Renewal (T1) Time Value | |
132 | DHCP_TAG_T2 = 59, // Rebinding (T2) Time Value | |
133 | DHCP_TAG_VENDOR_CLASS = 60, // Vendor class identifier | |
687a2e5f | 134 | DHCP_TAG_CLIENT_ID = 61 // Client-identifier |
772db4bb | 135 | }; |
136 | ||
137 | enum { | |
138 | DHCP_OPTION_MAGIC = 0x63538263, // Network byte order | |
139 | DHCP_MAX_OPTIONS = 256, | |
140 | ||
141 | // | |
142 | // DHCP option types, this is used to validate the DHCP options. | |
143 | // | |
144 | DHCP_OPTION_SWITCH = 1, | |
145 | DHCP_OPTION_INT8, | |
146 | DHCP_OPTION_INT16, | |
147 | DHCP_OPTION_INT32, | |
148 | DHCP_OPTION_IP, | |
149 | DHCP_OPTION_IPPAIR, | |
150 | ||
151 | // | |
152 | // Value of DHCP overload option | |
153 | // | |
154 | DHCP_OVERLOAD_FILENAME = 1, | |
155 | DHCP_OVERLOAD_SVRNAME = 2, | |
687a2e5f | 156 | DHCP_OVERLOAD_BOTH = 3 |
772db4bb | 157 | }; |
158 | ||
159 | // | |
160 | // The DHCP option structure. This structure extends the EFI_DHCP_OPTION | |
161 | // structure to support options longer than 255 bytes, such as classless route. | |
162 | // | |
163 | typedef struct { | |
164 | UINT8 Tag; | |
165 | UINT16 Len; | |
166 | UINT8 *Data; | |
167 | } DHCP_OPTION; | |
168 | ||
169 | // | |
170 | // Structures used to parse the DHCP options with RFC3396 support. | |
171 | // | |
172 | typedef struct { | |
173 | UINT8 Index; | |
174 | UINT16 Offset; | |
175 | } DHCP_OPTION_COUNT; | |
176 | ||
177 | typedef struct { | |
178 | DHCP_OPTION_COUNT *OpCount; | |
179 | DHCP_OPTION *Options; | |
180 | UINT8 *Buf; | |
181 | } DHCP_OPTION_CONTEXT; | |
182 | ||
183 | // | |
184 | // The options that matters to DHCP driver itself. The user of | |
185 | // DHCP clients may be interested in other options, such as | |
186 | // classless route, who can parse the DHCP offer to get them. | |
187 | // | |
188 | typedef struct { | |
189 | IP4_ADDR NetMask; // DHCP_TAG_NETMASK | |
190 | IP4_ADDR Router; // DHCP_TAG_ROUTER, only the first router is used | |
191 | ||
192 | // | |
193 | // DHCP specific options | |
194 | // | |
195 | UINT8 DhcpType; // DHCP_TAG_TYPE | |
196 | UINT8 Overload; // DHCP_TAG_OVERLOAD | |
197 | IP4_ADDR ServerId; // DHCP_TAG_SERVER_ID | |
198 | UINT32 Lease; // DHCP_TAG_LEASE | |
199 | UINT32 T1; // DHCP_TAG_T1 | |
200 | UINT32 T2; // DHCP_TAG_T2 | |
201 | } DHCP_PARAMETER; | |
202 | ||
203 | // | |
204 | // Structure used to describe and validate the format of DHCP options. | |
205 | // Type is the options' data type, such as DHCP_OPTION_INT8. MinOccur | |
206 | // is the minium occurance of this data type. MaxOccur is defined | |
207 | // similarly. If MaxOccur is -1, it means that there is no limit on the | |
208 | // maximum occurance. Alert tells whether DHCP client should further | |
209 | // inspect the option to parse DHCP_PARAMETER. | |
210 | // | |
211 | typedef struct { | |
212 | UINT8 Tag; | |
213 | INTN Type; | |
214 | INTN MinOccur; | |
215 | INTN MaxOccur; | |
216 | BOOLEAN Alert; | |
217 | } DHCP_OPTION_FORMAT; | |
218 | ||
219 | typedef | |
220 | EFI_STATUS | |
221 | (*DHCP_CHECK_OPTION) ( | |
222 | IN UINT8 Tag, | |
223 | IN UINT8 Len, | |
224 | IN UINT8 *Data, | |
225 | IN VOID *Context | |
226 | ); | |
227 | ||
228 | EFI_STATUS | |
229 | DhcpIterateOptions ( | |
230 | IN EFI_DHCP4_PACKET *Packet, | |
231 | IN DHCP_CHECK_OPTION Check, OPTIONAL | |
232 | IN VOID *Context | |
233 | ); | |
234 | ||
235 | EFI_STATUS | |
236 | DhcpValidateOptions ( | |
237 | IN EFI_DHCP4_PACKET *Packet, | |
238 | OUT DHCP_PARAMETER **Para OPTIONAL | |
239 | ); | |
240 | ||
241 | EFI_STATUS | |
242 | DhcpParseOption ( | |
243 | IN EFI_DHCP4_PACKET *Packet, | |
244 | OUT INTN *Count, | |
245 | OUT DHCP_OPTION **OptionPoint | |
246 | ); | |
247 | ||
248 | UINT8 * | |
249 | DhcpAppendOption ( | |
250 | IN UINT8 *Buf, | |
251 | IN UINT8 Tag, | |
252 | IN UINT16 DataLen, | |
253 | IN UINT8 *Data | |
254 | ); | |
255 | ||
256 | EFI_STATUS | |
257 | DhcpBuild ( | |
258 | IN EFI_DHCP4_PACKET *SeedPacket, | |
259 | IN UINT32 DeleteCount, | |
260 | IN UINT8 *DeleteList OPTIONAL, | |
261 | IN UINT32 AppendCount, | |
262 | IN EFI_DHCP4_PACKET_OPTION *AppendList[] OPTIONAL, | |
263 | OUT EFI_DHCP4_PACKET **NewPacket | |
264 | ); | |
265 | ||
266 | #endif |