]> git.proxmox.com Git - mirror_edk2.git/blame - MdeModulePkg/Universal/Network/Dhcp4Dxe/Dhcp4Option.h
1. Enable Network stack to pass SCT, currently MNP, ARP, IP4, TCP4 and DHCP4 have...
[mirror_edk2.git] / MdeModulePkg / Universal / Network / Dhcp4Dxe / Dhcp4Option.h
CommitLineData
772db4bb 1/** @file
2
3Copyright (c) 2006, Intel Corporation
4All rights reserved. This program and the accompanying materials
5are licensed and made available under the terms and conditions of the BSD License
6which accompanies this distribution. The full text of the license may be found at
7http://opensource.org/licenses/bsd-license.php
8
9THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
11
12
13Module Name:
14
15 Dhcp4Option.h
16
17Abstract:
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//
30enum {
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
137enum {
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//
163typedef 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//
172typedef struct {
173 UINT8 Index;
174 UINT16 Offset;
175} DHCP_OPTION_COUNT;
176
177typedef 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//
188typedef 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//
211typedef struct {
212 UINT8 Tag;
213 INTN Type;
214 INTN MinOccur;
215 INTN MaxOccur;
216 BOOLEAN Alert;
217} DHCP_OPTION_FORMAT;
218
219typedef
220EFI_STATUS
221(*DHCP_CHECK_OPTION) (
222 IN UINT8 Tag,
223 IN UINT8 Len,
224 IN UINT8 *Data,
225 IN VOID *Context
226 );
227
228EFI_STATUS
229DhcpIterateOptions (
230 IN EFI_DHCP4_PACKET *Packet,
231 IN DHCP_CHECK_OPTION Check, OPTIONAL
232 IN VOID *Context
233 );
234
235EFI_STATUS
236DhcpValidateOptions (
237 IN EFI_DHCP4_PACKET *Packet,
238 OUT DHCP_PARAMETER **Para OPTIONAL
239 );
240
241EFI_STATUS
242DhcpParseOption (
243 IN EFI_DHCP4_PACKET *Packet,
244 OUT INTN *Count,
245 OUT DHCP_OPTION **OptionPoint
246 );
247
248UINT8 *
249DhcpAppendOption (
250 IN UINT8 *Buf,
251 IN UINT8 Tag,
252 IN UINT16 DataLen,
253 IN UINT8 *Data
254 );
255
256EFI_STATUS
257DhcpBuild (
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