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