/** @file\r
To validate, parse and process the DHCP options.\r
- \r
-Copyright (c) 2006, Intel Corporation.<BR>\r
-All rights reserved. This program and the accompanying materials\r
-are licensed and made available under the terms and conditions of the BSD License\r
-which accompanies this distribution. The full text of the license may be found at\r
-http://opensource.org/licenses/bsd-license.php\r
\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>\r
+SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
\r
///\r
/// DHCP option tags (types)\r
///\r
-typedef enum {\r
- //\r
- // RFC1497 vendor extensions\r
- //\r
- DHCP_TAG_PAD = 0, // Pad Option\r
- DHCP_TAG_EOP = 255, // End Option\r
- DHCP_TAG_NETMASK = 1, // Subnet Mask\r
- DHCP_TAG_TIME_OFFSET = 2, // Time Offset from UTC\r
- DHCP_TAG_ROUTER = 3, // Router option,\r
- DHCP_TAG_TIME_SERVER = 4, // Time Server\r
- DHCP_TAG_NAME_SERVER = 5, // Name Server\r
- DHCP_TAG_DNS_SERVER = 6, // Domain Name Server\r
- DHCP_TAG_LOG_SERVER = 7, // Log Server\r
- DHCP_TAG_COOKIE_SERVER = 8, // Cookie Server\r
- DHCP_TAG_LPR_SERVER = 9, // LPR Print Server\r
- DHCP_TAG_IMPRESS_SERVER = 10, // Impress Server\r
- DHCP_TAG_RL_SERVER = 11, // Resource Location Server\r
- DHCP_TAG_HOSTNAME = 12, // Host Name\r
- DHCP_TAG_BOOTFILE_LEN = 13, // Boot File Size\r
- DHCP_TAG_DUMP = 14, // Merit Dump File\r
- DHCP_TAG_DOMAINNAME = 15, // Domain Name\r
- DHCP_TAG_SWAP_SERVER = 16, // Swap Server\r
- DHCP_TAG_ROOTPATH = 17, // Root path\r
- DHCP_TAG_EXTEND_PATH = 18, // Extensions Path\r
-\r
- //\r
- // IP Layer Parameters per Host\r
- //\r
- DHCP_TAG_IPFORWARD = 19, // IP Forwarding Enable/Disable\r
- DHCP_TAG_NONLOCAL_SRR = 20, // on-Local Source Routing Enable/Disable\r
- DHCP_TAG_POLICY_SRR = 21, // Policy Filter\r
- DHCP_TAG_EMTU = 22, // Maximum Datagram Reassembly Size\r
- DHCP_TAG_TTL = 23, // Default IP Time-to-live\r
- DHCP_TAG_PATHMTU_AGE = 24, // Path MTU Aging Timeout\r
- DHCP_TAG_PATHMTU_PLATEAU = 25, // Path MTU Plateau Table\r
\r
- //\r
- // IP Layer Parameters per Interface\r
- //\r
- DHCP_TAG_IFMTU = 26, // Interface MTU\r
- DHCP_TAG_SUBNET_LOCAL = 27, // All Subnets are Local\r
- DHCP_TAG_BROADCAST = 28, // Broadcast Address\r
- DHCP_TAG_DISCOVER_MASK = 29, // Perform Mask Discovery\r
- DHCP_TAG_SUPPLY_MASK = 30, // Mask Supplier\r
- DHCP_TAG_DISCOVER_ROUTE = 31, // Perform Router Discovery\r
- DHCP_TAG_ROUTER_SOLICIT = 32, // Router Solicitation Address\r
- DHCP_TAG_STATIC_ROUTE = 33, // Static Route\r
-\r
- //\r
- // Link Layer Parameters per Interface\r
- //\r
- DHCP_TAG_TRAILER = 34, // Trailer Encapsulation\r
- DHCP_TAG_ARPAGE = 35, // ARP Cache Timeout\r
- DHCP_TAG_ETHER_ENCAP = 36, // Ethernet Encapsulation\r
+#define DHCP_OPTION_MAGIC 0x63538263 // Network byte order\r
+#define DHCP_MAX_OPTIONS 256\r
\r
- //\r
- // TCP Parameters\r
- //\r
- DHCP_TAG_TCP_TTL = 37, // TCP Default TTL\r
- DHCP_TAG_KEEP_INTERVAL = 38, // TCP Keepalive Interval\r
- DHCP_TAG_KEEP_GARBAGE = 39, // TCP Keepalive Garbage\r
\r
- //\r
- // Application and Service Parameters\r
- //\r
- DHCP_TAG_NIS_DOMAIN = 40, // Network Information Service Domain\r
- DHCP_TAG_NIS_SERVER = 41, // Network Information Servers\r
- DHCP_TAG_NTP_SERVER = 42, // Network Time Protocol Servers\r
- DHCP_TAG_VENDOR = 43, // Vendor Specific Information\r
- DHCP_TAG_NBNS = 44, // NetBIOS over TCP/IP Name Server\r
- DHCP_TAG_NBDD = 45, // NetBIOS Datagram Distribution Server\r
- DHCP_TAG_NBTYPE = 46, // NetBIOS over TCP/IP Node Type\r
- DHCP_TAG_NBSCOPE = 47, // NetBIOS over TCP/IP Scope\r
- DHCP_TAG_XFONT = 48, // X Window System Font Server\r
- DHCP_TAG_XDM = 49, // X Window System Display Manager\r
- DHCP_TAG_NISPLUS = 64, // Network Information Service+ Domain\r
- DHCP_TAG_NISPLUS_SERVER = 65, // Network Information Service+ Servers\r
- DHCP_TAG_MOBILEIP = 68, // Mobile IP Home Agent\r
- DHCP_TAG_SMTP = 69, // Simple Mail Transport Protocol Server\r
- DHCP_TAG_POP3 = 70, // Post Office Protocol (POP3) Server\r
- DHCP_TAG_NNTP = 71, // Network News Transport Protocol Server\r
- DHCP_TAG_WWW = 72, // Default World Wide Web (WWW) Server\r
- DHCP_TAG_FINGER = 73, // Default Finger Server\r
- DHCP_TAG_IRC = 74, // Default Internet Relay Chat (IRC) Server\r
- DHCP_TAG_STTALK = 75, // StreetTalk Server\r
- DHCP_TAG_STDA = 76, // StreetTalk Directory Assistance Server\r
- DHCP_TAG_CLASSLESS_ROUTE = 121, // Classless Route\r
+//\r
+// DHCP option types, this is used to validate the DHCP options.\r
+//\r
+#define DHCP_OPTION_SWITCH 1\r
+#define DHCP_OPTION_INT8 2\r
+#define DHCP_OPTION_INT16 3\r
+#define DHCP_OPTION_INT32 4\r
+#define DHCP_OPTION_IP 5\r
+#define DHCP_OPTION_IPPAIR 6\r
\r
- //\r
- // DHCP Extensions\r
- //\r
- DHCP_TAG_REQUEST_IP = 50, // Requested IP Address\r
- DHCP_TAG_LEASE = 51, // IP Address Lease Time\r
- DHCP_TAG_OVERLOAD = 52, // Option Overload\r
- DHCP_TAG_TFTP = 66, // TFTP server name\r
- DHCP_TAG_BOOTFILE = 67, // Bootfile name\r
- DHCP_TAG_TYPE = 53, // DHCP Message Type\r
- DHCP_TAG_SERVER_ID = 54, // Server Identifier\r
- DHCP_TAG_PARA_LIST = 55, // Parameter Request List\r
- DHCP_TAG_MESSAGE = 56, // Message\r
- DHCP_TAG_MAXMSG = 57, // Maximum DHCP Message Size\r
- DHCP_TAG_T1 = 58, // Renewal (T1) Time Value\r
- DHCP_TAG_T2 = 59, // Rebinding (T2) Time Value\r
- DHCP_TAG_VENDOR_CLASS = 60, // Vendor class identifier\r
- DHCP_TAG_CLIENT_ID = 61 // Client-identifier\r
-} DHCP_TAGS;\r
-\r
-#define DHCP_OPTION_MAGIC 0x63538263 // Network byte order\r
-#define DHCP_MAX_OPTIONS 256\r
-\r
-typedef enum {\r
- //\r
- // DHCP option types, this is used to validate the DHCP options.\r
- //\r
- DHCP_OPTION_SWITCH = 1,\r
- DHCP_OPTION_INT8,\r
- DHCP_OPTION_INT16,\r
- DHCP_OPTION_INT32,\r
- DHCP_OPTION_IP,\r
- DHCP_OPTION_IPPAIR\r
-} DHCP_OPTION_TYPE; \r
-\r
-typedef enum {\r
- //\r
- // Value of DHCP overload option\r
- //\r
- DHCP_OVERLOAD_FILENAME = 1,\r
- DHCP_OVERLOAD_SVRNAME = 2,\r
- DHCP_OVERLOAD_BOTH = 3\r
-} DHCP_OVERLOAD_TYPE;\r
+//\r
+// Value of DHCP overload option\r
+//\r
+#define DHCP_OVERLOAD_FILENAME 1\r
+#define DHCP_OVERLOAD_SVRNAME 2\r
+#define DHCP_OVERLOAD_BOTH 3\r
\r
///\r
/// The DHCP option structure. This structure extends the EFI_DHCP_OPTION\r
/// classless route, who can parse the DHCP offer to get them.\r
///\r
typedef struct {\r
- IP4_ADDR NetMask; // DHCP_TAG_NETMASK\r
- IP4_ADDR Router; // DHCP_TAG_ROUTER, only the first router is used\r
+ IP4_ADDR NetMask; // DHCP4_TAG_NETMASK\r
+ IP4_ADDR Router; // DHCP4_TAG_ROUTER, only the first router is used\r
\r
//\r
// DHCP specific options\r
//\r
- UINT8 DhcpType; // DHCP_TAG_TYPE\r
- UINT8 Overload; // DHCP_TAG_OVERLOAD\r
- IP4_ADDR ServerId; // DHCP_TAG_SERVER_ID\r
- UINT32 Lease; // DHCP_TAG_LEASE\r
- UINT32 T1; // DHCP_TAG_T1\r
- UINT32 T2; // DHCP_TAG_T2\r
+ UINT8 DhcpType; // DHCP4_TAG_MSG_TYPE\r
+ UINT8 Overload; // DHCP4_TAG_OVERLOAD\r
+ IP4_ADDR ServerId; // DHCP4_TAG_SERVER_ID\r
+ UINT32 Lease; // DHCP4_TAG_LEASE\r
+ UINT32 T1; // DHCP4_TAG_T1\r
+ UINT32 T2; // DHCP4_TAG_T2\r
} DHCP_PARAMETER;\r
\r
///\r
@param[out] OptionPoint The array that contains the DHCP options. Caller\r
should free it.\r
\r
+ @retval EFI_NOT_FOUND Cannot find any option.\r
@retval EFI_OUT_OF_RESOURCES Failed to allocate memory to parse the packet.\r
@retval EFI_INVALID_PARAMETER The options are mal-formated\r
@retval EFI_SUCCESS The options are parsed into OptionPoint\r