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
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.
19 To validate, parse and process the DHCP options
24 #ifndef __EFI_DHCP4_OPTION_H__
25 #define __EFI_DHCP4_OPTION_H__
28 // DHCP option tags (types)
32 // RFC1497 vendor extensions
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
56 // IP Layer Parameters per Host
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
67 // IP Layer Parameters per Interface
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
79 // Link Layer Parameters per Interface
81 DHCP_TAG_TRAILER
= 34, // Trailer Encapsulation
82 DHCP_TAG_ARPAGE
= 35, // ARP Cache Timeout
83 DHCP_TAG_ETHER_ENCAP
= 36, // Ethernet Encapsulation
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
93 // Application and Service Parameters
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
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
138 DHCP_OPTION_MAGIC
= 0x63538263, // Network byte order
139 DHCP_MAX_OPTIONS
= 256,
142 // DHCP option types, this is used to validate the DHCP options.
144 DHCP_OPTION_SWITCH
= 1,
152 // Value of DHCP overload option
154 DHCP_OVERLOAD_FILENAME
= 1,
155 DHCP_OVERLOAD_SVRNAME
= 2,
156 DHCP_OVERLOAD_BOTH
= 3
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.
170 // Structures used to parse the DHCP options with RFC3396 support.
178 DHCP_OPTION_COUNT
*OpCount
;
179 DHCP_OPTION
*Options
;
181 } DHCP_OPTION_CONTEXT
;
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.
189 IP4_ADDR NetMask
; // DHCP_TAG_NETMASK
190 IP4_ADDR Router
; // DHCP_TAG_ROUTER, only the first router is used
193 // DHCP specific options
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
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.
217 } DHCP_OPTION_FORMAT
;
221 (*DHCP_CHECK_OPTION
) (
230 IN EFI_DHCP4_PACKET
*Packet
,
231 IN DHCP_CHECK_OPTION Check
, OPTIONAL
236 DhcpValidateOptions (
237 IN EFI_DHCP4_PACKET
*Packet
,
238 OUT DHCP_PARAMETER
**Para OPTIONAL
243 IN EFI_DHCP4_PACKET
*Packet
,
245 OUT DHCP_OPTION
**OptionPoint
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