]> git.proxmox.com Git - mirror_edk2.git/blob - MdeModulePkg/Universal/Network/Dhcp4Dxe/Dhcp4Option.h
1. Sync the latest network stack. Add NetLibCreateIPv4DPathNode () in netlib library.
[mirror_edk2.git] / MdeModulePkg / Universal / Network / Dhcp4Dxe / Dhcp4Option.h
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
134 DHCP_TAG_CLIENT_ID = 61 // Client-identifier
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,
156 DHCP_OVERLOAD_BOTH = 3
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