[Change summary]:
authortye <tye@6f19259b-4bc3-4df7-8a09-765794883524>
Wed, 4 Nov 2009 08:18:34 +0000 (08:18 +0000)
committertye <tye@6f19259b-4bc3-4df7-8a09-765794883524>
Wed, 4 Nov 2009 08:18:34 +0000 (08:18 +0000)
1. Update NetLib to a combined NetLib support dual network stack:
1) Add Network Debug facility for IPv4 stack.
2) Extend the library APIs to support IPv6 stack:
   a. NetIp6IsUnspecifiedAddr
   b. NetIp6IsLinkLocalAddr
   c. NetIp6IsNetEqual
   d. NetLibCreateIPv6DPathNode.
   e. NetIp6PseudoHeadChecksum
   f. NetIp6IsValidUnicast
3) Update the structure definitions:
   a. Update NET_BUF to add EFI_IP6_HEADER and EFI_UDP_HEADER
   b. Add NET_IP6_PSEUDO_HDR
4) Update Ip4IsUnicast to NetIp4IsUnicast

2. Update the impacted modules to adopt the combined NetLib.

3. Clean up coding style errors in all network drivers and libraries.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@9391 6f19259b-4bc3-4df7-8a09-765794883524

54 files changed:
MdeModulePkg/Include/Guid/NicIp4ConfigNvData.h
MdeModulePkg/Include/Library/NetLib.h
MdeModulePkg/Library/DxeIpIoLib/DxeIpIoLib.c
MdeModulePkg/Library/DxeNetLib/DxeNetLib.c
MdeModulePkg/Library/DxeNetLib/NetBuffer.c
MdeModulePkg/Universal/Network/ArpDxe/ArpImpl.c
MdeModulePkg/Universal/Network/ArpDxe/ArpImpl.h
MdeModulePkg/Universal/Network/Dhcp4Dxe/Dhcp4Impl.c
MdeModulePkg/Universal/Network/Dhcp4Dxe/Dhcp4Impl.h
MdeModulePkg/Universal/Network/Dhcp4Dxe/Dhcp4Io.h
MdeModulePkg/Universal/Network/Dhcp4Dxe/Dhcp4Option.h
MdeModulePkg/Universal/Network/IScsiDxe/IScsiCHAP.h
MdeModulePkg/Universal/Network/IScsiDxe/IScsiConfig.c
MdeModulePkg/Universal/Network/IScsiDxe/IScsiDhcp.c
MdeModulePkg/Universal/Network/IScsiDxe/IScsiDhcp.h
MdeModulePkg/Universal/Network/IScsiDxe/IScsiIbft.c
MdeModulePkg/Universal/Network/IScsiDxe/IScsiMisc.c
MdeModulePkg/Universal/Network/IScsiDxe/IScsiProto.c
MdeModulePkg/Universal/Network/IScsiDxe/IScsiProto.h
MdeModulePkg/Universal/Network/Ip4ConfigDxe/Ip4Config.h
MdeModulePkg/Universal/Network/Ip4ConfigDxe/Ip4ConfigNv.c
MdeModulePkg/Universal/Network/Ip4ConfigDxe/NicIp4Variable.c
MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Common.h
MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Icmp.c
MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Icmp.h
MdeModulePkg/Universal/Network/Ip4Dxe/Ip4If.h
MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Igmp.h
MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Impl.c
MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Impl.h
MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Input.c
MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Input.h
MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Option.h
MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Output.c
MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Route.c
MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Route.h
MdeModulePkg/Universal/Network/Mtftp4Dxe/Mtftp4Impl.c
MdeModulePkg/Universal/Network/Mtftp4Dxe/Mtftp4Impl.h
MdeModulePkg/Universal/Network/Mtftp4Dxe/Mtftp4Option.h
MdeModulePkg/Universal/Network/SnpDxe/Snp.h
MdeModulePkg/Universal/Network/Tcp4Dxe/SockImpl.c
MdeModulePkg/Universal/Network/Tcp4Dxe/SockInterface.c
MdeModulePkg/Universal/Network/Tcp4Dxe/Socket.h
MdeModulePkg/Universal/Network/Tcp4Dxe/Tcp4Dispatcher.c
MdeModulePkg/Universal/Network/Tcp4Dxe/Tcp4Driver.c
MdeModulePkg/Universal/Network/Tcp4Dxe/Tcp4Driver.h
MdeModulePkg/Universal/Network/Tcp4Dxe/Tcp4Main.c
MdeModulePkg/Universal/Network/Tcp4Dxe/Tcp4Main.h
MdeModulePkg/Universal/Network/Tcp4Dxe/Tcp4Option.h
MdeModulePkg/Universal/Network/Tcp4Dxe/Tcp4Proto.h
MdeModulePkg/Universal/Network/Udp4Dxe/Udp4Impl.c
MdeModulePkg/Universal/Network/Udp4Dxe/Udp4Main.c
MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcDhcp.h
MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcImpl.c
MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcMtftp.h

index 5e27477..68acd90 100644 (file)
@@ -24,17 +24,16 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 \r
 #define EFI_NIC_IP4_CONFIG_VARIABLE          L"EfiNicIp4ConfigVariable"\r
 \r
-typedef enum {\r
-  //\r
-  // Config source: dhcp or static\r
-  //\r
-  IP4_CONFIG_SOURCE_DHCP     = 0,\r
-  IP4_CONFIG_SOURCE_STATIC,\r
-  IP4_CONFIG_SOURCE_MAX,\r
 \r
-  IP4_NIC_NAME_LENGTH        = 64,\r
-  MAX_IP4_CONFIG_IN_VARIABLE = 16\r
-} IP4_CONFIG_TYPE;\r
+//\r
+// Config source: dhcp or static\r
+//\r
+#define IP4_CONFIG_SOURCE_DHCP     0\r
+#define IP4_CONFIG_SOURCE_STATIC   1\r
+#define IP4_CONFIG_SOURCE_MAX      2\r
+\r
+#define IP4_NIC_NAME_LENGTH        64\r
+#define MAX_IP4_CONFIG_IN_VARIABLE 16\r
 \r
 //\r
 // The following structures are used by drivers/applications other\r
index 1a0507b..07bf2cb 100644 (file)
@@ -29,6 +29,8 @@ typedef UINT16          TCP_PORTNO;
 #define  EFI_IP_PROTO_UDP      0x11\r
 #define  EFI_IP_PROTO_TCP      0x06\r
 #define  EFI_IP_PROTO_ICMP     0x01\r
+#define  IP4_PROTO_IGMP        0x02\r
+#define  IP6_ICMP              58\r
 \r
 //\r
 // The address classification\r
@@ -40,7 +42,7 @@ typedef UINT16          TCP_PORTNO;
 #define  IP4_ADDR_CLASSE       5\r
 \r
 #define  IP4_MASK_NUM          33\r
-\r
+#define  IP6_PREFIX_NUM        129\r
 \r
 #define  IP6_HOP_BY_HOP        0\r
 #define  IP6_DESTINATION       60\r
@@ -166,7 +168,11 @@ typedef struct {
 #define NTOHS(x)  (UINT16)((((UINT16) (x) & 0xff) << 8) | \\r
                            (((UINT16) (x) & 0xff00) >> 8))\r
 \r
-#define HTONS(x)  NTOHS(x)\r
+#define HTONS(x)   NTOHS(x)\r
+#define NTOHLL(x)  SwapBytes64 (x)\r
+#define HTONLL(x)  NTOHLL(x)\r
+#define NTOHLLL(x) Ip6Swap128 (x)\r
+#define HTONLLL(x) NTOHLLL(x)\r
 \r
 //\r
 // Test the IP's attribute, All the IPs are in host byte order.\r
@@ -187,6 +193,113 @@ typedef struct {
 \r
 #define EFI_IP6_EQUAL(Ip1, Ip2)  (CompareMem ((Ip1), (Ip2), sizeof (EFI_IPv6_ADDRESS)) == 0)\r
 \r
+#define IP6_COPY_ADDRESS(Dest, Src) (CopyMem ((Dest), (Src), sizeof (EFI_IPv6_ADDRESS)))\r
+#define IP6_COPY_LINK_ADDRESS(Mac1, Mac2) (CopyMem ((Mac1), (Mac2), sizeof (EFI_MAC_ADDRESS)))\r
+\r
+//\r
+// The debug level definition. This value is also used as the \r
+// syslog's servity level. Don't change it. \r
+//\r
+#define NETDEBUG_LEVEL_TRACE   5\r
+#define NETDEBUG_LEVEL_WARNING 4\r
+#define NETDEBUG_LEVEL_ERROR   3\r
+\r
+//\r
+// Network debug message is sent out as syslog packet. \r
+//\r
+#define NET_SYSLOG_FACILITY    16             // Syslog local facility local use\r
+#define NET_SYSLOG_PACKET_LEN  512  \r
+#define NET_SYSLOG_TX_TIMEOUT  500 *1000 *10  // 500ms\r
+#define NET_DEBUG_MSG_LEN      470            // 512 - (ether+ip4+udp4 head length)\r
+\r
+//\r
+// The debug output expects the ASCII format string, Use %a to print ASCII \r
+// string, and %s to print UNICODE string. PrintArg must be enclosed in (). \r
+// For example: NET_DEBUG_TRACE ("Tcp", ("State transit to %a\n", Name));\r
+//\r
+#define NET_DEBUG_TRACE(Module, PrintArg) \\r
+  NetDebugOutput ( \\r
+    NETDEBUG_LEVEL_TRACE, \\r
+    Module, \\r
+    __FILE__, \\r
+    __LINE__, \\r
+    NetDebugASPrint PrintArg \\r
+    )\r
+\r
+#define NET_DEBUG_WARNING(Module, PrintArg) \\r
+  NetDebugOutput ( \\r
+    NETDEBUG_LEVEL_WARNING, \\r
+    Module, \\r
+    __FILE__, \\r
+    __LINE__, \\r
+    NetDebugASPrint PrintArg \\r
+    )\r
+\r
+#define NET_DEBUG_ERROR(Module, PrintArg) \\r
+  NetDebugOutput ( \\r
+    NETDEBUG_LEVEL_ERROR, \\r
+    Module, \\r
+    __FILE__, \\r
+    __LINE__, \\r
+    NetDebugASPrint PrintArg \\r
+    )\r
+\r
+/**\r
+  Allocate a buffer, then format the message to it. This is a \r
+  help function for the NET_DEBUG_XXX macros. The PrintArg of \r
+  these macros treats the variable length print parameters as a \r
+  single parameter, and pass it to the NetDebugASPrint. For\r
+  example, NET_DEBUG_TRACE ("Tcp", ("State transit to %a\n", Name))\r
+  if extracted to:   \r
+  \r
+         NetDebugOutput (\r
+           NETDEBUG_LEVEL_TRACE, \r
+           "Tcp", \r
+           __FILE__,\r
+           __LINE__,\r
+           NetDebugASPrint ("State transit to %a\n", Name) \r
+         )  \r
\r
+  @param Format  The ASCII format string.\r
+  @param ...     The variable length parameter whose format is determined \r
+                 by the Format string.\r
+\r
+  @return        The buffer containing the formatted message,\r
+                 or NULL if failed to allocate memory.\r
+\r
+**/\r
+CHAR8 *\r
+NetDebugASPrint (\r
+  IN CHAR8                  *Format,\r
+  ...\r
+  );\r
+\r
+/**\r
+  Builds an UDP4 syslog packet and send it using SNP.\r
+\r
+  This function will locate a instance of SNP then send the message through it.\r
+  Because it isn't open the SNP BY_DRIVER, apply caution when using it.\r
+\r
+  @param Level    The servity level of the message.\r
+  @param Module   The Moudle that generates the log.\r
+  @param File     The file that contains the log.\r
+  @param Line     The exact line that contains the log.\r
+  @param Message  The user message to log.\r
+\r
+  @retval EFI_INVALID_PARAMETER Any input parameter is invalid.\r
+  @retval EFI_OUT_OF_RESOURCES  Failed to allocate memory for the packet\r
+  @retval EFI_SUCCESS           The log is discard because that it is more verbose \r
+                                than the mNetDebugLevelMax. Or, it has been sent out.\r
+**/  \r
+EFI_STATUS\r
+NetDebugOutput (\r
+  IN UINT32                    Level, \r
+  IN UINT8                     *Module,\r
+  IN UINT8                     *File,\r
+  IN UINT32                    Line,\r
+  IN UINT8                     *Message\r
+  );\r
+\r
 \r
 /**\r
   Return the length of the mask. \r
@@ -250,7 +363,7 @@ NetGetIpClass (
 **/\r
 BOOLEAN\r
 EFIAPI\r
-Ip4IsUnicast (\r
+NetIp4IsUnicast (\r
   IN IP4_ADDR               Ip,\r
   IN IP4_ADDR               NetMask\r
   );\r
@@ -270,11 +383,58 @@ Ip4IsUnicast (
 \r
 **/ \r
 BOOLEAN\r
-Ip6IsValidUnicast (\r
+NetIp6IsValidUnicast (\r
+  IN EFI_IPv6_ADDRESS       *Ip6\r
+  );\r
+\r
+\r
+/**\r
+  Check whether the incoming Ipv6 address is the unspecified address or not.\r
+\r
+  @param[in] Ip6   - Ip6 address, in network order.\r
+\r
+  @retval TRUE     - Yes, unspecified\r
+  @retval FALSE    - No\r
+  \r
+**/\r
+BOOLEAN\r
+NetIp6IsUnspecifiedAddr (\r
   IN EFI_IPv6_ADDRESS       *Ip6\r
   );\r
 \r
 /**\r
+  Check whether the incoming Ipv6 address is a link-local address.\r
+\r
+  @param[in] Ip6   - Ip6 address, in network order.\r
+\r
+  @retval TRUE  - Yes, link-local address\r
+  @retval FALSE - No\r
+  \r
+**/\r
+BOOLEAN\r
+NetIp6IsLinkLocalAddr (\r
+  IN EFI_IPv6_ADDRESS *Ip6\r
+  );\r
+\r
+/**\r
+  Check whether the Ipv6 address1 and address2 are on the connected network.\r
+\r
+  @param[in] Ip1          - Ip6 address1, in network order.\r
+  @param[in] Ip2          - Ip6 address2, in network order.\r
+  @param[in] PrefixLength - The prefix length of the checking net.\r
+\r
+  @retval TRUE            - Yes, connected.\r
+  @retval FALSE           - No.\r
+  \r
+**/\r
+BOOLEAN\r
+NetIp6IsNetEqual (\r
+  EFI_IPv6_ADDRESS *Ip1,\r
+  EFI_IPv6_ADDRESS *Ip2,\r
+  UINT8            PrefixLength\r
+  );\r
+\r
+/**\r
   Switches the endianess of an IPv6 address\r
 \r
   This function swaps the bytes in a 128-bit IPv6 address to switch the value\r
@@ -741,7 +901,7 @@ EFIAPI
 NetMapIterate (\r
   IN NET_MAP                *Map,\r
   IN NET_MAP_CALLBACK       CallBack,\r
-  IN VOID                   *Arg\r
+  IN VOID                   *Arg      OPTIONAL\r
   );\r
 \r
 \r
@@ -838,7 +998,7 @@ NetLibGetMacString (
   Get other info from parameters to make up the whole IPv4 device path node.\r
 \r
   @param[in, out]  Node                  Pointer to the IPv4 device path node.\r
-  @param[in]       Controller            The handle where the NIC IP4 config protocol resides.\r
+  @param[in]       Controller            The controller handle.\r
   @param[in]       LocalIp               The local IPv4 address.\r
   @param[in]       LocalPort             The local port.\r
   @param[in]       RemoteIp              The remote IPv4 address.\r
@@ -861,6 +1021,36 @@ NetLibCreateIPv4DPathNode (
   );\r
 \r
 /**\r
+  Create an IPv6 device path node.\r
+  \r
+  The header type of IPv6 device path node is MESSAGING_DEVICE_PATH.\r
+  The header subtype of IPv6 device path node is MSG_IPv6_DP.\r
+  The length of the IPv6 device path node in bytes is 43.\r
+  Get other info from parameters to make up the whole IPv6 device path node.\r
+\r
+  @param[in, out]  Node                  Pointer to the IPv6 device path node.\r
+  @param[in]       Controller            The controller handle.\r
+  @param[in]       LocalIp               The local IPv6 address.\r
+  @param[in]       LocalPort             The local port.\r
+  @param[in]       RemoteIp              The remote IPv6 address.\r
+  @param[in]       RemotePort            The remote port.\r
+  @param[in]       Protocol              The protocol type in the IP header.\r
+\r
+**/\r
+VOID\r
+EFIAPI\r
+NetLibCreateIPv6DPathNode (\r
+  IN OUT IPv6_DEVICE_PATH  *Node,\r
+  IN EFI_HANDLE            Controller,\r
+  IN EFI_IPv6_ADDRESS      *LocalIp,\r
+  IN UINT16                LocalPort,\r
+  IN EFI_IPv6_ADDRESS      *RemoteIp,\r
+  IN UINT16                RemotePort,\r
+  IN UINT16                Protocol\r
+  );\r
+\r
+\r
+/**\r
   Find the UNDI/SNP handle from controller and protocol GUID.\r
   \r
   For example, IP will open an MNP child to transmit/receive\r
@@ -961,6 +1151,10 @@ typedef struct {
   UINT32              Size;         // The size of the data\r
 } NET_BLOCK_OP;\r
 \r
+typedef union {\r
+  IP4_HEAD          *Ip4;\r
+  EFI_IP6_HEADER    *Ip6;\r
+} NET_IP_HEAD;\r
 \r
 //\r
 //NET_BUF is the buffer manage structure used by the\r
@@ -973,22 +1167,22 @@ typedef struct {
 //to overwrite the members after that.\r
 //\r
 typedef struct {\r
-  UINT32              Signature;\r
-  INTN                RefCnt;\r
-  LIST_ENTRY          List;       // The List this NET_BUF is on\r
+  UINT32         Signature;\r
+  INTN           RefCnt;\r
+  LIST_ENTRY     List;                       // The List this NET_BUF is on\r
 \r
-  IP4_HEAD            *Ip;        // Network layer header, for fast access\r
-  TCP_HEAD            *Tcp;       // Transport layer header, for fast access\r
-  UINT8               ProtoData [NET_PROTO_DATA]; //Protocol specific data\r
+  NET_IP_HEAD    Ip;                         // Network layer header, for fast access\r
+  TCP_HEAD       *Tcp;                       // Transport layer header, for fast access\r
+  EFI_UDP_HEADER *Udp;                       // User Datagram Protocol header\r
+  UINT8          ProtoData [NET_PROTO_DATA]; //Protocol specific data\r
 \r
-  NET_VECTOR          *Vector;    // The vector containing the packet\r
+  NET_VECTOR     *Vector;                    // The vector containing the packet\r
 \r
-  UINT32              BlockOpNum; // Total number of BlockOp in the buffer\r
-  UINT32              TotalSize;  // Total size of the actual packet\r
-  NET_BLOCK_OP        BlockOp[1]; // Specify the position of actual packet\r
+  UINT32         BlockOpNum;                 // Total number of BlockOp in the buffer\r
+  UINT32         TotalSize;                  // Total size of the actual packet\r
+  NET_BLOCK_OP   BlockOp[1];                 // Specify the position of actual packet\r
 } NET_BUF;\r
 \r
-\r
 //\r
 //A queue of NET_BUFs. It is a thin extension of\r
 //NET_BUF functions.\r
@@ -1014,6 +1208,14 @@ typedef struct {
   UINT8               Protocol;\r
   UINT16              Len;\r
 } NET_PSEUDO_HDR;\r
+\r
+typedef struct {\r
+  EFI_IPv6_ADDRESS    SrcIp;\r
+  EFI_IPv6_ADDRESS    DstIp;\r
+  UINT32              Len;\r
+  UINT32              Reserved:24;\r
+  UINT32              NextHeader:8;\r
+} NET_IP6_PSEUDO_HDR;\r
 #pragma pack()\r
 \r
 //\r
@@ -1544,4 +1746,24 @@ NetPseudoHeadChecksum (
   IN UINT16                 Len\r
   );\r
 \r
+/**\r
+  Compute the checksum for TCP6/UDP6 pseudo header. \r
+   \r
+  Src and Dst are in network byte order, and Len is in host byte order.\r
+\r
+  @param[in]   Src                   The source address of the packet.\r
+  @param[in]   Dst                   The destination address of the packet.\r
+  @param[in]   NextHeader            The protocol type of the packet.\r
+  @param[in]   Len                   The length of the packet.\r
+\r
+  @return   The computed checksum.\r
+\r
+**/\r
+UINT16\r
+NetIp6PseudoHeadChecksum (\r
+  IN EFI_IPv6_ADDRESS       *Src,\r
+  IN EFI_IPv6_ADDRESS       *Dst,\r
+  IN UINT8                  NextHeader,\r
+  IN UINT32                 Len\r
+  );\r
 #endif\r
index 032545b..c94a79c 100644 (file)
@@ -1029,7 +1029,7 @@ IpIoListenHandlerDpc (
 \r
   if (IpIo->IpVersion == IP_VERSION_4) {\r
     if ((EFI_IP4 (RxData->Ip4RxData.Header->SourceAddress) != 0) &&\r
-      !Ip4IsUnicast (EFI_NTOHL (((EFI_IP4_RECEIVE_DATA *) RxData)->Header->SourceAddress), 0)) {\r
+      !NetIp4IsUnicast (EFI_NTOHL (((EFI_IP4_RECEIVE_DATA *) RxData)->Header->SourceAddress), 0)) {\r
     //\r
     // The source address is not zero and it's not a unicast IP address, discard it.\r
     //\r
@@ -1060,7 +1060,7 @@ IpIoListenHandlerDpc (
   Session.IpVersion      = IP_VERSION_4;\r
   } else {\r
 \r
-    if (!Ip6IsValidUnicast(&RxData->Ip6RxData.Header->SourceAddress)) {\r
+    if (!NetIp6IsValidUnicast(&RxData->Ip6RxData.Header->SourceAddress)) {\r
       goto CleanUp;\r
     }\r
     \r
index fb296e5..b42054f 100644 (file)
@@ -81,6 +81,452 @@ IP4_ADDR  gIp4AllMasks[IP4_MASK_NUM] = {
 \r
 EFI_IPv4_ADDRESS  mZeroIp4Addr = {{0, 0, 0, 0}};\r
 \r
+//\r
+// Any error level digitally larger than mNetDebugLevelMax \r
+// will be silently discarded.\r
+//\r
+UINTN  mNetDebugLevelMax = NETDEBUG_LEVEL_ERROR;\r
+UINT32 mSyslogPacketSeq  = 0xDEADBEEF;\r
+\r
+// \r
+// You can change mSyslogDstMac mSyslogDstIp and mSyslogSrcIp \r
+// here to direct the syslog packets to the syslog deamon. The \r
+// default is broadcast to both the ethernet and IP. \r
+//\r
+UINT8  mSyslogDstMac[NET_ETHER_ADDR_LEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};\r
+UINT32 mSyslogDstIp                      = 0xffffffff;\r
+UINT32 mSyslogSrcIp                      = 0;\r
+\r
+CHAR8 *\r
+mMonthName[] = {\r
+  "Jan",\r
+  "Feb",\r
+  "Mar",\r
+  "Apr",\r
+  "May",\r
+  "Jun",\r
+  "Jul",\r
+  "Aug",\r
+  "Sep",\r
+  "Oct",\r
+  "Nov",\r
+  "Dec"\r
+};\r
+\r
+/**\r
+  Locate the handles that support SNP, then open one of them \r
+  to send the syslog packets. The caller isn't required to close\r
+  the SNP after use because the SNP is opened by HandleProtocol.\r
+\r
+  @return The point to SNP if one is properly openned. Otherwise NULL\r
+\r
+**/\r
+EFI_SIMPLE_NETWORK_PROTOCOL *\r
+SyslogLocateSnp (\r
+  VOID\r
+  )\r
+{\r
+  EFI_SIMPLE_NETWORK_PROTOCOL *Snp;\r
+  EFI_STATUS                  Status;\r
+  EFI_HANDLE                  *Handles;\r
+  UINTN                       HandleCount;\r
+  UINTN                       Index;\r
+\r
+  //\r
+  // Locate the handles which has SNP installed.\r
+  //\r
+  Handles = NULL;\r
+  Status  = gBS->LocateHandleBuffer (\r
+                   ByProtocol,\r
+                   &gEfiSimpleNetworkProtocolGuid,\r
+                   NULL,\r
+                   &HandleCount,\r
+                   &Handles\r
+                   );\r
+\r
+  if (EFI_ERROR (Status) || (HandleCount == 0)) {\r
+    return NULL;\r
+  }\r
+  \r
+  //\r
+  // Try to open one of the ethernet SNP protocol to send packet\r
+  //\r
+  Snp = NULL;\r
+  \r
+  for (Index = 0; Index < HandleCount; Index++) {\r
+    Status = gBS->HandleProtocol (\r
+                    Handles[Index],\r
+                    &gEfiSimpleNetworkProtocolGuid,\r
+                    (VOID **) &Snp\r
+                    );\r
+\r
+    if ((Status == EFI_SUCCESS) && (Snp != NULL) && \r
+        (Snp->Mode->IfType == NET_IFTYPE_ETHERNET) &&\r
+        (Snp->Mode->MaxPacketSize >= NET_SYSLOG_PACKET_LEN)) {\r
+        \r
+      break;\r
+    }\r
+\r
+    Snp = NULL;\r
+  }\r
+\r
+  FreePool (Handles);\r
+  return Snp;\r
+}\r
+\r
+/**\r
+  Transmit a syslog packet synchronously through SNP. The Packet\r
+  already has the ethernet header prepended. This function should \r
+  fill in the source MAC because it will try to locate a SNP each\r
+  time it is called to avoid the problem if SNP is unloaded.\r
+  This code snip is copied from MNP. \r
+\r
+  @param[in] Packet  - The Syslog packet \r
+  @param[in] Length  - The length of the packet\r
+\r
+  @retval EFI_DEVICE_ERROR - Failed to locate a usable SNP protocol\r
+  @retval EFI_TIMEOUT      - Timeout happened to send the packet.\r
+  @retval EFI_SUCCESS      - Packet is sent.\r
+  \r
+**/\r
+EFI_STATUS\r
+SyslogSendPacket (\r
+  IN CHAR8                    *Packet,\r
+  IN UINT32                   Length\r
+  )\r
+{\r
+  EFI_SIMPLE_NETWORK_PROTOCOL *Snp;\r
+  ETHER_HEAD                  *Ether;\r
+  EFI_STATUS                  Status;\r
+  EFI_EVENT                   TimeoutEvent;\r
+  UINT8                       *TxBuf;\r
+\r
+  Snp = SyslogLocateSnp ();\r
+\r
+  if (Snp == NULL) {\r
+    return EFI_DEVICE_ERROR;\r
+  }\r
+\r
+  Ether = (ETHER_HEAD *) Packet;\r
+  CopyMem (Ether->SrcMac, Snp->Mode->CurrentAddress.Addr, NET_ETHER_ADDR_LEN);\r
+\r
+  //\r
+  // Start the timeout event.\r
+  //\r
+  Status = gBS->CreateEvent (\r
+                  EVT_TIMER,\r
+                  TPL_NOTIFY,\r
+                  NULL,\r
+                  NULL,\r
+                  &TimeoutEvent\r
+                  );\r
+\r
+  if (EFI_ERROR (Status)) {\r
+    return Status;\r
+  }\r
+\r
+  Status = gBS->SetTimer (TimeoutEvent, TimerRelative, NET_SYSLOG_TX_TIMEOUT);\r
+\r
+  if (EFI_ERROR (Status)) {\r
+    goto ON_EXIT;\r
+  }\r
+\r
+  for (;;) {\r
+    //\r
+    // Transmit the packet through SNP.\r
+    //\r
+    Status = Snp->Transmit (Snp, 0, Length, Packet, NULL, NULL, NULL);\r
+\r
+    if ((Status != EFI_SUCCESS) && (Status != EFI_NOT_READY)) {\r
+      Status = EFI_DEVICE_ERROR;\r
+      break;\r
+    }\r
+    \r
+    //\r
+    // If Status is EFI_SUCCESS, the packet is put in the transmit queue.\r
+    // if Status is EFI_NOT_READY, the transmit engine of the network\r
+    // interface is busy. Both need to sync SNP.\r
+    //\r
+    TxBuf = NULL;\r
+\r
+    do {\r
+      //\r
+      // Get the recycled transmit buffer status.\r
+      //\r
+      Snp->GetStatus (Snp, NULL, (VOID **) &TxBuf);\r
+\r
+      if (!EFI_ERROR (gBS->CheckEvent (TimeoutEvent))) {\r
+        Status = EFI_TIMEOUT;\r
+        break;\r
+      }\r
+\r
+    } while (TxBuf == NULL);\r
+\r
+    if ((Status == EFI_SUCCESS) || (Status == EFI_TIMEOUT)) {\r
+      break;\r
+    }\r
+    \r
+    //\r
+    // Status is EFI_NOT_READY. Restart the timer event and\r
+    // call Snp->Transmit again.\r
+    //\r
+    gBS->SetTimer (TimeoutEvent, TimerRelative, NET_SYSLOG_TX_TIMEOUT);\r
+  }\r
+\r
+  gBS->SetTimer (TimeoutEvent, TimerCancel, 0);\r
+\r
+ON_EXIT:\r
+  gBS->CloseEvent (TimeoutEvent);\r
+  return Status;\r
+}\r
+\r
+/**\r
+  Build a syslog packet, including the Ethernet/Ip/Udp headers \r
+  and user's message. \r
+  \r
+  @param[in]  Level   - Syslog servity level\r
+  @param[in]  Module  - The module that generates the log\r
+  @param[in]  File    - The file that contains the current log\r
+  @param[in]  Line    - The line of code in the File that contains the current log\r
+  @param[in]  Message - The log message\r
+  @param[in]  BufLen  - The lenght of the Buf\r
+  @param[out] Buf     - The buffer to put the packet data\r
+\r
+Returns:\r
+\r
+  The length of the syslog packet built.\r
+\r
+**/\r
+UINT32\r
+SyslogBuildPacket (\r
+  IN  UINT32                Level,\r
+  IN  UINT8                 *Module,\r
+  IN  UINT8                 *File,\r
+  IN  UINT32                Line,\r
+  IN  UINT8                 *Message,\r
+  IN  UINT32                BufLen,\r
+  OUT CHAR8                 *Buf  \r
+  )\r
+{\r
+  ETHER_HEAD                *Ether;\r
+  IP4_HEAD                  *Ip4;\r
+  EFI_UDP_HEADER            *Udp4;\r
+  EFI_TIME                  Time;\r
+  UINT32                    Pri;\r
+  UINT32                    Len;\r
+\r
+  //\r
+  // Fill in the Ethernet header. Leave alone the source MAC. \r
+  // SyslogSendPacket will fill in the address for us.\r
+  //\r
+  Ether = (ETHER_HEAD *) Buf;\r
+  CopyMem (Ether->DstMac, mSyslogDstMac, NET_ETHER_ADDR_LEN);\r
+  ZeroMem (Ether->SrcMac, NET_ETHER_ADDR_LEN);\r
+\r
+  Ether->EtherType = HTONS (0x0800);    // IPv4 protocol\r
+\r
+  Buf             += sizeof (ETHER_HEAD);\r
+  BufLen          -= sizeof (ETHER_HEAD);\r
+\r
+  //\r
+  // Fill in the IP header\r
+  //\r
+  Ip4              = (IP4_HEAD *) Buf;\r
+  Ip4->HeadLen     = 5;\r
+  Ip4->Ver         = 4;\r
+  Ip4->Tos         = 0;\r
+  Ip4->TotalLen    = 0;\r
+  Ip4->Id          = (UINT16) mSyslogPacketSeq;\r
+  Ip4->Fragment    = 0;\r
+  Ip4->Ttl         = 16;\r
+  Ip4->Protocol    = 0x11;\r
+  Ip4->Checksum    = 0;\r
+  Ip4->Src         = mSyslogSrcIp;\r
+  Ip4->Dst         = mSyslogDstIp;\r
+\r
+  Buf             += sizeof (IP4_HEAD);\r
+  BufLen          -= sizeof (IP4_HEAD);\r
+\r
+  //\r
+  // Fill in the UDP header, Udp checksum is optional. Leave it zero.\r
+  //\r
+  Udp4             = (EFI_UDP_HEADER *) Buf;\r
+  Udp4->SrcPort    = HTONS (514);\r
+  Udp4->DstPort    = HTONS (514);\r
+  Udp4->Length     = 0;\r
+  Udp4->Checksum   = 0;\r
+\r
+  Buf             += sizeof (EFI_UDP_HEADER);\r
+  BufLen          -= sizeof (EFI_UDP_HEADER);\r
+\r
+  //\r
+  // Build the syslog message body with <PRI> Timestamp  machine module Message\r
+  //\r
+  Pri = ((NET_SYSLOG_FACILITY & 31) << 3) | (Level & 7);\r
+  gRT->GetTime (&Time, NULL);\r
+\r
+  //\r
+  // Use %a to format the ASCII strings, %s to format UNICODE strings\r
+  //\r
+  Len  = 0;\r
+  Len += (UINT32) AsciiSPrint (\r
+                    Buf,\r
+                    BufLen,\r
+                    "<%d> %a %d %d:%d:%d ",\r
+                    Pri,\r
+                    mMonthName [Time.Month-1], \r
+                    Time.Day,\r
+                    Time.Hour,\r
+                    Time.Minute,\r
+                    Time.Second\r
+                    );\r
+  Len--;\r
+\r
+  Len += (UINT32) AsciiSPrint (\r
+                    Buf + Len, \r
+                    BufLen - Len, \r
+                    "Tiano %a: %a (Line: %d File: %a)", \r
+                    Module,\r
+                    Message,\r
+                    Line,\r
+                    File\r
+                    );\r
+  Len--;\r
+\r
+  //\r
+  // OK, patch the IP length/checksum and UDP length fields.\r
+  //\r
+  Len           += sizeof (EFI_UDP_HEADER);\r
+  Udp4->Length   = HTONS ((UINT16) Len);\r
+\r
+  Len           += sizeof (IP4_HEAD);\r
+  Ip4->TotalLen  = HTONS ((UINT16) Len);\r
+  Ip4->Checksum  = (UINT16) (~NetblockChecksum ((UINT8 *) Ip4, sizeof (IP4_HEAD)));\r
+\r
+  return Len + sizeof (ETHER_HEAD);\r
+}\r
+\r
+/**\r
+  Allocate a buffer, then format the message to it. This is a \r
+  help function for the NET_DEBUG_XXX macros. The PrintArg of \r
+  these macros treats the variable length print parameters as a \r
+  single parameter, and pass it to the NetDebugASPrint. For\r
+  example, NET_DEBUG_TRACE ("Tcp", ("State transit to %a\n", Name))\r
+  if extracted to:   \r
+  \r
+         NetDebugOutput (\r
+           NETDEBUG_LEVEL_TRACE, \r
+           "Tcp", \r
+           __FILE__,\r
+           __LINE__,\r
+           NetDebugASPrint ("State transit to %a\n", Name) \r
+         )  \r
\r
+  @param Format  The ASCII format string.\r
+  @param ...     The variable length parameter whose format is determined \r
+                 by the Format string.\r
+\r
+  @return        The buffer containing the formatted message,\r
+                 or NULL if failed to allocate memory.\r
+\r
+**/\r
+CHAR8 *\r
+NetDebugASPrint (\r
+  IN CHAR8                  *Format,\r
+  ...\r
+  )\r
+{\r
+  VA_LIST                   Marker;\r
+  CHAR8                     *Buf;\r
+\r
+  Buf = (CHAR8 *) AllocatePool (NET_DEBUG_MSG_LEN);\r
+\r
+  if (Buf == NULL) {\r
+    return NULL;\r
+  }\r
+\r
+  VA_START (Marker, Format);\r
+  AsciiVSPrint (Buf, NET_DEBUG_MSG_LEN, Format, Marker);\r
+  VA_END (Marker);\r
+\r
+  return Buf;\r
+}\r
+\r
+/**\r
+  Builds an UDP4 syslog packet and send it using SNP.\r
+\r
+  This function will locate a instance of SNP then send the message through it.\r
+  Because it isn't open the SNP BY_DRIVER, apply caution when using it.\r
+\r
+  @param Level    The servity level of the message.\r
+  @param Module   The Moudle that generates the log.\r
+  @param File     The file that contains the log.\r
+  @param Line     The exact line that contains the log.\r
+  @param Message  The user message to log.\r
+\r
+  @retval EFI_INVALID_PARAMETER Any input parameter is invalid.\r
+  @retval EFI_OUT_OF_RESOURCES  Failed to allocate memory for the packet\r
+  @retval EFI_SUCCESS           The log is discard because that it is more verbose \r
+                                than the mNetDebugLevelMax. Or, it has been sent out.\r
+**/  \r
+EFI_STATUS\r
+NetDebugOutput (\r
+  IN UINT32                    Level, \r
+  IN UINT8                     *Module,\r
+  IN UINT8                     *File,\r
+  IN UINT32                    Line,\r
+  IN UINT8                     *Message\r
+  )\r
+{\r
+  CHAR8                        *Packet;\r
+  UINT32                       Len;\r
+  EFI_STATUS                   Status;\r
+\r
+  //\r
+  // Check whether the message should be sent out\r
+  //\r
+  if (Message == NULL) {\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
+\r
+  if (Level > mNetDebugLevelMax) {\r
+    Status = EFI_SUCCESS;\r
+    goto ON_EXIT;\r
+  }\r
+  \r
+  //\r
+  // Allocate a maxium of 1024 bytes, the caller should ensure\r
+  // that the message plus the ethernet/ip/udp header is shorter\r
+  // than this\r
+  //\r
+  Packet = (CHAR8 *) AllocatePool (NET_SYSLOG_PACKET_LEN);\r
+\r
+  if (Packet == NULL) {\r
+    Status = EFI_OUT_OF_RESOURCES;\r
+    goto ON_EXIT;\r
+  }\r
+  \r
+  //\r
+  // Build the message: Ethernet header + IP header + Udp Header + user data\r
+  //\r
+  Len = SyslogBuildPacket (\r
+          Level,\r
+          Module,\r
+          File,\r
+          Line,\r
+          Message,\r
+          NET_SYSLOG_PACKET_LEN,\r
+          Packet\r
+          );\r
+\r
+  mSyslogPacketSeq++;\r
+  Status = SyslogSendPacket (Packet, Len);\r
+  FreePool (Packet);\r
+\r
+ON_EXIT:\r
+  FreePool (Message);\r
+  return Status;\r
+}\r
 /**\r
   Return the length of the mask. \r
   \r
@@ -179,7 +625,7 @@ NetGetIpClass (
 **/\r
 BOOLEAN\r
 EFIAPI\r
-Ip4IsUnicast (\r
+NetIp4IsUnicast (\r
   IN IP4_ADDR               Ip,\r
   IN IP4_ADDR               NetMask\r
   )\r
@@ -218,7 +664,7 @@ Ip4IsUnicast (
 \r
 **/ \r
 BOOLEAN\r
-Ip6IsValidUnicast (\r
+NetIp6IsValidUnicast (\r
   IN EFI_IPv6_ADDRESS       *Ip6\r
   ) \r
 {\r
@@ -245,6 +691,113 @@ Ip6IsValidUnicast (
 }\r
 \r
 /**\r
+  Check whether the incoming Ipv6 address is the unspecified address or not.\r
+\r
+  @param[in] Ip6   - Ip6 address, in network order.\r
+\r
+  @retval TRUE     - Yes, unspecified\r
+  @retval FALSE    - No\r
+  \r
+**/\r
+BOOLEAN\r
+NetIp6IsUnspecifiedAddr (\r
+  IN EFI_IPv6_ADDRESS       *Ip6\r
+  )\r
+{\r
+  UINT8 Index;\r
+\r
+  for (Index = 0; Index < 16; Index++) {\r
+    if (Ip6->Addr[Index] != 0) {\r
+      return FALSE;\r
+    }\r
+  }\r
+\r
+  return TRUE;\r
+}\r
+\r
+/**\r
+  Check whether the incoming Ipv6 address is a link-local address.\r
+\r
+  @param[in] Ip6   - Ip6 address, in network order.\r
+\r
+  @retval TRUE  - Yes, link-local address\r
+  @retval FALSE - No\r
+  \r
+**/\r
+BOOLEAN\r
+NetIp6IsLinkLocalAddr (\r
+  IN EFI_IPv6_ADDRESS *Ip6\r
+  )\r
+{\r
+  UINT8 Index;\r
+  \r
+  ASSERT (Ip6 != NULL);\r
+\r
+  if (Ip6->Addr[0] != 0xFE) {\r
+    return FALSE;\r
+  }\r
+  \r
+  if (Ip6->Addr[1] != 0x80) {\r
+    return FALSE;\r
+  }\r
+\r
+  for (Index = 2; Index < 8; Index++) {\r
+    if (Ip6->Addr[Index] != 0) {\r
+      return FALSE;\r
+    }\r
+  }\r
+\r
+  return TRUE;\r
+}\r
+\r
+/**\r
+  Check whether the Ipv6 address1 and address2 are on the connected network.\r
+\r
+  @param[in] Ip1          - Ip6 address1, in network order.\r
+  @param[in] Ip2          - Ip6 address2, in network order.\r
+  @param[in] PrefixLength - The prefix length of the checking net.\r
+\r
+  @retval TRUE            - Yes, connected.\r
+  @retval FALSE           - No.\r
+  \r
+**/\r
+BOOLEAN\r
+NetIp6IsNetEqual (\r
+  EFI_IPv6_ADDRESS *Ip1,\r
+  EFI_IPv6_ADDRESS *Ip2,\r
+  UINT8            PrefixLength\r
+  )\r
+{\r
+  UINT8 Byte;\r
+  UINT8 Bit;\r
+  UINT8 Mask;\r
+\r
+  ASSERT (Ip1 != NULL && Ip2 != NULL);\r
+  \r
+  if (PrefixLength == 0) {\r
+    return TRUE;\r
+  }\r
+\r
+  Byte = (UINT8) (PrefixLength / 8);\r
+  Bit  = (UINT8) (PrefixLength % 8);\r
+  \r
+  if (CompareMem (Ip1, Ip2, Byte) != 0) {\r
+    return FALSE;\r
+  }\r
+\r
+  if (Bit > 0) {\r
+    Mask = (UINT8) (0xFF << (8 - Bit));\r
+\r
+    if ((Ip1->Addr[Byte] & Mask) != (Ip2->Addr[Byte] & Mask)) {\r
+      return FALSE;\r
+    }    \r
+  }\r
+  \r
+  return TRUE;\r
+}\r
+\r
+\r
+/**\r
   Switches the endianess of an IPv6 address\r
 \r
   This function swaps the bytes in a 128-bit IPv6 address to switch the value\r
@@ -1432,7 +1985,7 @@ ON_EXIT:
   Get other info from parameters to make up the whole IPv4 device path node.\r
 \r
   @param[in, out]  Node                  Pointer to the IPv4 device path node.\r
-  @param[in]       Controller            The handle where the NIC IP4 config protocol resides.\r
+  @param[in]       Controller            The controller handle.\r
   @param[in]       LocalIp               The local IPv4 address.\r
   @param[in]       LocalPort             The local port.\r
   @param[in]       RemoteIp              The remote IPv4 address.\r
@@ -1473,6 +2026,47 @@ NetLibCreateIPv4DPathNode (
   }\r
 }\r
 \r
+/**\r
+  Create an IPv6 device path node.\r
+  \r
+  The header type of IPv6 device path node is MESSAGING_DEVICE_PATH.\r
+  The header subtype of IPv6 device path node is MSG_IPv6_DP.\r
+  Get other info from parameters to make up the whole IPv6 device path node.\r
+\r
+  @param[in, out]  Node                  Pointer to the IPv6 device path node.\r
+  @param[in]       Controller            The controller handle.\r
+  @param[in]       LocalIp               The local IPv6 address.\r
+  @param[in]       LocalPort             The local port.\r
+  @param[in]       RemoteIp              The remote IPv6 address.\r
+  @param[in]       RemotePort            The remote port.\r
+  @param[in]       Protocol              The protocol type in the IP header.\r
+\r
+**/\r
+VOID\r
+EFIAPI\r
+NetLibCreateIPv6DPathNode (\r
+  IN OUT IPv6_DEVICE_PATH  *Node,\r
+  IN EFI_HANDLE            Controller,\r
+  IN EFI_IPv6_ADDRESS      *LocalIp,\r
+  IN UINT16                LocalPort,\r
+  IN EFI_IPv6_ADDRESS      *RemoteIp,\r
+  IN UINT16                RemotePort,\r
+  IN UINT16                Protocol\r
+  )\r
+{\r
+  Node->Header.Type    = MESSAGING_DEVICE_PATH;\r
+  Node->Header.SubType = MSG_IPv6_DP;\r
+  SetDevicePathNodeLength (&Node->Header, sizeof (IPv6_DEVICE_PATH));\r
+\r
+  CopyMem (&Node->LocalIpAddress, LocalIp, sizeof (EFI_IPv6_ADDRESS));\r
+  CopyMem (&Node->RemoteIpAddress, RemoteIp, sizeof (EFI_IPv6_ADDRESS));\r
+\r
+  Node->LocalPort  = LocalPort;\r
+  Node->RemotePort = RemotePort;\r
+\r
+  Node->Protocol        = Protocol;\r
+  Node->StaticIpAddress = FALSE;\r
+}\r
 \r
 /**\r
   Find the UNDI/SNP handle from controller and protocol GUID.\r
index 907bdfd..42e308a 100644 (file)
@@ -1803,3 +1803,41 @@ NetPseudoHeadChecksum (
 \r
   return NetblockChecksum ((UINT8 *) &Hdr, sizeof (Hdr));\r
 }\r
+\r
+/**\r
+  Compute the checksum for TCP6/UDP6 pseudo header. \r
+   \r
+  Src and Dst are in network byte order, and Len is in host byte order.\r
+\r
+  @param[in]   Src                   The source address of the packet.\r
+  @param[in]   Dst                   The destination address of the packet.\r
+  @param[in]   NextHeader            The protocol type of the packet.\r
+  @param[in]   Len                   The length of the packet.\r
+\r
+  @return   The computed checksum.\r
+\r
+**/\r
+UINT16\r
+NetIp6PseudoHeadChecksum (\r
+  IN EFI_IPv6_ADDRESS       *Src,\r
+  IN EFI_IPv6_ADDRESS       *Dst,\r
+  IN UINT8                  NextHeader,\r
+  IN UINT32                 Len\r
+  )\r
+{\r
+  NET_IP6_PSEUDO_HDR        Hdr;\r
+\r
+  //\r
+  // Zero the memory to relieve align problems\r
+  //\r
+  ZeroMem (&Hdr, sizeof (Hdr));\r
+\r
+  IP6_COPY_ADDRESS (&Hdr.SrcIp, Src);\r
+  IP6_COPY_ADDRESS (&Hdr.DstIp, Dst);\r
+\r
+  Hdr.NextHeader = NextHeader;\r
+  Hdr.Len        = HTONL (Len); \r
+\r
+  return NetblockChecksum ((UINT8 *) &Hdr, sizeof (Hdr));\r
+}\r
+\r
index 9704f21..05884ca 100644 (file)
@@ -928,7 +928,7 @@ ArpConfigureInstance (
       if (ConfigData->SwAddressType == IPV4_ETHER_PROTO_TYPE) {\r
         CopyMem (&Ip, ConfigData->StationAddress, sizeof (IP4_ADDR));\r
 \r
-        if (!Ip4IsUnicast (NTOHL (Ip), 0)) {\r
+        if (!NetIp4IsUnicast (NTOHL (Ip), 0)) {\r
           //\r
           // The station address is not a valid IPv4 unicast address.\r
           //\r
index bc9128d..6fc9507 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   EFI Address Resolution Protocol (ARP) Protocol interface header file.\r
 \r
-Copyright (c) 2006 - 2008, Intel Corporation.<BR>\r
+Copyright (c) 2006 - 2009, 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<BR>\r
@@ -186,17 +186,19 @@ typedef struct {
 #define ARP_MAX_PROTOCOL_ADDRESS_LEN  sizeof(EFI_IP_ADDRESS)\r
 #define ARP_MAX_HARDWARE_ADDRESS_LEN  sizeof(EFI_MAC_ADDRESS)\r
 \r
+typedef union {\r
+  UINT8  ProtoAddress[ARP_MAX_PROTOCOL_ADDRESS_LEN];\r
+  UINT8  HwAddress[ARP_MAX_HARDWARE_ADDRESS_LEN];\r
+} NET_ARP_ADDRESS_UNION;\r
+\r
 //\r
 // ARP address structure in an ARP packet.\r
 //\r
 typedef struct {\r
-  UINT16  Type;\r
-  UINT8   Length;\r
-  UINT8   *AddressPtr;\r
-  union {\r
-    UINT8  ProtoAddress[ARP_MAX_PROTOCOL_ADDRESS_LEN];\r
-    UINT8  HwAddress[ARP_MAX_HARDWARE_ADDRESS_LEN];\r
-  } Buffer;\r
+  UINT16                Type;\r
+  UINT8                 Length;\r
+  UINT8                 *AddressPtr;\r
+  NET_ARP_ADDRESS_UNION Buffer;\r
 } NET_ARP_ADDRESS;\r
 \r
 //\r
index acacec7..fb03327 100644 (file)
@@ -661,7 +661,7 @@ EfiDhcp4Configure (
 \r
     CopyMem (&Ip, &Dhcp4CfgData->ClientAddress, sizeof (IP4_ADDR));\r
 \r
-    if ((Ip != 0) && !Ip4IsUnicast (NTOHL (Ip), 0)) {\r
+    if ((Ip != 0) && !NetIp4IsUnicast (NTOHL (Ip), 0)) {\r
 \r
       return EFI_INVALID_PARAMETER;\r
     }\r
index 7d15b84..ed066ea 100644 (file)
@@ -43,18 +43,18 @@ typedef struct _DHCP_PROTOCOL DHCP_PROTOCOL;
 #define DHCP_SERVICE_SIGNATURE   SIGNATURE_32 ('D', 'H', 'C', 'P')\r
 #define DHCP_PROTOCOL_SIGNATURE  SIGNATURE_32 ('d', 'h', 'c', 'p')\r
 \r
-typedef enum {\r
-  //\r
-  // The state of the DHCP service. It starts as UNCONFIGED. If\r
-  // and active child configures the service successfully, it\r
-  // goes to CONFIGED. If the active child configures NULL, it\r
-  // goes back to UNCONFIGED. It becomes DESTORY if it is (partly)\r
-  // destoried.\r
-  //\r
-  DHCP_UNCONFIGED         = 0,\r
-  DHCP_CONFIGED,\r
-  DHCP_DESTORY\r
-} DHCP_STATE;\r
+\r
+//\r
+// The state of the DHCP service. It starts as UNCONFIGED. If\r
+// and active child configures the service successfully, it\r
+// goes to CONFIGED. If the active child configures NULL, it\r
+// goes back to UNCONFIGED. It becomes DESTORY if it is (partly)\r
+// destoried.\r
+//\r
+#define DHCP_UNCONFIGED          0\r
+#define DHCP_CONFIGED            1\r
+#define DHCP_DESTORY             2\r
+\r
 \r
 struct _DHCP_PROTOCOL {\r
   UINT32                            Signature;\r
index bc7ef68..ce1a80b 100644 (file)
@@ -31,36 +31,30 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 #define DHCP_SERVER_PORT                  67\r
 #define DHCP_CLIENT_PORT                  68\r
 \r
-typedef enum {\r
-  //\r
-  // BOOTP header "op" field\r
-  //\r
-  BOOTP_REQUEST           = 1,\r
-  BOOTP_REPLY             = 2\r
-} DHCP_OP_TYPE;\r
-\r
-typedef enum {\r
-  //\r
-  // DHCP message types\r
-  //\r
-  DHCP_MSG_DISCOVER       = 1,\r
-  DHCP_MSG_OFFER          = 2,\r
-  DHCP_MSG_REQUEST        = 3,\r
-  DHCP_MSG_DECLINE        = 4,\r
-  DHCP_MSG_ACK            = 5,\r
-  DHCP_MSG_NAK            = 6,\r
-  DHCP_MSG_RELEASE        = 7,\r
-  DHCP_MSG_INFORM         = 8\r
-} DHCP_MSG_TYPE;\r
-\r
-typedef enum {\r
-  //\r
-  // DHCP notify user type\r
-  //\r
-  DHCP_NOTIFY_COMPLETION  = 1,\r
-  DHCP_NOTIFY_RENEWREBIND,\r
-  DHCP_NOTIFY_ALL\r
-} DHCP_NOTIFY_TYPE;\r
+//\r
+// BOOTP header "op" field\r
+//\r
+#define BOOTP_REQUEST           1\r
+#define BOOTP_REPLY             2\r
+\r
+//\r
+// DHCP message types\r
+//\r
+#define DHCP_MSG_DISCOVER       1\r
+#define DHCP_MSG_OFFER          2\r
+#define DHCP_MSG_REQUEST        3\r
+#define DHCP_MSG_DECLINE        4\r
+#define DHCP_MSG_ACK            5\r
+#define DHCP_MSG_NAK            6\r
+#define DHCP_MSG_RELEASE        7\r
+#define DHCP_MSG_INFORM         8\r
+\r
+//\r
+// DHCP notify user type\r
+//\r
+#define DHCP_NOTIFY_COMPLETION  1\r
+#define DHCP_NOTIFY_RENEWREBIND 2\r
+#define DHCP_NOTIFY_ALL         3\r
 \r
 #define DHCP_IS_BOOTP(Parameter)  (((Parameter) == NULL) || ((Parameter)->DhcpType == 0))\r
 \r
index 3685b37..e01f53e 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   To validate, parse and process the DHCP options.\r
   \r
-Copyright (c) 2006, Intel Corporation.<BR>\r
+Copyright (c) 2006 - 2009, 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
@@ -18,136 +18,133 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 ///\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
 \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
-  //\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
+// RFC1497 vendor extensions\r
+//\r
+#define DHCP_TAG_PAD              0    // Pad Option\r
+#define DHCP_TAG_EOP              255  // End Option\r
+#define DHCP_TAG_NETMASK          1    // Subnet Mask\r
+#define DHCP_TAG_TIME_OFFSET      2    // Time Offset from UTC\r
+#define DHCP_TAG_ROUTER           3    // Router option,\r
+#define DHCP_TAG_TIME_SERVER      4    // Time Server\r
+#define DHCP_TAG_NAME_SERVER      5    // Name Server\r
+#define DHCP_TAG_DNS_SERVER       6    // Domain Name Server\r
+#define DHCP_TAG_LOG_SERVER       7    // Log Server\r
+#define DHCP_TAG_COOKIE_SERVER    8    // Cookie Server\r
+#define DHCP_TAG_LPR_SERVER       9    // LPR Print Server\r
+#define DHCP_TAG_IMPRESS_SERVER   10   // Impress Server\r
+#define DHCP_TAG_RL_SERVER        11   // Resource Location Server\r
+#define DHCP_TAG_HOSTNAME         12   // Host Name\r
+#define DHCP_TAG_BOOTFILE_LEN     13   // Boot File Size\r
+#define DHCP_TAG_DUMP             14   // Merit Dump File\r
+#define DHCP_TAG_DOMAINNAME       15   // Domain Name\r
+#define DHCP_TAG_SWAP_SERVER      16   // Swap Server\r
+#define DHCP_TAG_ROOTPATH         17   // Root path\r
+#define DHCP_TAG_EXTEND_PATH      18   // Extensions Path\r
+\r
+//\r
+// IP Layer Parameters per Host\r
+//\r
+#define DHCP_TAG_IPFORWARD        19 // IP Forwarding Enable/Disable\r
+#define DHCP_TAG_NONLOCAL_SRR     20 // on-Local Source Routing Enable/Disable\r
+#define DHCP_TAG_POLICY_SRR       21 // Policy Filter\r
+#define DHCP_TAG_EMTU             22 // Maximum Datagram Reassembly Size\r
+#define DHCP_TAG_TTL              23 // Default IP Time-to-live\r
+#define DHCP_TAG_PATHMTU_AGE      24 // Path MTU Aging Timeout\r
+#define DHCP_TAG_PATHMTU_PLATEAU  25 // Path MTU Plateau Table\r
+\r
+//\r
+// IP Layer Parameters per Interface\r
+//\r
+#define DHCP_TAG_IFMTU            26 // Interface MTU\r
+#define DHCP_TAG_SUBNET_LOCAL     27 // All Subnets are Local\r
+#define DHCP_TAG_BROADCAST        28 // Broadcast Address\r
+#define DHCP_TAG_DISCOVER_MASK    29 // Perform Mask Discovery\r
+#define DHCP_TAG_SUPPLY_MASK      30 // Mask Supplier\r
+#define DHCP_TAG_DISCOVER_ROUTE   31 // Perform Router Discovery\r
+#define DHCP_TAG_ROUTER_SOLICIT   32 // Router Solicitation Address\r
+#define DHCP_TAG_STATIC_ROUTE     33 // Static Route\r
+\r
+//\r
+// Link Layer Parameters per Interface\r
+//\r
+#define DHCP_TAG_TRAILER          34 // Trailer Encapsulation\r
+#define DHCP_TAG_ARPAGE           35 // ARP Cache Timeout\r
+#define DHCP_TAG_ETHER_ENCAP      36 // Ethernet Encapsulation\r
+\r
+//\r
+// TCP Parameters\r
+//\r
+#define DHCP_TAG_TCP_TTL          37 // TCP Default TTL\r
+#define DHCP_TAG_KEEP_INTERVAL    38 // TCP Keepalive Interval\r
+#define DHCP_TAG_KEEP_GARBAGE     39 // TCP Keepalive Garbage\r
+\r
+//\r
+// Application and Service Parameters\r
+//\r
+#define DHCP_TAG_NIS_DOMAIN       40   // Network Information Service Domain\r
+#define DHCP_TAG_NIS_SERVER       41   // Network Information Servers\r
+#define DHCP_TAG_NTP_SERVER       42   // Network Time Protocol Servers\r
+#define DHCP_TAG_VENDOR           43   // Vendor Specific Information\r
+#define DHCP_TAG_NBNS             44   // NetBIOS over TCP/IP Name Server\r
+#define DHCP_TAG_NBDD             45   // NetBIOS Datagram Distribution Server\r
+#define DHCP_TAG_NBTYPE           46   // NetBIOS over TCP/IP Node Type\r
+#define DHCP_TAG_NBSCOPE          47   // NetBIOS over TCP/IP Scope\r
+#define DHCP_TAG_XFONT            48   // X Window System Font Server\r
+#define DHCP_TAG_XDM              49   // X Window System Display Manager\r
+#define DHCP_TAG_NISPLUS          64   // Network Information Service+ Domain\r
+#define DHCP_TAG_NISPLUS_SERVER   65   // Network Information Service+ Servers\r
+#define DHCP_TAG_MOBILEIP         68   // Mobile IP Home Agent\r
+#define DHCP_TAG_SMTP             69   // Simple Mail Transport Protocol Server\r
+#define DHCP_TAG_POP3             70   // Post Office Protocol (POP3) Server\r
+#define DHCP_TAG_NNTP             71   // Network News Transport Protocol Server\r
+#define DHCP_TAG_WWW              72   // Default World Wide Web (WWW) Server\r
+#define DHCP_TAG_FINGER           73   // Default Finger Server\r
+#define DHCP_TAG_IRC              74   // Default Internet Relay Chat (IRC) Server\r
+#define DHCP_TAG_STTALK           75   // StreetTalk Server\r
+#define DHCP_TAG_STDA             76   // StreetTalk Directory Assistance Server\r
+#define DHCP_TAG_CLASSLESS_ROUTE  121  // Classless Route\r
+\r
+//\r
+// DHCP Extensions\r
+//\r
+#define DHCP_TAG_REQUEST_IP       50         // Requested IP Address\r
+#define DHCP_TAG_LEASE            51         // IP Address Lease Time\r
+#define DHCP_TAG_OVERLOAD         52         // Option Overload\r
+#define DHCP_TAG_TFTP             66         // TFTP server name\r
+#define DHCP_TAG_BOOTFILE         67         // Bootfile name\r
+#define DHCP_TAG_TYPE             53         // DHCP Message Type\r
+#define DHCP_TAG_SERVER_ID        54         // Server Identifier\r
+#define DHCP_TAG_PARA_LIST        55         // Parameter Request List\r
+#define DHCP_TAG_MESSAGE          56         // Message\r
+#define DHCP_TAG_MAXMSG           57         // Maximum DHCP Message Size\r
+#define DHCP_TAG_T1               58         // Renewal (T1) Time Value\r
+#define DHCP_TAG_T2               59         // Rebinding (T2) Time Value\r
+#define DHCP_TAG_VENDOR_CLASS     60         // Vendor class identifier\r
+#define DHCP_TAG_CLIENT_ID        61         // Client-identifier\r
+\r
+\r
+#define DHCP_OPTION_MAGIC         0x63538263 // Network byte order\r
+#define DHCP_MAX_OPTIONS          256\r
+\r
\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
+// 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
index cce7e5a..6de87d0 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   The header file of CHAP configuration.\r
 \r
-Copyright (c) 2004 - 2007, Intel Corporation.<BR>\r
+Copyright (c) 2004 - 2009, 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
@@ -37,13 +37,12 @@ extern EFI_GUID mIScsiCHAPAuthInfoGuid;
 /// MD5_HASHSIZE\r
 ///\r
 #define ISCSI_CHAP_RSP_LEN        16  \r
-typedef enum {\r
-  ISCSI_CHAP_INITIAL,\r
-  ISCSI_CHAP_STEP_ONE,\r
-  ISCSI_CHAP_STEP_TWO,\r
-  ISCSI_CHAP_STEP_THREE,\r
-  ISCSI_CHAP_STEP_FOUR\r
-} ISCSI_CHAP_STEP;\r
+\r
+#define ISCSI_CHAP_INITIAL        0 \r
+#define ISCSI_CHAP_STEP_ONE       1\r
+#define ISCSI_CHAP_STEP_TWO       2\r
+#define ISCSI_CHAP_STEP_THREE     3\r
+#define ISCSI_CHAP_STEP_FOUR      4\r
 \r
 #pragma pack(1)\r
 \r
index 59840f7..62fc37a 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Helper functions for configuring or getting the parameters relating to iSCSI.\r
 \r
-Copyright (c) 2004 - 2008, Intel Corporation.<BR>\r
+Copyright (c) 2004 - 2009, 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
@@ -544,7 +544,7 @@ IScsiFormCallback (
   case KEY_LOCAL_IP:\r
     IScsiUnicodeStrToAsciiStr (IfrNvData->LocalIp, Ip4String);\r
     Status = IScsiAsciiStrToIp (Ip4String, &HostIp.v4);\r
-    if (EFI_ERROR (Status) || !Ip4IsUnicast (NTOHL (HostIp.Addr[0]), 0)) {\r
+    if (EFI_ERROR (Status) || !NetIp4IsUnicast (NTOHL (HostIp.Addr[0]), 0)) {\r
       CreatePopUp (EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, &Key, L"Invalid IP address!", NULL);\r
       Status = EFI_INVALID_PARAMETER;\r
     } else {\r
@@ -568,7 +568,7 @@ IScsiFormCallback (
   case KEY_GATE_WAY:\r
     IScsiUnicodeStrToAsciiStr (IfrNvData->Gateway, Ip4String);\r
     Status = IScsiAsciiStrToIp (Ip4String, &Gateway.v4);\r
-    if (EFI_ERROR (Status) || ((Gateway.Addr[0] != 0) && !Ip4IsUnicast (NTOHL (Gateway.Addr[0]), 0))) {\r
+    if (EFI_ERROR (Status) || ((Gateway.Addr[0] != 0) && !NetIp4IsUnicast (NTOHL (Gateway.Addr[0]), 0))) {\r
       CreatePopUp (EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, &Key, L"Invalid Gateway!", NULL);\r
       Status = EFI_INVALID_PARAMETER;\r
     } else {\r
@@ -580,7 +580,7 @@ IScsiFormCallback (
   case KEY_TARGET_IP:\r
     IScsiUnicodeStrToAsciiStr (IfrNvData->TargetIp, Ip4String);\r
     Status = IScsiAsciiStrToIp (Ip4String, &HostIp.v4);\r
-    if (EFI_ERROR (Status) || !Ip4IsUnicast (NTOHL (HostIp.Addr[0]), 0)) {\r
+    if (EFI_ERROR (Status) || !NetIp4IsUnicast (NTOHL (HostIp.Addr[0]), 0)) {\r
       CreatePopUp (EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, &Key, L"Invalid IP address!", NULL);\r
       Status = EFI_INVALID_PARAMETER;\r
     } else {\r
@@ -678,7 +678,7 @@ IScsiFormCallback (
       //\r
       if (!Private->Current->SessionConfigData.TargetInfoFromDhcp) {\r
         CopyMem (&HostIp.v4, &Private->Current->SessionConfigData.TargetIp, sizeof (HostIp.v4));\r
-        if (!Ip4IsUnicast (NTOHL (HostIp.Addr[0]), 0)) {\r
+        if (!NetIp4IsUnicast (NTOHL (HostIp.Addr[0]), 0)) {\r
           CreatePopUp (EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, &Key, L"Target IP is invalid!", NULL);\r
           Status = EFI_INVALID_PARAMETER;\r
           break;\r
index dfb3209..d0f2089 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   iSCSI DHCP related configuration routines.\r
 \r
-Copyright (c) 2004 - 2007, 2009, Intel Corporation.<BR>\r
+Copyright (c) 2004 - 2009, 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
@@ -38,7 +38,7 @@ IScsiDhcpExtractRootPath (
   CHAR8                 *TmpStr;\r
   ISCSI_ROOT_PATH_FIELD Fields[RP_FIELD_IDX_MAX];\r
   ISCSI_ROOT_PATH_FIELD *Field;\r
-  RP_FIELD_IDX          FieldIndex;\r
+  UINT32                FieldIndex;\r
   UINT8                 Index;\r
 \r
   //\r
index fd1fbe4..07b30a9 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   The header file of IScsiDhcp.\r
 \r
-Copyright (c) 2004 - 2008, Intel Corporation.<BR>\r
+Copyright (c) 2004 - 2009, 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
@@ -26,14 +26,12 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 #define ISCSI_ROOT_PATH_ID              "iscsi:"\r
 #define ISCSI_ROOT_PATH_FIELD_DELIMITER ':'\r
 \r
-typedef enum {\r
-  RP_FIELD_IDX_SERVERNAME = 0,\r
-  RP_FIELD_IDX_PROTOCOL,\r
-  RP_FIELD_IDX_PORT,\r
-  RP_FIELD_IDX_LUN,\r
-  RP_FIELD_IDX_TARGETNAME,\r
-  RP_FIELD_IDX_MAX\r
-} RP_FIELD_IDX;\r
+#define RP_FIELD_IDX_SERVERNAME         0\r
+#define RP_FIELD_IDX_PROTOCOL           1\r
+#define RP_FIELD_IDX_PORT               2\r
+#define RP_FIELD_IDX_LUN                3\r
+#define RP_FIELD_IDX_TARGETNAME         4\r
+#define RP_FIELD_IDX_MAX                5\r
 \r
 typedef struct _ISCSI_ROOT_PATH_FIELD {\r
   CHAR8 *Str;\r
index d712331..ca08da7 100644 (file)
@@ -20,7 +20,9 @@ UINTN   mTableKey;
 /**\r
   Initialize the header of the iSCSI Boot Firmware Table.\r
   \r
-  @param[out]  Header The header of the iSCSI Boot Firmware Table.\r
+  @param[out]  Header     The header of the iSCSI Boot Firmware Table.\r
+  @param[in]   OemId      The OEM ID.\r
+  @param[in]   OemTableId The OEM table ID for the iBFT.\r
 **/\r
 VOID\r
 IScsiInitIbfTableHeader (\r
index 9eff185..5194233 100644 (file)
@@ -126,7 +126,7 @@ IScsiAsciiStrToLun (
   UINTN   Index, IndexValue, IndexNum, SizeStr;\r
   CHAR8   TemStr[2];\r
   UINT8   TemValue;\r
-  UINT16  Value [4];\r
+  UINT16  Value[4];\r
   \r
   ZeroMem (Lun, 8);\r
   ZeroMem (TemStr, 2);\r
index a370e29..d73a961 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   The implementation of iSCSI protocol based on RFC3720.\r
 \r
-Copyright (c) 2004 - 2008, Intel Corporation.<BR>\r
+Copyright (c) 2004 - 2009, 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
@@ -225,8 +225,8 @@ IScsiCreateConnection (
   // set the default connection-only parameters\r
   //\r
   Conn->MaxRecvDataSegmentLength  = DEFAULT_MAX_RECV_DATA_SEG_LEN;\r
-  Conn->HeaderDigest              = ISCSI_DIGEST_NONE;\r
-  Conn->DataDigest                = ISCSI_DIGEST_NONE;\r
+  Conn->HeaderDigest              = IScsiDigestNone;\r
+  Conn->DataDigest                = IScsiDigestNone;\r
 \r
   CopyMem (&Tcp4IoConfig.LocalIp, &Session->ConfigData.NvData.LocalIp, sizeof (EFI_IPv4_ADDRESS));\r
   CopyMem (&Tcp4IoConfig.SubnetMask, &Session->ConfigData.NvData.SubnetMask, sizeof (EFI_IPv4_ADDRESS));\r
@@ -1146,11 +1146,11 @@ IScsiCheckOpParams (
   }\r
 \r
   if (AsciiStrCmp (Value, "CRC32") == 0) {\r
-    if (Conn->HeaderDigest != ISCSI_DIGEST_CRC32) {\r
+    if (Conn->HeaderDigest != IScsiDigestCRC32) {\r
       goto ON_ERROR;\r
     }\r
   } else if (AsciiStrCmp (Value, ISCSI_KEY_VALUE_NONE) == 0) {\r
-    Conn->HeaderDigest = ISCSI_DIGEST_NONE;\r
+    Conn->HeaderDigest = IScsiDigestNone;\r
   } else {\r
     goto ON_ERROR;\r
   }\r
@@ -1163,11 +1163,11 @@ IScsiCheckOpParams (
   }\r
 \r
   if (AsciiStrCmp (Value, "CRC32") == 0) {\r
-    if (Conn->DataDigest != ISCSI_DIGEST_CRC32) {\r
+    if (Conn->DataDigest != IScsiDigestCRC32) {\r
       goto ON_ERROR;\r
     }\r
   } else if (AsciiStrCmp (Value, ISCSI_KEY_VALUE_NONE) == 0) {\r
-    Conn->DataDigest = ISCSI_DIGEST_NONE;\r
+    Conn->DataDigest = IScsiDigestNone;\r
   } else {\r
     goto ON_ERROR;\r
   }\r
@@ -1361,10 +1361,10 @@ IScsiFillOpParams (
 \r
   Session = Conn->Session;\r
 \r
-  AsciiSPrint (Value, sizeof (Value), "%a", (Conn->HeaderDigest == ISCSI_DIGEST_CRC32) ? "None,CRC32" : "None");\r
+  AsciiSPrint (Value, sizeof (Value), "%a", (Conn->HeaderDigest == IScsiDigestCRC32) ? "None,CRC32" : "None");\r
   IScsiAddKeyValuePair (Pdu, ISCSI_KEY_HEADER_DIGEST, Value);\r
 \r
-  AsciiSPrint (Value, sizeof (Value), "%a", (Conn->DataDigest == ISCSI_DIGEST_CRC32) ? "None,CRC32" : "None");\r
+  AsciiSPrint (Value, sizeof (Value), "%a", (Conn->DataDigest == IScsiDigestCRC32) ? "None,CRC32" : "None");\r
   IScsiAddKeyValuePair (Pdu, ISCSI_KEY_DATA_DIGEST, Value);\r
 \r
   AsciiSPrint (Value, sizeof (Value), "%d", Session->ErrorRecoveryLevel);\r
@@ -1854,7 +1854,7 @@ IScsiNewScsiCmdPdu (
   ScsiCmd->CmdSN            = NTOHL (Tcb->CmdSN);\r
   ScsiCmd->ExpStatSN        = NTOHL (Tcb->Conn->ExpStatSN);\r
 \r
-  CopyMem (ScsiCmd->CDB, Packet->Cdb, sizeof (ScsiCmd->CDB));\r
+  CopyMem (ScsiCmd->Cdb, Packet->Cdb, sizeof (ScsiCmd->Cdb));\r
 \r
   if (Packet->CdbLength > 16) {\r
     Header->Length  = NTOHS (Packet->CdbLength - 15);\r
@@ -2258,7 +2258,7 @@ IScsiOnR2TRcvd (
   R2THdr->InitiatorTaskTag = NTOHL (R2THdr->InitiatorTaskTag);\r
   R2THdr->TargetTransferTag = NTOHL (R2THdr->TargetTransferTag);\r
   R2THdr->StatSN = NTOHL (R2THdr->StatSN);\r
-  R2THdr->R2TSN = NTOHL (R2THdr->R2TSN);\r
+  R2THdr->R2TSeqNum = NTOHL (R2THdr->R2TSeqNum);\r
   R2THdr->BufferOffset = NTOHL (R2THdr->BufferOffset);\r
   R2THdr->DesiredDataTransferLength = NTOHL (R2THdr->DesiredDataTransferLength);\r
 \r
@@ -2268,7 +2268,7 @@ IScsiOnR2TRcvd (
   //\r
   // Check the sequence number.\r
   //\r
-  Status = IScsiCheckSN (&Tcb->ExpDataSN, R2THdr->R2TSN);\r
+  Status = IScsiCheckSN (&Tcb->ExpDataSN, R2THdr->R2TSeqNum);\r
   if (EFI_ERROR (Status)) {\r
     return Status;\r
   }\r
index 3ffb2c4..93fe2af 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   The header file of iSCSI Protocol that defines many specific data structures.\r
 \r
-Copyright (c) 2004 - 2008, Intel Corporation.<BR>\r
+Copyright (c) 2004 - 2009, 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
@@ -75,25 +75,22 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 ///\r
 /// connection state for initiator\r
 ///\r
-typedef enum {\r
-  CONN_STATE_FREE,\r
-  CONN_STATE_XPT_WAIT,\r
-  CONN_STATE_IN_LOGIN,\r
-  CONN_STATE_LOGGED_IN,\r
-  CONN_STATE_IN_LOGOUT,\r
-  CONN_STATE_LOGOUT_REQUESTED,\r
-  CONN_STATE_CLEANUP_WAIT,\r
-  CONN_STATE_IN_CLEANUP\r
-} CONNECTION_STATE;\r
+\r
+#define CONN_STATE_FREE                         0\r
+#define CONN_STATE_XPT_WAIT                     1\r
+#define CONN_STATE_IN_LOGIN                     2\r
+#define CONN_STATE_LOGGED_IN                    3\r
+#define CONN_STATE_IN_LOGOUT                    4\r
+#define CONN_STATE_LOGOUT_REQUESTED             5\r
+#define CONN_STATE_CLEANUP_WAIT                 6\r
+#define CONN_STATE_IN_CLEANUP                   7\r
 \r
 ///\r
 /// session state for initiator\r
 ///\r
-typedef enum {\r
-  SESSION_STATE_FREE,\r
-  SESSION_STATE_LOGGED_IN,\r
-  SESSION_STATE_FAILED\r
-} SESSION_STATE;\r
+#define SESSION_STATE_FREE                      0\r
+#define SESSION_STATE_LOGGED_IN                 1\r
+#define SESSION_STATE_FAILED                    2\r
 \r
 typedef enum {\r
   DataIn  = 0,\r
@@ -227,7 +224,7 @@ typedef struct _SCSI_COMMAND {
   UINT32  ExpDataXferLength;\r
   UINT32  CmdSN;\r
   UINT32  ExpStatSN;\r
-  UINT8   CDB[16];\r
+  UINT8   Cdb[16];\r
 } SCSI_COMMAND;\r
 \r
 //\r
@@ -378,7 +375,7 @@ typedef struct _ISCSI_READY_TO_TRANSFER {
   UINT32  StatSN;\r
   UINT32  ExpCmdSN;\r
   UINT32  MaxCmdSN;\r
-  UINT32  R2TSN;\r
+  UINT32  R2TSeqNum;\r
   UINT32  BufferOffset;\r
   UINT32  DesiredDataTransferLength;\r
 } ISCSI_READY_TO_TRANSFER;\r
@@ -586,8 +583,8 @@ typedef struct _ISCSI_NOP_IN {
 #define ISCSI_FULL_FEATURE_PHASE            3\r
 \r
 typedef enum {\r
-  ISCSI_DIGEST_NONE,\r
-  ISCSI_DIGEST_CRC32\r
+  IScsiDigestNone,\r
+  IScsiDigestCRC32\r
 } ISCSI_DIGEST_TYPE;\r
 \r
 typedef struct _ISCSI_XFER_CONTEXT {\r
index 8cc789d..e8814a1 100644 (file)
@@ -46,27 +46,24 @@ typedef struct _IP4_CONFIG_INSTANCE IP4_CONFIG_INSTANCE;
 //\r
 // Global variables\r
 //\r
-extern EFI_DRIVER_BINDING_PROTOCOL   gIp4ConfigDriverBinding;\r
-extern EFI_COMPONENT_NAME_PROTOCOL   gIp4ConfigComponentName;\r
-extern EFI_COMPONENT_NAME2_PROTOCOL  gIp4ConfigComponentName2;\r
-\r
-extern IP4_CONFIG_INSTANCE           *mIp4ConfigNicList[MAX_IP4_CONFIG_IN_VARIABLE];\r
-extern EFI_IP4_CONFIG_PROTOCOL       mIp4ConfigProtocolTemplate;\r
+extern EFI_DRIVER_BINDING_PROTOCOL     gIp4ConfigDriverBinding;\r
+extern EFI_COMPONENT_NAME_PROTOCOL     gIp4ConfigComponentName;\r
+extern EFI_COMPONENT_NAME2_PROTOCOL    gIp4ConfigComponentName2;\r
+                                      \r
+extern IP4_CONFIG_INSTANCE             *mIp4ConfigNicList[MAX_IP4_CONFIG_IN_VARIABLE];\r
+extern EFI_IP4_CONFIG_PROTOCOL         mIp4ConfigProtocolTemplate;\r
 \r
 #define IP4_PROTO_ICMP                 0x01\r
 #define IP4_CONFIG_INSTANCE_SIGNATURE  SIGNATURE_32 ('I', 'P', '4', 'C')\r
 \r
-typedef enum {\r
-  IP4_CONFIG_STATE_IDLE         = 0,\r
-  IP4_CONFIG_STATE_STARTED,\r
-  IP4_CONFIG_STATE_CONFIGURED\r
-} IP4_CONFIG_STATE;\r
-\r
-typedef enum {\r
-  DHCP_TAG_PARA_LIST            = 55,\r
-  DHCP_TAG_NETMASK              = 1,\r
-  DHCP_TAG_ROUTER               = 3\r
-} DHCP_TAGS;\r
+#define IP4_CONFIG_STATE_IDLE          0\r
+#define IP4_CONFIG_STATE_STARTED       1\r
+#define IP4_CONFIG_STATE_CONFIGURED    2\r
+\r
+#define DHCP_TAG_PARA_LIST             55\r
+#define DHCP_TAG_NETMASK               1\r
+#define DHCP_TAG_ROUTER                3\r
+\r
 \r
 //\r
 // Configure the DHCP to request the routers and netmask\r
index a5b7c93..c97184a 100644 (file)
@@ -198,8 +198,8 @@ Ip4ConfigIpToStr (
 /**\r
   Convert the network configuration data into the IFR data.\r
 \r
-  @param[in]   ConfigFormEntry The IP4 configuration form entry.\r
-  @param[out]  IfrNvData       The IFR nv data.\r
+  @param[in]   Ip4ConfigInstance The IP4Config instance\r
+  @param[out]  IfrFormNvData     The IFR nv data.\r
 **/\r
 VOID\r
 Ip4ConfigConvertDeviceConfigDataToIfrNvData (\r
@@ -700,7 +700,7 @@ Ip4FormCallback (
   case KEY_LOCAL_IP:\r
     UnicodeStrToAsciiStr (IfrFormNvData->StationAddress, Ip4String);\r
     Status = Ip4AsciiStrToIp (Ip4String, &HostIp.v4);\r
-    if (EFI_ERROR (Status) || !Ip4IsUnicast (NTOHL (HostIp.Addr[0]), 0)) {\r
+    if (EFI_ERROR (Status) || !NetIp4IsUnicast (NTOHL (HostIp.Addr[0]), 0)) {\r
       CreatePopUp (EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, &Key, L"Invalid IP address!", NULL);\r
       Status = EFI_INVALID_PARAMETER;\r
     } else {\r
@@ -724,7 +724,7 @@ Ip4FormCallback (
   case KEY_GATE_WAY:\r
     UnicodeStrToAsciiStr (IfrFormNvData->GatewayAddress, Ip4String);\r
     Status = Ip4AsciiStrToIp (Ip4String, &Gateway.v4);\r
-    if (EFI_ERROR (Status) || ((Gateway.Addr[0] != 0) && !Ip4IsUnicast (NTOHL (Gateway.Addr[0]), 0))) {\r
+    if (EFI_ERROR (Status) || ((Gateway.Addr[0] != 0) && !NetIp4IsUnicast (NTOHL (Gateway.Addr[0]), 0))) {\r
       CreatePopUp (EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, &Key, L"Invalid Gateway!", NULL);\r
       Status = EFI_INVALID_PARAMETER;\r
     } else {\r
index a5f00ee..17709af 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Routines used to operate the Ip4 configure variable.\r
 \r
-Copyright (c) 2006 - 2008, Intel Corporation.<BR>                                                         \r
+Copyright (c) 2006 - 2009, 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<BR>\r
@@ -45,7 +45,7 @@ Ip4ConfigIsValid (
     Netmask = EFI_NTOHL (IpConfig->SubnetMask);\r
 \r
     if ((Netmask == 0) || !IP4_IS_VALID_NETMASK (Netmask) ||\r
-        (Station == 0) || !Ip4IsUnicast (Station, Netmask)) {\r
+        (Station == 0) || !NetIp4IsUnicast (Station, Netmask)) {\r
       return FALSE;\r
     }\r
 \r
@@ -57,7 +57,7 @@ Ip4ConfigIsValid (
       Gateway = EFI_NTOHL (IpConfig->RouteTable[Index].GatewayAddress);\r
 \r
       if ((Gateway != 0) && (!IP4_NET_EQUAL (Station, Gateway, Netmask) ||\r
-          !Ip4IsUnicast (Gateway, Netmask))) {\r
+          !NetIp4IsUnicast (Gateway, Netmask))) {\r
         return FALSE;\r
       }\r
     }\r
index af01a03..0e221f7 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Common definition for IP4.\r
   \r
-Copyright (c) 2005 - 2006, Intel Corporation.<BR>\r
+Copyright (c) 2005 - 2009, 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
@@ -19,38 +19,32 @@ typedef struct _IP4_INTERFACE  IP4_INTERFACE;
 typedef struct _IP4_PROTOCOL   IP4_PROTOCOL;\r
 typedef struct _IP4_SERVICE    IP4_SERVICE;\r
 \r
-\r
-typedef enum {\r
-  IP4_ETHER_PROTO      = 0x0800,\r
-\r
-  IP4_PROTO_ICMP       = 0x01,\r
-  IP4_PROTO_IGMP       = 0x02,\r
-\r
-  //\r
-  // The packet is received as link level broadcast/multicast/promiscuous.\r
-  //\r
-  IP4_LINK_BROADCAST   = 0x00000001,\r
-  IP4_LINK_MULTICAST   = 0x00000002,\r
-  IP4_LINK_PROMISC     = 0x00000004,\r
-\r
-  //\r
-  // IP4 address cast type classfication. Keep it true that any\r
-  // type bigger than or equal to LOCAL_BROADCAST is broadcast.\r
-  //\r
-  IP4_PROMISCUOUS      = 1,\r
-  IP4_LOCAL_HOST,\r
-  IP4_MULTICAST,\r
-  IP4_LOCAL_BROADCAST,  // Destination is 255.255.255.255\r
-  IP4_SUBNET_BROADCAST,\r
-  IP4_NET_BROADCAST,\r
-\r
-  //\r
-  // IP4 header flags\r
-  //\r
-  IP4_HEAD_DF_MASK     = 0x4000,\r
-  IP4_HEAD_MF_MASK     = 0x2000,\r
-  IP4_HEAD_OFFSET_MASK = 0x1fff\r
-} IP_ENUM_TYPES;\r
+#define IP4_ETHER_PROTO       0x0800\r
+\r
+//\r
+// The packet is received as link level broadcast/multicast/promiscuous.\r
+//\r
+#define IP4_LINK_BROADCAST    0x00000001\r
+#define IP4_LINK_MULTICAST    0x00000002\r
+#define IP4_LINK_PROMISC      0x00000004\r
+\r
+//\r
+// IP4 address cast type classfication. Keep it true that any\r
+// type bigger than or equal to LOCAL_BROADCAST is broadcast.\r
+//\r
+#define IP4_PROMISCUOUS       1\r
+#define IP4_LOCAL_HOST        2\r
+#define IP4_MULTICAST         3\r
+#define IP4_LOCAL_BROADCAST   4  // Destination is 255.255.255.255\r
+#define IP4_SUBNET_BROADCAST  5\r
+#define IP4_NET_BROADCAST     6\r
+\r
+//\r
+// IP4 header flags\r
+//\r
+#define IP4_HEAD_DF_MASK      0x4000\r
+#define IP4_HEAD_MF_MASK      0x2000\r
+#define IP4_HEAD_OFFSET_MASK  0x1fff\r
 \r
 #define IP4_ALLZERO_ADDRESS   0x00000000u\r
 #define IP4_ALLONE_ADDRESS    0xFFFFFFFFu\r
index 757d7aa..76208e0 100644 (file)
@@ -1,6 +1,6 @@
 /** @file\r
 \r
-Copyright (c) 2005 - 2006, Intel Corporation.<BR>\r
+Copyright (c) 2005 - 2009, 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
@@ -62,7 +62,7 @@ mIp4SupportedIcmp[23] = {
   {ICMP_ECHO_REQUEST,      ICMP_DEFAULT_CODE        },\r
 \r
   {ICMP_TIME_EXCEEDED,     ICMP_TIMEOUT_IN_TRANSIT  },\r
-  {ICMP_TIME_EXCEEDED,     ICMp_TIMEOUT_REASSEMBLE  },\r
+  {ICMP_TIME_EXCEEDED,     ICMP_TIMEOUT_REASSEMBLE  },\r
 \r
   {ICMP_PARAMETER_PROBLEM, ICMP_DEFAULT_CODE        },\r
 };\r
@@ -247,7 +247,7 @@ Ip4IcmpReplyEcho (
   ReplyHead.Tos       = 0;\r
   ReplyHead.Fragment  = 0;\r
   ReplyHead.Ttl       = 64;\r
-  ReplyHead.Protocol  = IP4_PROTO_ICMP;\r
+  ReplyHead.Protocol  = EFI_IP_PROTO_ICMP;\r
   ReplyHead.Src       = 0;\r
 \r
   //\r
index f9db6a3..2488e61 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Header file for ICMP protocol.\r
   \r
-Copyright (c) 2005 - 2006, Intel Corporation.<BR>\r
+Copyright (c) 2005 - 2009, 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
@@ -15,63 +15,61 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 #ifndef __EFI_IP4_ICMP_H__\r
 #define __EFI_IP4_ICMP_H__\r
 \r
-typedef enum {\r
   //\r
   // ICMP type definations\r
   //\r
-  ICMP_ECHO_REPLY           = 0,\r
-  ICMP_DEST_UNREACHABLE     = 3,\r
-  ICMP_SOURCE_QUENCH        = 4,\r
-  ICMP_REDIRECT             = 5,\r
-  ICMP_ECHO_REQUEST         = 8,\r
-  ICMP_TIME_EXCEEDED        = 11,\r
-  ICMP_PARAMETER_PROBLEM    = 12,\r
-  ICMP_TIMESTAMP            = 13,\r
-  ICMP_INFO_REQUEST         = 15,\r
-  ICMP_INFO_REPLY           = 16,\r
-  ICMP_TYPE_MAX             = ICMP_INFO_REPLY,\r
+#define ICMP_ECHO_REPLY            0\r
+#define ICMP_DEST_UNREACHABLE      3\r
+#define ICMP_SOURCE_QUENCH         4\r
+#define ICMP_REDIRECT              5\r
+#define ICMP_ECHO_REQUEST          8\r
+#define ICMP_TIME_EXCEEDED         11\r
+#define ICMP_PARAMETER_PROBLEM     12\r
+#define ICMP_TIMESTAMP             13\r
+#define ICMP_INFO_REQUEST          15\r
+#define ICMP_INFO_REPLY            16\r
+#define ICMP_TYPE_MAX              ICMP_INFO_REPLY\r
 \r
-  ICMP_DEFAULT_CODE         = 0,\r
+#define ICMP_DEFAULT_CODE          0\r
 \r
   //\r
   // ICMP code definations for ICMP_DEST_UNREACHABLE\r
   //\r
-  ICMP_NET_UNREACHABLE      = 0,\r
-  ICMP_HOST_UNREACHABLE     = 1,\r
-  ICMP_PROTO_UNREACHABLE    = 2,  // Host may generate\r
-  ICMP_PORT_UNREACHABLE     = 3,  // Host may generate\r
-  ICMP_FRAGMENT_FAILED      = 4,\r
-  ICMP_SOURCEROUTE_FAILED   = 5,  // Host may generate\r
-  ICMP_NET_UNKNOWN          = 6,\r
-  ICMP_HOST_UNKNOWN         = 7,\r
-  ICMP_SOURCE_ISOLATED      = 8,\r
-  ICMP_NET_PROHIBITED       = 9,\r
-  ICMP_HOST_PROHIBITED      = 10,\r
-  ICMP_NET_UNREACHABLE_TOS  = 11,\r
-  ICMP_HOST_UNREACHABLE_TOS = 12,\r
+#define ICMP_NET_UNREACHABLE       0\r
+#define ICMP_HOST_UNREACHABLE      1\r
+#define ICMP_PROTO_UNREACHABLE     2  // Host may generate\r
+#define ICMP_PORT_UNREACHABLE      3  // Host may generate\r
+#define ICMP_FRAGMENT_FAILED       4\r
+#define ICMP_SOURCEROUTE_FAILED    5  // Host may generate\r
+#define ICMP_NET_UNKNOWN           6\r
+#define ICMP_HOST_UNKNOWN          7\r
+#define ICMP_SOURCE_ISOLATED       8\r
+#define ICMP_NET_PROHIBITED        9\r
+#define ICMP_HOST_PROHIBITED       10\r
+#define ICMP_NET_UNREACHABLE_TOS   11\r
+#define ICMP_HOST_UNREACHABLE_TOS  12\r
 \r
   //\r
   // ICMP code definations for ICMP_TIME_EXCEEDED\r
   //\r
-  ICMP_TIMEOUT_IN_TRANSIT   = 0,\r
-  ICMp_TIMEOUT_REASSEMBLE   = 1,  // Host may generate\r
+#define ICMP_TIMEOUT_IN_TRANSIT    0\r
+#define ICMP_TIMEOUT_REASSEMBLE    1  // Host may generate\r
 \r
   //\r
   // ICMP code definations for ICMP_TIME_EXCEEDED\r
   //\r
-  ICMP_NET_REDIRECT         = 0,\r
-  ICMP_HOST_REDIRECT        = 1,\r
-  ICMP_NET_TOS_REDIRECT     = 2,\r
-  ICMP_HOST_TOS_REDIRECT    = 3,\r
+#define ICMP_NET_REDIRECT          0\r
+#define ICMP_HOST_REDIRECT         1\r
+#define ICMP_NET_TOS_REDIRECT      2\r
+#define ICMP_HOST_TOS_REDIRECT     3\r
 \r
   //\r
   // ICMP message classes, each class of ICMP message shares\r
   // a common message format. INVALID_MESSAGE is only a flag.\r
   //\r
-  ICMP_INVALID_MESSAGE      = 0,\r
-  ICMP_ERROR_MESSAGE        = 1,\r
-  ICMP_QUERY_MESSAGE        = 2\r
-} ICMP_ENUM_TYPES;\r
+#define ICMP_INVALID_MESSAGE       0\r
+#define ICMP_ERROR_MESSAGE         1\r
+#define ICMP_QUERY_MESSAGE         2\r
 \r
 typedef struct {\r
   UINT8                   IcmpType;\r
index 305e826..2032c6d 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Definition for IP4 pesudo interface structure.\r
   \r
-Copyright (c) 2005 - 2006, Intel Corporation.<BR>\r
+Copyright (c) 2005 - 2009, 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
@@ -15,12 +15,10 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 #ifndef __EFI_IP4_IF_H__\r
 #define __EFI_IP4_IF_H__\r
 \r
-typedef enum {\r
-  IP4_FRAME_RX_SIGNATURE  = SIGNATURE_32 ('I', 'P', 'F', 'R'),\r
-  IP4_FRAME_TX_SIGNATURE  = SIGNATURE_32 ('I', 'P', 'F', 'T'),\r
-  IP4_FRAME_ARP_SIGNATURE = SIGNATURE_32 ('I', 'P', 'F', 'A'),\r
-  IP4_INTERFACE_SIGNATURE = SIGNATURE_32 ('I', 'P', 'I', 'F')\r
-} IP4_IF_ENUM_TYPES;\r
+#define IP4_FRAME_RX_SIGNATURE  SIGNATURE_32 ('I', 'P', 'F', 'R')\r
+#define IP4_FRAME_TX_SIGNATURE  SIGNATURE_32 ('I', 'P', 'F', 'T')\r
+#define IP4_FRAME_ARP_SIGNATURE SIGNATURE_32 ('I', 'P', 'F', 'A')\r
+#define IP4_INTERFACE_SIGNATURE SIGNATURE_32 ('I', 'P', 'I', 'F')\r
 \r
 /**\r
   This prototype is used by both receive and transmission.\r
index b82d3cc..549d4a2 100644 (file)
@@ -1,6 +1,6 @@
 /** @file\r
 \r
-Copyright (c) 2005 - 2006, Intel Corporation.<BR>\r
+Copyright (c) 2005 - 2009, 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
@@ -14,6 +14,17 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 #ifndef __EFI_IP4_IGMP_H__\r
 #define __EFI_IP4_IGMP_H__\r
 \r
+//\r
+// IGMP message type\r
+//\r
+#define IGMP_MEMBERSHIP_QUERY      0x11\r
+#define IGMP_V1_MEMBERSHIP_REPORT  0x12\r
+#define IGMP_V2_MEMBERSHIP_REPORT  0x16\r
+#define IGMP_LEAVE_GROUP           0x17\r
+\r
+#define IGMP_V1ROUTER_PRESENT      400\r
+#define IGMP_UNSOLICIATED_REPORT   10\r
+\r
 #pragma pack(1)\r
 typedef struct {\r
   UINT8                   Type;\r
@@ -48,19 +59,6 @@ typedef struct {
   LIST_ENTRY              Groups;\r
 } IGMP_SERVICE_DATA;\r
 \r
-typedef enum {\r
-  //\r
-  // IGMP message type\r
-  //\r
-  IGMP_MEMBERSHIP_QUERY     = 0x11,\r
-  IGMP_V1_MEMBERSHIP_REPORT = 0x12,\r
-  IGMP_V2_MEMBERSHIP_REPORT = 0x16,\r
-  IGMP_LEAVE_GROUP          = 0x17,\r
-\r
-  IGMP_V1ROUTER_PRESENT     = 400,\r
-  IGMP_UNSOLICIATED_REPORT  = 10\r
-} IGMP_ENUM_TYPES;\r
-\r
 /**\r
   Init the IGMP control data of the IP4 service instance, configure\r
   MNP to receive ALL SYSTEM multicast.\r
index 714f3d9..4788d40 100644 (file)
@@ -1962,7 +1962,7 @@ EfiIp4Transmit (
   // a IP4_TXTOKEN_WRAP and the data in a netbuf\r
   //\r
   Status = EFI_OUT_OF_RESOURCES;\r
-  Wrap   = AllocatePool (sizeof (IP4_TXTOKEN_WRAP));\r
+  Wrap   = AllocateZeroPool (sizeof (IP4_TXTOKEN_WRAP));\r
   if (Wrap == NULL) {\r
     goto ON_EXIT;\r
   }\r
index 615e5ae..8b2e286 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Ip4 internal functions and type defintions.\r
   \r
-Copyright (c) 2005 - 2007, Intel Corporation.<BR>                                                         \r
+Copyright (c) 2005 - 2009, 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
@@ -43,34 +43,31 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 #include "Ip4Input.h"\r
 #include "Ip4Output.h"\r
 \r
+#define IP4_PROTOCOL_SIGNATURE  SIGNATURE_32 ('I', 'P', '4', 'P')\r
+#define IP4_SERVICE_SIGNATURE   SIGNATURE_32 ('I', 'P', '4', 'S')\r
+\r
+//\r
+// The state of IP4 protocol. It starts from UNCONFIGED. if it is\r
+// successfully configured, it goes to CONFIGED. if configure NULL\r
+// is called, it becomes UNCONFIGED again. If (partly) destoried, it\r
+// becomes DESTORY.\r
+//\r
+#define IP4_STATE_UNCONFIGED    0\r
+#define IP4_STATE_CONFIGED      1\r
+#define IP4_STATE_DESTORY       2\r
+\r
+//\r
+// The state of IP4 service. It starts from UNSTARTED. It transits\r
+// to STARTED if autoconfigure is started. If default address is\r
+// configured, it becomes CONFIGED. and if partly destoried, it goes\r
+// to DESTORY.\r
+//\r
+#define IP4_SERVICE_UNSTARTED   0\r
+#define IP4_SERVICE_STARTED     1\r
+#define IP4_SERVICE_CONFIGED    2\r
+#define IP4_SERVICE_DESTORY     3\r
 \r
 \r
-typedef enum {\r
-  IP4_PROTOCOL_SIGNATURE = SIGNATURE_32 ('I', 'P', '4', 'P'),\r
-  IP4_SERVICE_SIGNATURE  = SIGNATURE_32 ('I', 'P', '4', 'S'),\r
-\r
-  //\r
-  // The state of IP4 protocol. It starts from UNCONFIGED. if it is\r
-  // successfully configured, it goes to CONFIGED. if configure NULL\r
-  // is called, it becomes UNCONFIGED again. If (partly) destoried, it\r
-  // becomes DESTORY.\r
-  //\r
-  IP4_STATE_UNCONFIGED   = 0,\r
-  IP4_STATE_CONFIGED,\r
-  IP4_STATE_DESTORY,\r
-\r
-  //\r
-  // The state of IP4 service. It starts from UNSTARTED. It transits\r
-  // to STARTED if autoconfigure is started. If default address is\r
-  // configured, it becomes CONFIGED. and if partly destoried, it goes\r
-  // to DESTORY.\r
-  //\r
-  IP4_SERVICE_UNSTARTED  = 0,\r
-  IP4_SERVICE_STARTED,\r
-  IP4_SERVICE_CONFIGED,\r
-  IP4_SERVICE_DESTORY\r
-} IP4_IMPL_ENUM_TYPES;\r
-\r
 ///\r
 /// IP4_TXTOKEN_WRAP wraps the upper layer's transmit token.\r
 /// The user's data is kept in the Packet. When fragment is\r
index b495e75..7257353 100644 (file)
@@ -228,7 +228,7 @@ Ip4Reassemble (
   NET_BUF                   *NewPacket;\r
   INTN                      Index;\r
 \r
-  IpHead  = Packet->Ip;\r
+  IpHead  = Packet->Ip.Ip4;\r
   This    = IP4_GET_CLIP_INFO (Packet);\r
 \r
   ASSERT (IpHead != NULL);\r
@@ -417,7 +417,7 @@ Ip4Reassemble (
       return NULL;\r
     }\r
 \r
-    NewPacket->Ip = Assemble->Head;\r
+    NewPacket->Ip.Ip4 = Assemble->Head;\r
     CopyMem (IP4_GET_CLIP_INFO (NewPacket), Assemble->Info, sizeof (*IP4_GET_CLIP_INFO (NewPacket)));\r
     return NewPacket;\r
   }\r
@@ -501,7 +501,7 @@ Ip4AccpetFrame (
   //\r
   // Convert the IP header to host byte order, then get the per packet info.\r
   //\r
-  Packet->Ip      = Ip4NtohHead (Head);\r
+  Packet->Ip.Ip4  = Ip4NtohHead (Head);\r
 \r
   Info            = IP4_GET_CLIP_INFO (Packet);\r
   Info->LinkFlag  = Flag;\r
@@ -570,11 +570,11 @@ Ip4AccpetFrame (
   // info must be reloaded bofore use. The ownership of the packet\r
   // is transfered to the packet process logic.\r
   //\r
-  Head  = Packet->Ip;\r
+  Head  = Packet->Ip.Ip4;\r
   IP4_GET_CLIP_INFO (Packet)->Status = EFI_SUCCESS;\r
 \r
   switch (Head->Protocol) {\r
-  case IP4_PROTO_ICMP:\r
+  case EFI_IP_PROTO_ICMP:\r
     Ip4IcmpHandle (IpSb, Head, Packet);\r
     break;\r
 \r
@@ -655,7 +655,7 @@ Ip4InstanceFrameAcceptable (
   //\r
   Proto = Head->Protocol;\r
 \r
-  if (Proto == IP4_PROTO_ICMP) {\r
+  if (Proto == EFI_IP_PROTO_ICMP) {\r
     NetbufCopy (Packet, 0, sizeof (Icmp.Head), (UINT8 *) &Icmp.Head);\r
 \r
     if (mIcmpClass[Icmp.Head.Type].IcmpClass == ICMP_ERROR_MESSAGE) {\r
@@ -850,13 +850,13 @@ Ip4WrapRxData (
     return NULL;\r
   }\r
 \r
-  ASSERT (Packet->Ip != NULL);\r
+  ASSERT (Packet->Ip.Ip4 != NULL);\r
 \r
   //\r
   // The application expects a network byte order header.\r
   //\r
-  RxData->HeaderLength  = (Packet->Ip->HeadLen << 2);\r
-  RxData->Header        = (EFI_IP4_HEADER *) Ip4NtohHead (Packet->Ip);\r
+  RxData->HeaderLength  = (Packet->Ip.Ip4->HeadLen << 2);\r
+  RxData->Header        = (EFI_IP4_HEADER *) Ip4NtohHead (Packet->Ip.Ip4);\r
 \r
   RxData->OptionsLength = RxData->HeaderLength - IP4_MIN_HEADLEN;\r
   RxData->Options       = NULL;\r
@@ -938,9 +938,9 @@ Ip4InstanceDeliverPacket (
       // may be not continuous before the data.\r
       //\r
       Head    = NetbufAllocSpace (Dup, IP4_MAX_HEADLEN, NET_BUF_HEAD);\r
-      Dup->Ip = (IP4_HEAD *) Head;\r
+      Dup->Ip.Ip4 = (IP4_HEAD *) Head;\r
 \r
-      CopyMem (Head, Packet->Ip, Packet->Ip->HeadLen << 2);\r
+      CopyMem (Head, Packet->Ip.Ip4, Packet->Ip.Ip4->HeadLen << 2);\r
       NetbufTrim (Dup, IP4_MAX_HEADLEN, TRUE);\r
 \r
       Wrap = Ip4WrapRxData (IpInstance, Dup);\r
index eea4d7e..cd1367b 100644 (file)
@@ -1,6 +1,6 @@
 /** @file\r
 \r
-Copyright (c) 2005 - 2006, Intel Corporation.<BR>\r
+Copyright (c) 2005 - 2009, 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
@@ -14,14 +14,12 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 #ifndef __EFI_IP4_INPUT_H__\r
 #define __EFI_IP4_INPUT_H__\r
 \r
-typedef enum {\r
-  IP4_MIN_HEADLEN       = 20,\r
-  IP4_MAX_HEADLEN       = 60,\r
+#define IP4_MIN_HEADLEN        20\r
+#define IP4_MAX_HEADLEN        60\r
 \r
-  IP4_ASSEMLE_HASH_SIZE = 31,\r
-  IP4_FRAGMENT_LIFE     = 120,\r
-  IP4_MAX_PACKET_SIZE   = 65535\r
-} IP4_INPUT_ENUM_TYPES;\r
+#define IP4_ASSEMLE_HASH_SIZE  31\r
+#define IP4_FRAGMENT_LIFE      120\r
+#define IP4_MAX_PACKET_SIZE    65535\r
 \r
 ///\r
 /// Per packet information for input process. LinkFlag specifies whether\r
index 206c920..421872c 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   IP4 option support routines.\r
   \r
-Copyright (c) 2005 - 2006, Intel Corporation.<BR>\r
+Copyright (c) 2005 - 2009, 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
@@ -15,15 +15,13 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 #ifndef __EFI_IP4_OPTION_H__\r
 #define __EFI_IP4_OPTION_H__\r
 \r
-typedef enum {\r
-  IP4_OPTION_EOP       = 0,\r
-  IP4_OPTION_NOP       = 1,\r
-  IP4_OPTION_LSRR      = 131,  // Loss source and record routing,   10000011\r
-  IP4_OPTION_SSRR      = 137,  // Strict source and record routing, 10001001\r
-  IP4_OPTION_RR        = 7,    // Record routing, 00000111\r
+#define IP4_OPTION_EOP        0\r
+#define IP4_OPTION_NOP        1\r
+#define IP4_OPTION_LSRR       131  // Loss source and record routing,   10000011\r
+#define IP4_OPTION_SSRR       137  // Strict source and record routing, 10001001\r
+#define IP4_OPTION_RR         7    // Record routing, 00000111\r
 \r
-  IP4_OPTION_COPY_MASK = 0x80\r
-} IP4_OPTION_ENUM_TYPES;\r
+#define IP4_OPTION_COPY_MASK  0x80\r
 \r
 /**\r
   Validate the IP4 option format for both the packets we received\r
index 306ab2d..53317c8 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Transmit the IP4 packet.\r
   \r
-Copyright (c) 2005 - 2006, Intel Corporation.<BR>\r
+Copyright (c) 2005 - 2009, 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
@@ -83,7 +83,7 @@ Ip4PrependHead (
   PacketHead->Dst       = HTONL (Head->Dst);\r
   PacketHead->Checksum  = (UINT16) (~NetblockChecksum ((UINT8 *) PacketHead, HeadLen));\r
 \r
-  Packet->Ip            = PacketHead;\r
+  Packet->Ip.Ip4        = PacketHead;\r
   return EFI_SUCCESS;\r
 }\r
 \r
index 4c238a6..0c901e8 100644 (file)
@@ -1,6 +1,6 @@
 /** @file\r
 \r
-Copyright (c) 2005 - 2006, Intel Corporation.<BR>\r
+Copyright (c) 2005 - 2009, 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
@@ -145,7 +145,7 @@ Ip4InitRouteCache (
 {\r
   UINT32                    Index;\r
 \r
-  for (Index = 0; Index < IP4_ROUTE_CACHE_HASH; Index++) {\r
+  for (Index = 0; Index < IP4_ROUTE_CACHE_HASH_VALUE; Index++) {\r
     InitializeListHead (&(RtCache->CacheBucket[Index]));\r
   }\r
 }\r
@@ -168,7 +168,7 @@ Ip4CleanRouteCache (
   IP4_ROUTE_CACHE_ENTRY     *RtCacheEntry;\r
   UINT32                    Index;\r
 \r
-  for (Index = 0; Index < IP4_ROUTE_CACHE_HASH; Index++) {\r
+  for (Index = 0; Index < IP4_ROUTE_CACHE_HASH_VALUE; Index++) {\r
     NET_LIST_FOR_EACH_SAFE (Entry, Next, &(RtCache->CacheBucket[Index])) {\r
       RtCacheEntry = NET_LIST_USER_STRUCT (Entry, IP4_ROUTE_CACHE_ENTRY, Link);\r
 \r
@@ -278,7 +278,7 @@ Ip4PurgeRouteCache (
   IP4_ROUTE_CACHE_ENTRY     *RtCacheEntry;\r
   UINT32                    Index;\r
 \r
-  for (Index = 0; Index < IP4_ROUTE_CACHE_HASH; Index++) {\r
+  for (Index = 0; Index < IP4_ROUTE_CACHE_HASH_VALUE; Index++) {\r
     NET_LIST_FOR_EACH_SAFE (Entry, Next, &RtCache->CacheBucket[Index]) {\r
 \r
       RtCacheEntry = NET_LIST_USER_STRUCT (Entry, IP4_ROUTE_CACHE_ENTRY, Link);\r
index ee1f6a9..774dd60 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   EFI IP4 route table and route cache table defintions.\r
   \r
-Copyright (c) 2005 - 2006, Intel Corporation.<BR>\r
+Copyright (c) 2005 - 2009, 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
@@ -17,14 +17,12 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 \r
 #include "Ip4Common.h"\r
 \r
-typedef enum {\r
-  IP4_DIRECT_ROUTE      = 0x00000001,\r
+#define IP4_DIRECT_ROUTE       0x00000001\r
 \r
-  IP4_ROUTE_CACHE_HASH  = 31,\r
-  IP4_ROUTE_CACHE_MAX   = 64  // Max NO. of cache entry per hash bucket\r
-} IP4_ROUTE_ENUM_TYPES;\r
+#define IP4_ROUTE_CACHE_HASH_VALUE 31\r
+#define IP4_ROUTE_CACHE_MAX        64  // Max NO. of cache entry per hash bucket\r
 \r
-#define IP4_ROUTE_CACHE_HASH(Dst, Src)  (((Dst) ^ (Src)) % IP4_ROUTE_CACHE_HASH)\r
+#define IP4_ROUTE_CACHE_HASH(Dst, Src)  (((Dst) ^ (Src)) % IP4_ROUTE_CACHE_HASH_VALUE)\r
 \r
 ///\r
 /// The route entry in the route table. Dest/Netmask is the destion\r
@@ -69,7 +67,7 @@ typedef struct {
 /// detach them later.\r
 ///\r
 typedef struct {\r
-  LIST_ENTRY                CacheBucket[IP4_ROUTE_CACHE_HASH];\r
+  LIST_ENTRY                CacheBucket[IP4_ROUTE_CACHE_HASH_VALUE];\r
 } IP4_ROUTE_CACHE;\r
 \r
 ///\r
index 06f0231..229a355 100644 (file)
@@ -178,7 +178,7 @@ Mtftp4OverrideValid (
   IP4_ADDR                  Gateway;\r
 \r
   CopyMem (&Ip, &Override->ServerIp, sizeof (IP4_ADDR));\r
-  if (!Ip4IsUnicast (NTOHL (Ip), 0)) {\r
+  if (!NetIp4IsUnicast (NTOHL (Ip), 0)) {\r
     return FALSE;\r
   }\r
 \r
@@ -194,7 +194,7 @@ Mtftp4OverrideValid (
     Netmask = NTOHL (Netmask);\r
     Ip      = NTOHL (Ip);\r
 \r
-    if (!Ip4IsUnicast (Gateway, Netmask) || !IP4_NET_EQUAL (Gateway, Ip, Netmask)) {\r
+    if (!NetIp4IsUnicast (Gateway, Netmask) || !IP4_NET_EQUAL (Gateway, Ip, Netmask)) {\r
       return FALSE;\r
     }\r
   }\r
@@ -653,18 +653,18 @@ EfiMtftp4Configure (
     Gateway  = NTOHL (Gateway);\r
     ServerIp = NTOHL (ServerIp);\r
 \r
-    if (!Ip4IsUnicast (ServerIp, 0)) {\r
+    if (!NetIp4IsUnicast (ServerIp, 0)) {\r
       return EFI_INVALID_PARAMETER;\r
     }\r
 \r
     if (!ConfigData->UseDefaultSetting &&\r
-       ((!IP4_IS_VALID_NETMASK (Netmask) || !Ip4IsUnicast (Ip, Netmask)))) {\r
+       ((!IP4_IS_VALID_NETMASK (Netmask) || !NetIp4IsUnicast (Ip, Netmask)))) {\r
 \r
       return EFI_INVALID_PARAMETER;\r
     }\r
 \r
     if ((Gateway != 0) &&\r
-        (!IP4_NET_EQUAL (Gateway, Ip, Netmask) || !Ip4IsUnicast (Gateway, Netmask))) {\r
+        (!IP4_NET_EQUAL (Gateway, Ip, Netmask) || !NetIp4IsUnicast (Gateway, Netmask))) {\r
 \r
       return EFI_INVALID_PARAMETER;\r
     }\r
index d4644c7..a1abf6f 100644 (file)
@@ -48,20 +48,18 @@ typedef struct _MTFTP4_PROTOCOL MTFTP4_PROTOCOL;
 ///\r
 /// Some constant value of Mtftp service.\r
 ///\r
-typedef enum {\r
-  MTFTP4_SERVICE_SIGNATURE   = SIGNATURE_32 ('T', 'F', 'T', 'P'),\r
-  MTFTP4_PROTOCOL_SIGNATURE  = SIGNATURE_32 ('t', 'f', 't', 'p'),\r
-\r
-  MTFTP4_DEFAULT_SERVER_PORT = 69,\r
-  MTFTP4_DEFAULT_TIMEOUT     = 3,\r
-  MTFTP4_DEFAULT_RETRY       = 5,\r
-  MTFTP4_DEFAULT_BLKSIZE     = 512,\r
-  MTFTP4_TIME_TO_GETMAP      = 5,\r
-\r
-  MTFTP4_STATE_UNCONFIGED    = 0,\r
-  MTFTP4_STATE_CONFIGED,\r
-  MTFTP4_STATE_DESTORY\r
-} MTFTP4_SERVICE_CONST_VALUE;\r
+#define MTFTP4_SERVICE_SIGNATURE    SIGNATURE_32 ('T', 'F', 'T', 'P')\r
+#define MTFTP4_PROTOCOL_SIGNATURE   SIGNATURE_32 ('t', 'f', 't', 'p')\r
+\r
+#define MTFTP4_DEFAULT_SERVER_PORT  69\r
+#define MTFTP4_DEFAULT_TIMEOUT      3\r
+#define MTFTP4_DEFAULT_RETRY        5\r
+#define MTFTP4_DEFAULT_BLKSIZE      512\r
+#define MTFTP4_TIME_TO_GETMAP       5\r
+\r
+#define MTFTP4_STATE_UNCONFIGED     0\r
+#define MTFTP4_STATE_CONFIGED       1\r
+#define MTFTP4_STATE_DESTORY        2\r
 \r
 ///\r
 /// Mtftp service block\r
index 3e45010..48687c1 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Routines to process MTFTP4 options.\r
   \r
-Copyright (c) 2006 - 2007, Intel Corporation<BR>\r
+Copyright (c) 2006 - 2009, 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
@@ -16,20 +16,16 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 #ifndef __EFI_MTFTP4_OPTION_H__\r
 #define __EFI_MTFTP4_OPTION_H__\r
 \r
+#define MTFTP4_SUPPORTED_OPTIONS  4\r
+#define MTFTP4_OPCODE_LEN         2\r
+#define MTFTP4_ERRCODE_LEN        2\r
+#define MTFTP4_BLKNO_LEN          2\r
+#define MTFTP4_DATA_HEAD_LEN      4\r
 \r
-\r
-typedef enum {\r
-  MTFTP4_SUPPORTED_OPTIONS = 4,\r
-  MTFTP4_OPCODE_LEN        = 2,\r
-  MTFTP4_ERRCODE_LEN       = 2,\r
-  MTFTP4_BLKNO_LEN         = 2,\r
-  MTFTP4_DATA_HEAD_LEN     = 4,\r
-\r
-  MTFTP4_BLKSIZE_EXIST     = 0x01,\r
-  MTFTP4_TIMEOUT_EXIST     = 0x02,\r
-  MTFTP4_TSIZE_EXIST       = 0x04,\r
-  MTFTP4_MCAST_EXIST       = 0x08\r
-} MTFTP4_OPTION_CONST_VALUE;\r
+#define MTFTP4_BLKSIZE_EXIST      0x01\r
+#define MTFTP4_TIMEOUT_EXIST      0x02\r
+#define MTFTP4_TSIZE_EXIST        0x04\r
+#define MTFTP4_MCAST_EXIST        0x08\r
 \r
 typedef struct {\r
   UINT16                    BlkSize;\r
index 5fd0a4f..37de65a 100644 (file)
@@ -135,13 +135,15 @@ extern EFI_COMPONENT_NAME2_PROTOCOL   gSimpleNetworkComponentName2;
 //\r
 //  Virtual to physical mapping for all UNDI 3.0s.\r
 //\r
-typedef struct _V2P {\r
-  struct _V2P           *Next;\r
+typedef struct _V2P V2P;\r
+\r
+struct _V2P {\r
+  V2P                   *Next;\r
   VOID                  *VirtualAddress;\r
   UINTN                 BufferSize;\r
   EFI_PHYSICAL_ADDRESS  PhysicalAddress;\r
   VOID                  *Unmap;\r
-} V2P;\r
+};\r
 \r
 /**\r
   This routine maps the given CPU address to a Device address. It creates a\r
index 243cb68..dad64ae 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Implementation of the Socket.\r
 \r
-Copyright (c) 2005 - 2006, Intel Corporation<BR>\r
+Copyright (c) 2005 - 2009, 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
@@ -215,7 +215,7 @@ SockProcessRcvToken (
 \r
   ASSERT (Sock != NULL);\r
 \r
-  ASSERT (SOCK_STREAM == Sock->Type);\r
+  ASSERT (SockStream == Sock->Type);\r
 \r
   RxData = RcvToken->Packet.RxData;\r
 \r
@@ -481,7 +481,7 @@ SockProcessSndToken (
   EFI_TCP4_TRANSMIT_DATA  *TxData;\r
   EFI_STATUS              Status;\r
 \r
-  ASSERT ((Sock != NULL) && (SOCK_STREAM == Sock->Type));\r
+  ASSERT ((Sock != NULL) && (SockStream == Sock->Type));\r
 \r
   FreeSpace = SockGetFreeSpace (Sock, SOCK_SND_BUF);\r
 \r
@@ -557,7 +557,7 @@ SockCreate (
   EFI_STATUS  Status;\r
 \r
   ASSERT ((SockInitData != NULL) && (SockInitData->ProtoHandler != NULL));\r
-  ASSERT (SockInitData->Type == SOCK_STREAM);\r
+  ASSERT (SockInitData->Type == SockStream);\r
   ASSERT ((SockInitData->ProtoData != NULL) && (SockInitData->DataSize <= PROTO_RESERVED_LEN));\r
 \r
   Parent = SockInitData->Parent;\r
@@ -720,7 +720,7 @@ SockDestroy (
   EFI_GUID    *ProtocolGuid;\r
   EFI_STATUS  Status;\r
 \r
-  ASSERT (SOCK_STREAM == Sock->Type);\r
+  ASSERT (SockStream == Sock->Type);\r
 \r
   if (Sock->DestroyCallback != NULL) {\r
     Sock->DestroyCallback (Sock, Sock->Context);\r
@@ -873,13 +873,13 @@ SockConnFlush (
   Set the state of the socket.\r
 \r
   @param  Sock                  Pointer to the socket.\r
-  @param  State                 The new state to be set.\r
+  @param  State                 The new socket state to be set.\r
 \r
 **/\r
 VOID\r
 SockSetState (\r
   IN OUT SOCKET     *Sock,\r
-  IN     SOCK_STATE State\r
+  IN     UINT8      State\r
   )\r
 {\r
   Sock->State = State;\r
@@ -1070,7 +1070,7 @@ SockGetDataToSend (
   IN UINT8       *Dest\r
   )\r
 {\r
-  ASSERT ((Sock != NULL) && SOCK_STREAM == Sock->Type);\r
+  ASSERT ((Sock != NULL) && SockStream == Sock->Type);\r
 \r
   return NetbufQueCopy (\r
           Sock->SndBuffer.DataQueue,\r
index 1722742..017d6e4 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Interface function of the Socket.\r
 \r
-Copyright (c) 2005 - 2006, Intel Corporation<BR>\r
+Copyright (c) 2005 - 2009, 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
@@ -397,7 +397,7 @@ SockAccept (
   SOCKET                *Socket;\r
   EFI_EVENT             Event;\r
 \r
-  ASSERT (SOCK_STREAM == Sock->Type);\r
+  ASSERT (SockStream == Sock->Type);\r
 \r
   Status = EfiAcquireLockOrFail (&(Sock->Lock));\r
   if (EFI_ERROR (Status)) {\r
@@ -510,7 +510,7 @@ SockSend (
   SOCK_TOKEN              *SockToken;\r
   UINT32                  DataLen;\r
 \r
-  ASSERT (SOCK_STREAM == Sock->Type);\r
+  ASSERT (SockStream == Sock->Type);\r
 \r
   Status = EfiAcquireLockOrFail (&(Sock->Lock));\r
   if (EFI_ERROR (Status)) {\r
@@ -633,7 +633,7 @@ SockRcv (
   EFI_STATUS    Status;\r
   EFI_EVENT     Event;\r
 \r
-  ASSERT (SOCK_STREAM == Sock->Type);\r
+  ASSERT (SockStream == Sock->Type);\r
 \r
   Status = EfiAcquireLockOrFail (&(Sock->Lock));\r
   if (EFI_ERROR (Status)) {\r
@@ -733,7 +733,7 @@ SockFlush (
 {\r
   EFI_STATUS  Status;\r
 \r
-  ASSERT (SOCK_STREAM == Sock->Type);\r
+  ASSERT (SockStream == Sock->Type);\r
 \r
   Status = EfiAcquireLockOrFail (&(Sock->Lock));\r
   if (EFI_ERROR (Status)) {\r
@@ -798,7 +798,7 @@ SockClose (
   EFI_STATUS  Status;\r
   EFI_EVENT   Event;\r
 \r
-  ASSERT (SOCK_STREAM == Sock->Type);\r
+  ASSERT (SockStream == Sock->Type);\r
 \r
   Status = EfiAcquireLockOrFail (&(Sock->Lock));\r
   if (EFI_ERROR (Status)) {\r
index a5576a5..e98fb62 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Socket header file.\r
 \r
-Copyright (c) 2005 - 2006, Intel Corporation<BR>\r
+Copyright (c) 2005 - 2009, 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
@@ -68,23 +68,19 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 ///\r
 /// Socket state\r
 ///\r
-typedef enum {\r
-  SO_CLOSED       = 0,\r
-  SO_LISTENING,\r
-  SO_CONNECTING,\r
-  SO_CONNECTED,\r
-  SO_DISCONNECTING\r
-} SOCK_STATE;\r
+#define SO_CLOSED        0\r
+#define SO_LISTENING     1\r
+#define SO_CONNECTING    2\r
+#define SO_CONNECTED     3\r
+#define SO_DISCONNECTING 4\r
 \r
 ///\r
 /// Socket configure state\r
 ///\r
-typedef enum {\r
-  SO_UNCONFIGURED       = 0,\r
-  SO_CONFIGURED_ACTIVE,\r
-  SO_CONFIGURED_PASSIVE,\r
-  SO_NO_MAPPING\r
-} SOCK_CONFIGURE_STATE;\r
+#define SO_UNCONFIGURED        0\r
+#define SO_CONFIGURED_ACTIVE   1\r
+#define SO_CONFIGURED_PASSIVE  2\r
+#define SO_NO_MAPPING          3\r
 \r
 /**\r
   Set socket SO_NO_MORE_DATA flag.\r
@@ -331,44 +327,44 @@ typedef struct _SOCK_COMPLETION_TOKEN {
   EFI_STATUS  Status;           ///< The status to be issued\r
 } SOCK_COMPLETION_TOKEN;\r
 \r
+typedef union {\r
+  VOID  *RxData;\r
+  VOID  *TxData;\r
+} SOCK_IO_DATA;\r
+\r
 ///\r
 /// The application token with data packet\r
 ///\r
 typedef struct _SOCK_IO_TOKEN {\r
   SOCK_COMPLETION_TOKEN Token;\r
-  union {\r
-    VOID  *RxData;\r
-    VOID  *TxData;\r
-  } Packet;\r
+  SOCK_IO_DATA          Packet;\r
 } SOCK_IO_TOKEN;\r
 \r
 ///\r
 ///  The request issued from socket layer to protocol layer.  \r
 ///\r
-typedef enum {\r
-  SOCK_ATTACH,    ///< Attach current socket to a new PCB\r
-  SOCK_DETACH,    ///< Detach current socket from the PCB\r
-  SOCK_CONFIGURE, ///< Configure attached PCB\r
-  SOCK_FLUSH,     ///< Flush attached PCB\r
-  SOCK_SND,       ///< Need protocol to send something\r
-  SOCK_SNDPUSH,   ///< Need protocol to send pushed data\r
-  SOCK_SNDURG,    ///< Need protocol to send urgent data\r
-  SOCK_CONSUMED,  ///< Application has retrieved data from socket\r
-  SOCK_CONNECT,   ///< Need to connect to a peer\r
-  SOCK_CLOSE,     ///< Need to close the protocol process\r
-  SOCK_ABORT,     ///< Need to reset the protocol process\r
-  SOCK_POLL,      ///< Need to poll to the protocol layer\r
-  SOCK_ROUTE,     ///< Need to add a route information\r
-  SOCK_MODE,      ///< Need to get the mode data of the protocol\r
-  SOCK_GROUP      ///< Need to join a mcast group\r
-} SOCK_REQUEST;\r
+#define SOCK_ATTACH     0    ///< Attach current socket to a new PCB\r
+#define SOCK_DETACH     1    ///< Detach current socket from the PCB\r
+#define SOCK_CONFIGURE  2    ///< Configure attached PCB\r
+#define SOCK_FLUSH      3    ///< Flush attached PCB\r
+#define SOCK_SND        4    ///< Need protocol to send something\r
+#define SOCK_SNDPUSH    5    ///< Need protocol to send pushed data\r
+#define SOCK_SNDURG     6    ///< Need protocol to send urgent data\r
+#define SOCK_CONSUMED   7    ///< Application has retrieved data from socket\r
+#define SOCK_CONNECT    8    ///< Need to connect to a peer\r
+#define SOCK_CLOSE      9    ///< Need to close the protocol process\r
+#define SOCK_ABORT      10   ///< Need to reset the protocol process\r
+#define SOCK_POLL       11   ///< Need to poll to the protocol layer\r
+#define SOCK_ROUTE      12   ///< Need to add a route information\r
+#define SOCK_MODE       13   ///< Need to get the mode data of the protocol\r
+#define SOCK_GROUP      14   ///< Need to join a mcast group\r
 \r
 ///\r
 ///  The socket type.\r
 ///\r
 typedef enum {\r
-  SOCK_DGRAM, ///< This socket providing datagram service\r
-  SOCK_STREAM ///< This socket providing stream service\r
+  SockDgram, ///< This socket providing datagram service\r
+  SockStream ///< This socket providing stream service\r
 } SOCK_TYPE;\r
 \r
 ///\r
@@ -396,7 +392,7 @@ typedef
 EFI_STATUS\r
 (*SOCK_PROTO_HANDLER) (\r
   IN SOCKET       *Socket,\r
-  IN SOCK_REQUEST Request,\r
+  IN UINT8        Request,\r
   IN VOID         *RequestData\r
   );\r
   \r
@@ -413,13 +409,13 @@ EFI_STATUS
   Set the state of the socket.\r
 \r
   @param  Sock                  Pointer to the socket.\r
-  @param  State                 The new state to be set.\r
+  @param  State                 The new socket state to be set.\r
 \r
 **/\r
 VOID\r
 SockSetState (\r
   IN OUT SOCKET     *Sock,\r
-  IN     SOCK_STATE State\r
+  IN     UINT8      State\r
   );\r
 \r
 /**\r
@@ -592,7 +588,7 @@ VOID
 ///\r
 typedef struct _SOCK_INIT_DATA {\r
   SOCK_TYPE   Type;\r
-  SOCK_STATE  State;\r
+  UINT8       State;\r
 \r
   SOCKET      *Parent;        ///< The parent of this socket\r
   UINT32      BackLog;        ///< The connection limit for listening socket\r
@@ -641,9 +637,9 @@ struct _SOCKET {
   EFI_DEVICE_PATH_PROTOCOL  *ParentDevicePath;\r
   EFI_DEVICE_PATH_PROTOCOL  *DevicePath;\r
   LIST_ENTRY                Link;  \r
-  SOCK_CONFIGURE_STATE  ConfigureState;\r
+  UINT8                 ConfigureState;\r
   SOCK_TYPE             Type;\r
-  SOCK_STATE            State;\r
+  UINT8                 State;\r
   UINT16                Flag;\r
   EFI_LOCK              Lock;       ///< The lock of socket\r
   SOCK_BUFFER           SndBuffer;  ///< Send buffer of application's data\r
index a6acd26..fb224f4 100644 (file)
@@ -592,7 +592,7 @@ OnExit:
 EFI_STATUS\r
 Tcp4Dispatcher (\r
   IN SOCKET                  *Sock,\r
-  IN SOCK_REQUEST            Request,\r
+  IN UINT8                   Request,\r
   IN VOID                    *Data    OPTIONAL\r
   )\r
 {\r
index cffd53e..f48eb8c 100644 (file)
@@ -38,8 +38,8 @@ EFI_TCP4_PROTOCOL mTcp4ProtocolTemplate = {
 };\r
 \r
 SOCK_INIT_DATA mTcp4DefaultSockData = {\r
-  SOCK_STREAM,\r
-  (SOCK_STATE) 0,\r
+  SockStream,\r
+  0,\r
   NULL,\r
   TCP_BACKLOG,\r
   TCP_SND_BUF_SIZE,\r
index f430437..c744870 100644 (file)
@@ -122,7 +122,7 @@ TcpSendIpPacket (
 EFI_STATUS\r
 Tcp4Dispatcher (\r
   IN SOCKET                  *Sock,\r
-  IN SOCK_REQUEST            Request,\r
+  IN UINT8                   Request,\r
   IN VOID                    *Data    OPTIONAL\r
   );\r
 \r
index 25ca210..8339189 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Implementation of TCP4 protocol services.\r
 \r
-Copyright (c) 2005 - 2006, Intel Corporation<BR>\r
+Copyright (c) 2005 - 2009, 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
@@ -170,7 +170,7 @@ Tcp4Configure (
   if (NULL != TcpConfigData) {\r
 \r
     CopyMem (&Ip, &TcpConfigData->AccessPoint.RemoteAddress, sizeof (IP4_ADDR));\r
-    if ((Ip != 0) && !Ip4IsUnicast (NTOHL (Ip), 0)) {\r
+    if ((Ip != 0) && !NetIp4IsUnicast (NTOHL (Ip), 0)) {\r
       return EFI_INVALID_PARAMETER;\r
     }\r
 \r
@@ -183,7 +183,7 @@ Tcp4Configure (
 \r
       CopyMem (&Ip, &TcpConfigData->AccessPoint.StationAddress, sizeof (IP4_ADDR));\r
       CopyMem (&SubnetMask, &TcpConfigData->AccessPoint.SubnetMask, sizeof (IP4_ADDR));\r
-      if (!Ip4IsUnicast (NTOHL (Ip), 0) || !IP4_IS_VALID_NETMASK (NTOHL (SubnetMask))) {\r
+      if (!NetIp4IsUnicast (NTOHL (Ip), 0) || !IP4_IS_VALID_NETMASK (NTOHL (SubnetMask))) {\r
         return EFI_INVALID_PARAMETER;\r
       }\r
     }\r
index 763789e..af44042 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   TCP4 protocol services header file.\r
 \r
-Copyright (c) 2005 - 2006, Intel Corporation<BR>\r
+Copyright (c) 2005 - 2009, 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
@@ -50,7 +50,7 @@ extern CHAR16  *mTcpStateName[];
 EFI_STATUS\r
 Tcp4Dispatcher (\r
   IN SOCKET                  *Sock,\r
-  IN SOCK_REQUEST            Request,\r
+  IN UINT8                   Request,\r
   IN VOID                    *Data    OPTIONAL\r
   );\r
   \r
index 243def8..e7da405 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Tcp option's routine header file.\r
     \r
-Copyright (c) 2005 - 2006, Intel Corporation<BR>\r
+Copyright (c) 2005 - 2009, 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
@@ -27,47 +27,44 @@ typedef struct _TCP_OPTION {
   UINT32  TSEcr;    ///< The TSEcr field in a timestamp option\r
 } TCP_OPTION;\r
 \r
-typedef enum {\r
-\r
-  //\r
-  // supported TCP option type and their length\r
-  //\r
-  TCP_OPTION_EOP            = 0,  ///< End Of oPtion\r
-  TCP_OPTION_NOP            = 1,  ///< No-Option.\r
-  TCP_OPTION_MSS            = 2,  ///< Maximum Segment Size\r
-  TCP_OPTION_WS             = 3,  ///< Window scale\r
-  TCP_OPTION_TS             = 8,  ///< Timestamp\r
-  TCP_OPTION_MSS_LEN        = 4,  ///< Length of MSS option\r
-  TCP_OPTION_WS_LEN         = 3,  ///< Length of window scale option\r
-  TCP_OPTION_TS_LEN         = 10, ///< Length of timestamp option\r
-  TCP_OPTION_WS_ALIGNED_LEN = 4,  ///< Length of window scale option, aligned\r
-  TCP_OPTION_TS_ALIGNED_LEN = 12, ///< Length of timestamp option, aligned\r
-\r
-  //\r
-  // recommend format of timestamp window scale\r
-  // option for fast process.\r
-  //\r
-  TCP_OPTION_TS_FAST = ((TCP_OPTION_NOP << 24) |\r
-                        (TCP_OPTION_NOP << 16) |\r
-                        (TCP_OPTION_TS << 8) |\r
-                        TCP_OPTION_TS_LEN),\r
-\r
-  TCP_OPTION_WS_FAST = ((TCP_OPTION_NOP << 24) |\r
-                        (TCP_OPTION_WS << 16) |\r
-                        (TCP_OPTION_WS_LEN << 8)),\r
-\r
-  TCP_OPTION_MSS_FAST = ((TCP_OPTION_MSS << 24) |\r
-                         (TCP_OPTION_MSS_LEN << 16)),\r
-\r
-  //\r
-  // Other misc definations\r
-  //\r
-  TCP_OPTION_RCVD_MSS       = 0x01,\r
-  TCP_OPTION_RCVD_WS        = 0x02,\r
-  TCP_OPTION_RCVD_TS        = 0x04,\r
-  TCP_OPTION_MAX_WS         = 14,     ///< Maxium window scale value\r
-  TCP_OPTION_MAX_WIN        = 0xffff  ///< Max window size in TCP header\r
-} TCP_OPTION_TYPE;\r
+//\r
+// supported TCP option type and their length\r
+//\r
+#define TCP_OPTION_EOP             0  ///< End Of oPtion\r
+#define TCP_OPTION_NOP             1  ///< No-Option.\r
+#define TCP_OPTION_MSS             2  ///< Maximum Segment Size\r
+#define TCP_OPTION_WS              3  ///< Window scale\r
+#define TCP_OPTION_TS              8  ///< Timestamp\r
+#define TCP_OPTION_MSS_LEN         4  ///< Length of MSS option\r
+#define TCP_OPTION_WS_LEN          3  ///< Length of window scale option\r
+#define TCP_OPTION_TS_LEN          10 ///< Length of timestamp option\r
+#define TCP_OPTION_WS_ALIGNED_LEN  4  ///< Length of window scale option, aligned\r
+#define TCP_OPTION_TS_ALIGNED_LEN  12 ///< Length of timestamp option, aligned\r
+\r
+//\r
+// recommend format of timestamp window scale\r
+// option for fast process.\r
+//\r
+#define TCP_OPTION_TS_FAST ((TCP_OPTION_NOP << 24) | \\r
+                            (TCP_OPTION_NOP << 16) | \\r
+                            (TCP_OPTION_TS << 8)   | \\r
+                            (TCP_OPTION_TS_LEN))\r
+\r
+#define TCP_OPTION_WS_FAST   ((TCP_OPTION_NOP << 24) | \\r
+                              (TCP_OPTION_WS << 16)  | \\r
+                              (TCP_OPTION_WS_LEN << 8))\r
+\r
+#define TCP_OPTION_MSS_FAST  ((TCP_OPTION_MSS << 24) | (TCP_OPTION_MSS_LEN << 16))\r
+\r
+//\r
+// Other misc definations\r
+//\r
+#define TCP_OPTION_RCVD_MSS        0x01\r
+#define TCP_OPTION_RCVD_WS         0x02\r
+#define TCP_OPTION_RCVD_TS         0x04\r
+#define TCP_OPTION_MAX_WS          14      ///< Maxium window scale value\r
+#define TCP_OPTION_MAX_WIN         0xffff  ///< Max window size in TCP header\r
+\r
 \r
 /**\r
   Compute the window scale value according to the given buffer size.\r
index 78d2eb3..da88bff 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Tcp Protocol header file.\r
 \r
-Copyright (c) 2005 - 2006, Intel Corporation<BR>\r
+Copyright (c) 2005 - 2009, 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
@@ -27,122 +27,116 @@ typedef struct _TCP_CB  TCP_CB;
 /// Tcp states, Don't change their order, it is used as\r
 /// index to mTcpOutFlag and other macros\r
 ///\r
-typedef enum {\r
-  TCP_CLOSED      = 0,\r
-  TCP_LISTEN,\r
-  TCP_SYN_SENT,\r
-  TCP_SYN_RCVD,\r
-  TCP_ESTABLISHED,\r
-  TCP_FIN_WAIT_1,\r
-  TCP_FIN_WAIT_2,\r
-  TCP_CLOSING,\r
-  TCP_TIME_WAIT,\r
-  TCP_CLOSE_WAIT,\r
-  TCP_LAST_ACK\r
-} TCP_STATES;\r
+#define TCP_CLOSED       0\r
+#define TCP_LISTEN       1\r
+#define TCP_SYN_SENT     2\r
+#define TCP_SYN_RCVD     3\r
+#define TCP_ESTABLISHED  4\r
+#define TCP_FIN_WAIT_1   5\r
+#define TCP_FIN_WAIT_2   6\r
+#define TCP_CLOSING      7\r
+#define TCP_TIME_WAIT    8\r
+#define TCP_CLOSE_WAIT   9\r
+#define TCP_LAST_ACK     10\r
+\r
 \r
 ///\r
 /// Flags in the TCP header\r
 ///\r
-typedef enum {\r
-\r
-  TCP_FLG_FIN     = 0x01,\r
-  TCP_FLG_SYN     = 0x02,\r
-  TCP_FLG_RST     = 0x04,\r
-  TCP_FLG_PSH     = 0x08,\r
-  TCP_FLG_ACK     = 0x10,\r
-  TCP_FLG_URG     = 0x20,\r
-  \r
 //\r
-  // mask for all the flags\r
-  //\r
-  TCP_FLG_FLAG    = 0x3F  \r
-} TCP_HEADER_FLAG;\r
-\r
-typedef enum {\r
+#define TCP_FLG_FIN      0x01\r
+#define TCP_FLG_SYN      0x02\r
+#define TCP_FLG_RST      0x04\r
+#define TCP_FLG_PSH      0x08\r
+#define TCP_FLG_ACK      0x10\r
+#define TCP_FLG_URG      0x20\r
\r
+ //\r
+ // mask for all the flags\r
+ //\r
+#define TCP_FLG_FLAG     0x3F  \r
+\r
+\r
+#define TCP_CONNECT_REFUSED      (-1) ///< TCP error status\r
+#define TCP_CONNECT_RESET        (-2) ///< TCP error status\r
+#define TCP_CONNECT_CLOSED       (-3) ///< TCP error status\r
 \r
-  TCP_CONNECT_REFUSED     = -1, ///< TCP error status\r
-  TCP_CONNECT_RESET       = -2, ///< TCP error status\r
-  TCP_CONNECT_CLOSED      = -3, ///< TCP error status\r
-\r
-  //\r
-  // Current congestion status as suggested by RFC3782.\r
-  //\r
-  TCP_CONGEST_RECOVER     = 1,  ///< During the NewReno fast recovery\r
-  TCP_CONGEST_LOSS        = 2,  ///< Retxmit because of retxmit time out\r
-  TCP_CONGEST_OPEN        = 3,  ///< TCP is opening its congestion window\r
+//\r
+// Current congestion status as suggested by RFC3782.\r
+//\r
+#define TCP_CONGEST_RECOVER      1  ///< During the NewReno fast recovery\r
+#define TCP_CONGEST_LOSS         2  ///< Retxmit because of retxmit time out\r
+#define TCP_CONGEST_OPEN         3  ///< TCP is opening its congestion window\r
 \r
-  //\r
-  // TCP control flags\r
-  //\r
-  TCP_CTRL_NO_NAGLE       = 0x0001, ///< Disable Nagle algorithm\r
-  TCP_CTRL_NO_KEEPALIVE   = 0x0002, ///< Disable keepalive timer\r
-  TCP_CTRL_NO_WS          = 0x0004, ///< Disable window scale option\r
-  TCP_CTRL_RCVD_WS        = 0x0008, ///< Received a wnd scale option in syn\r
-  TCP_CTRL_NO_TS          = 0x0010, ///< Disable Timestamp option\r
-  TCP_CTRL_RCVD_TS        = 0x0020, ///< Received a Timestamp option in syn\r
-  TCP_CTRL_SND_TS         = 0x0040, ///< Send Timestamp option to remote\r
-  TCP_CTRL_SND_URG        = 0x0080, ///< In urgent send mode\r
-  TCP_CTRL_RCVD_URG       = 0x0100, ///< In urgent receive mode\r
-  TCP_CTRL_SND_PSH        = 0x0200, ///< In PUSH send mode\r
-  TCP_CTRL_FIN_SENT       = 0x0400, ///< FIN is sent\r
-  TCP_CTRL_FIN_ACKED      = 0x0800, ///< FIN is ACKed.\r
-  TCP_CTRL_TIMER_ON       = 0x1000, ///< At least one of the timer is on\r
-  TCP_CTRL_RTT_ON         = 0x2000, ///< The RTT measurement is on\r
-  TCP_CTRL_ACK_NOW        = 0x4000, ///< Send the ACK now, don't delay\r
+//\r
+// TCP control flags\r
+//\r
+#define TCP_CTRL_NO_NAGLE        0x0001 ///< Disable Nagle algorithm\r
+#define TCP_CTRL_NO_KEEPALIVE    0x0002 ///< Disable keepalive timer\r
+#define TCP_CTRL_NO_WS           0x0004 ///< Disable window scale option\r
+#define TCP_CTRL_RCVD_WS         0x0008 ///< Received a wnd scale option in syn\r
+#define TCP_CTRL_NO_TS           0x0010 ///< Disable Timestamp option\r
+#define TCP_CTRL_RCVD_TS         0x0020 ///< Received a Timestamp option in syn\r
+#define TCP_CTRL_SND_TS          0x0040 ///< Send Timestamp option to remote\r
+#define TCP_CTRL_SND_URG         0x0080 ///< In urgent send mode\r
+#define TCP_CTRL_RCVD_URG        0x0100 ///< In urgent receive mode\r
+#define TCP_CTRL_SND_PSH         0x0200 ///< In PUSH send mode\r
+#define TCP_CTRL_FIN_SENT        0x0400 ///< FIN is sent\r
+#define TCP_CTRL_FIN_ACKED       0x0800 ///< FIN is ACKed.\r
+#define TCP_CTRL_TIMER_ON        0x1000 ///< At least one of the timer is on\r
+#define TCP_CTRL_RTT_ON          0x2000 ///< The RTT measurement is on\r
+#define TCP_CTRL_ACK_NOW         0x4000 ///< Send the ACK now, don't delay\r
 \r
-  //\r
-  // Timer related values\r
-  //\r
-  TCP_TIMER_CONNECT       = 0,                  ///< Connection establishment timer\r
-  TCP_TIMER_REXMIT        = 1,                  ///< Retransmit timer\r
-  TCP_TIMER_PROBE         = 2,                  ///< Window probe timer\r
-  TCP_TIMER_KEEPALIVE     = 3,                  ///< Keepalive timer\r
-  TCP_TIMER_FINWAIT2      = 4,                  ///< FIN_WAIT_2 timer\r
-  TCP_TIMER_2MSL          = 5,                  ///< TIME_WAIT tiemr\r
-  TCP_TIMER_NUMBER        = 6,                  ///< The total number of TCP timer.\r
-  TCP_TICK                = 200,                ///< Every TCP tick is 200ms\r
-  TCP_TICK_HZ             = 5,                  ///< The frequence of TCP tick\r
-  TCP_RTT_SHIFT           = 3,                  ///< SRTT & RTTVAR scaled by 8\r
-  TCP_RTO_MIN             = TCP_TICK_HZ,        ///< The minium value of RTO\r
-  TCP_RTO_MAX             = (TCP_TICK_HZ * 60), ///< The maxium value of RTO\r
-  TCP_FOLD_RTT            = 4,                  ///< Timeout threshod to fold RTT\r
+//\r
+// Timer related values\r
+//\r
+#define TCP_TIMER_CONNECT        0                  ///< Connection establishment timer\r
+#define TCP_TIMER_REXMIT         1                  ///< Retransmit timer\r
+#define TCP_TIMER_PROBE          2                  ///< Window probe timer\r
+#define TCP_TIMER_KEEPALIVE      3                  ///< Keepalive timer\r
+#define TCP_TIMER_FINWAIT2       4                  ///< FIN_WAIT_2 timer\r
+#define TCP_TIMER_2MSL           5                  ///< TIME_WAIT tiemr\r
+#define TCP_TIMER_NUMBER         6                  ///< The total number of TCP timer.\r
+#define TCP_TICK                 200                ///< Every TCP tick is 200ms\r
+#define TCP_TICK_HZ              5                  ///< The frequence of TCP tick\r
+#define TCP_RTT_SHIFT            3                  ///< SRTT & RTTVAR scaled by 8\r
+#define TCP_RTO_MIN              TCP_TICK_HZ        ///< The minium value of RTO\r
+#define TCP_RTO_MAX              (TCP_TICK_HZ * 60) ///< The maxium value of RTO\r
+#define TCP_FOLD_RTT             4                  ///< Timeout threshod to fold RTT\r
 \r
-  //\r
-  // Default values for some timers\r
-  //\r
-  TCP_MAX_LOSS            = 12,                          ///< Default max times to retxmit\r
-  TCP_KEEPALIVE_IDLE_MIN  = (TCP_TICK_HZ * 60 * 60 * 2), ///< First keep alive\r
-  TCP_KEEPALIVE_PERIOD    = (TCP_TICK_HZ * 60),\r
-  TCP_MAX_KEEPALIVE       = 8,\r
-  TCP_FIN_WAIT2_TIME      = (2 * TCP_TICK_HZ),\r
-  TCP_TIME_WAIT_TIME      = (2 * TCP_TICK_HZ),\r
-  TCP_PAWS_24DAY          = (24 * 24 * 60 * 60 * TCP_TICK_HZ),\r
-  TCP_CONNECT_TIME        = (75 * TCP_TICK_HZ),\r
+//\r
+// Default values for some timers\r
+//\r
+#define TCP_MAX_LOSS             12                          ///< Default max times to retxmit\r
+#define TCP_KEEPALIVE_IDLE_MIN   (TCP_TICK_HZ * 60 * 60 * 2) ///< First keep alive\r
+#define TCP_KEEPALIVE_PERIOD     (TCP_TICK_HZ * 60)\r
+#define TCP_MAX_KEEPALIVE        8\r
+#define TCP_FIN_WAIT2_TIME       (2 * TCP_TICK_HZ)\r
+#define TCP_TIME_WAIT_TIME       (2 * TCP_TICK_HZ)\r
+#define TCP_PAWS_24DAY           (24 * 24 * 60 * 60 * TCP_TICK_HZ)\r
+#define TCP_CONNECT_TIME         (75 * TCP_TICK_HZ)\r
 \r
-  //\r
-  // The header space to be reserved before TCP data to accomodate :\r
-  // 60byte IP head + 60byte TCP head + link layer head\r
-  //\r
-  TCP_MAX_HEAD            = 192,\r
+//\r
+// The header space to be reserved before TCP data to accomodate :\r
+// 60byte IP head + 60byte TCP head + link layer head\r
+//\r
+#define TCP_MAX_HEAD             192\r
 \r
-  //\r
-  // Value ranges for some control option\r
-  //\r
-  TCP_RCV_BUF_SIZE        = (2 * 1024 * 1024),\r
-  TCP_RCV_BUF_SIZE_MIN    = (8 * 1024),\r
-  TCP_SND_BUF_SIZE        = (2 * 1024 * 1024),\r
-  TCP_SND_BUF_SIZE_MIN    = (8 * 1024),\r
-  TCP_BACKLOG             = 10,\r
-  TCP_BACKLOG_MIN         = 5,\r
-  TCP_MAX_LOSS_MIN        = 6,\r
-  TCP_CONNECT_TIME_MIN    = (60 * TCP_TICK_HZ),\r
-  TCP_MAX_KEEPALIVE_MIN   = 4,\r
-  TCP_KEEPALIVE_IDLE_MAX  = (TCP_TICK_HZ * 60 * 60 * 4),\r
-  TCP_KEEPALIVE_PERIOD_MIN= (TCP_TICK_HZ * 30),\r
-  TCP_FIN_WAIT2_TIME_MAX  = (4 * TCP_TICK_HZ),\r
-  TCP_TIME_WAIT_TIME_MAX  = (60 * TCP_TICK_HZ)\r
-} TCP_MISC_VALUES;\r
+//\r
+// Value ranges for some control option\r
+//\r
+#define TCP_RCV_BUF_SIZE         (2 * 1024 * 1024)\r
+#define TCP_RCV_BUF_SIZE_MIN     (8 * 1024)\r
+#define TCP_SND_BUF_SIZE         (2 * 1024 * 1024)\r
+#define TCP_SND_BUF_SIZE_MIN     (8 * 1024)\r
+#define TCP_BACKLOG              10\r
+#define TCP_BACKLOG_MIN          5\r
+#define TCP_MAX_LOSS_MIN         6\r
+#define TCP_CONNECT_TIME_MIN     (60 * TCP_TICK_HZ)\r
+#define TCP_MAX_KEEPALIVE_MIN    4\r
+#define TCP_KEEPALIVE_IDLE_MAX   (TCP_TICK_HZ * 60 * 60 * 4)\r
+#define TCP_KEEPALIVE_PERIOD_MIN (TCP_TICK_HZ * 30)\r
+#define TCP_FIN_WAIT2_TIME_MAX   (4 * TCP_TICK_HZ)\r
+#define TCP_TIME_WAIT_TIME_MAX   (60 * TCP_TICK_HZ)\r
 \r
 ///\r
 /// TCP segmentation data\r
index c923117..3c0e65f 100644 (file)
@@ -824,7 +824,7 @@ Udp4ValidateTxToken (
   if (TxData->GatewayAddress != NULL) {\r
     CopyMem (&GatewayAddress, TxData->GatewayAddress, sizeof (IP4_ADDR));\r
 \r
-    if (!Ip4IsUnicast (NTOHL (GatewayAddress), 0)) {\r
+    if (!NetIp4IsUnicast (NTOHL (GatewayAddress), 0)) {\r
       //\r
       // The specified GatewayAddress is not a unicast IPv4 address while it's not 0.\r
       //\r
@@ -839,7 +839,7 @@ Udp4ValidateTxToken (
 \r
     CopyMem (&SourceAddress, &UdpSessionData->SourceAddress, sizeof (IP4_ADDR));\r
 \r
-    if ((SourceAddress != 0) && !Ip4IsUnicast (HTONL (SourceAddress), 0)) {\r
+    if ((SourceAddress != 0) && !NetIp4IsUnicast (HTONL (SourceAddress), 0)) {\r
       //\r
       // Check whether SourceAddress is a valid IPv4 address in case it's not zero.\r
       // The configured station address is used if SourceAddress is zero.\r
index 582d6f6..5002f6f 100644 (file)
@@ -171,8 +171,8 @@ Udp4Configure (
 \r
     if (!UdpConfigData->UseDefaultAddress &&\r
       (!IP4_IS_VALID_NETMASK (SubnetMask) ||\r
-      !((StationAddress == 0) || Ip4IsUnicast (StationAddress, SubnetMask)) ||\r
-      !((RemoteAddress  == 0) || Ip4IsUnicast (RemoteAddress, 0)))) {\r
+      !((StationAddress == 0) || NetIp4IsUnicast (StationAddress, SubnetMask)) ||\r
+      !((RemoteAddress  == 0) || NetIp4IsUnicast (RemoteAddress, 0)))) {\r
       //\r
       // Don't use default address, and subnet mask is invalid or StationAddress is not\r
       // a valid unicast IPv4 address or RemoteAddress is not a valid unicast IPv4 address\r
index 103ae2f..829caa8 100644 (file)
@@ -15,115 +15,109 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 #ifndef __EFI_PXEBC_DHCP_H__\r
 #define __EFI_PXEBC_DHCP_H__\r
 \r
-typedef enum {\r
-  PXEBC_DHCP4_MAX_OPTION_NUM        = 16,\r
-  PXEBC_DHCP4_MAX_OPTION_SIZE       = 312,\r
-  PXEBC_DHCP4_MAX_PACKET_SIZE       = 1472,\r
-\r
-  PXEBC_DHCP4_S_PORT                = 67,\r
-  PXEBC_DHCP4_C_PORT                = 68,\r
-  PXEBC_BS_DOWNLOAD_PORT            = 69,\r
-  PXEBC_BS_DISCOVER_PORT            = 4011,\r
-\r
-  PXEBC_DHCP4_OPCODE_REQUEST        = 1,\r
-  PXEBC_DHCP4_OPCODE_REPLY          = 2,\r
-  PXEBC_DHCP4_MSG_TYPE_REQUEST      = 3,\r
-  PXEBC_DHCP4_MAGIC                 = 0x63538263, // network byte order\r
-  //\r
-  // Dhcp Options\r
-  //\r
-  PXEBC_DHCP4_TAG_PAD               = 0,    // Pad Option\r
-  PXEBC_DHCP4_TAG_EOP               = 255,  // End Option\r
-  PXEBC_DHCP4_TAG_NETMASK           = 1,    // Subnet Mask\r
-  PXEBC_DHCP4_TAG_TIME_OFFSET       = 2,    // Time Offset from UTC\r
-  PXEBC_DHCP4_TAG_ROUTER            = 3,    // Router option,\r
-  PXEBC_DHCP4_TAG_TIME_SERVER       = 4,    // Time Server\r
-  PXEBC_DHCP4_TAG_NAME_SERVER       = 5,    // Name Server\r
-  PXEBC_DHCP4_TAG_DNS_SERVER        = 6,    // Domain Name Server\r
-  PXEBC_DHCP4_TAG_HOSTNAME          = 12,   // Host Name\r
-  PXEBC_DHCP4_TAG_BOOTFILE_LEN      = 13,   // Boot File Size\r
-  PXEBC_DHCP4_TAG_DUMP              = 14,   // Merit Dump File\r
-  PXEBC_DHCP4_TAG_DOMAINNAME        = 15,   // Domain Name\r
-  PXEBC_DHCP4_TAG_ROOTPATH          = 17,   // Root path\r
-  PXEBC_DHCP4_TAG_EXTEND_PATH       = 18,   // Extensions Path\r
-  PXEBC_DHCP4_TAG_EMTU              = 22,   // Maximum Datagram Reassembly Size\r
-  PXEBC_DHCP4_TAG_TTL               = 23,   // Default IP Time-to-live\r
-  PXEBC_DHCP4_TAG_BROADCAST         = 28,   // Broadcast Address\r
-  PXEBC_DHCP4_TAG_NIS_DOMAIN        = 40,   // Network Information Service Domain\r
-  PXEBC_DHCP4_TAG_NIS_SERVER        = 41,   // Network Information Servers\r
-  PXEBC_DHCP4_TAG_NTP_SERVER        = 42,   // Network Time Protocol Servers\r
-  PXEBC_DHCP4_TAG_VENDOR            = 43,   // Vendor Specific Information\r
-  PXEBC_DHCP4_TAG_REQUEST_IP        = 50,   // Requested IP Address\r
-  PXEBC_DHCP4_TAG_LEASE             = 51,   // IP Address Lease Time\r
-  PXEBC_DHCP4_TAG_OVERLOAD          = 52,   // Option Overload\r
-  PXEBC_DHCP4_TAG_MSG_TYPE          = 53,   // DHCP Message Type\r
-  PXEBC_DHCP4_TAG_SERVER_ID         = 54,   // Server Identifier\r
-  PXEBC_DHCP4_TAG_PARA_LIST         = 55,   // Parameter Request List\r
-  PXEBC_DHCP4_TAG_MAXMSG            = 57,   // Maximum DHCP Message Size\r
-  PXEBC_DHCP4_TAG_T1                = 58,   // Renewal (T1) Time Value\r
-  PXEBC_DHCP4_TAG_T2                = 59,   // Rebinding (T2) Time Value\r
-  PXEBC_DHCP4_TAG_CLASS_ID          = 60,   // Vendor class identifier\r
-  PXEBC_DHCP4_TAG_CLIENT_ID         = 61,   // Client-identifier\r
-  PXEBC_DHCP4_TAG_TFTP              = 66,   // TFTP server name\r
-  PXEBC_DHCP4_TAG_BOOTFILE          = 67,   // Bootfile name\r
-  PXEBC_PXE_DHCP4_TAG_ARCH          = 93,\r
-  PXEBC_PXE_DHCP4_TAG_UNDI          = 94,\r
-  PXEBC_PXE_DHCP4_TAG_UUID          = 97,\r
-  //\r
-  // Sub-Options in Dhcp Vendor Option\r
-  //\r
-  PXEBC_VENDOR_TAG_MTFTP_IP         = 1,\r
-  PXEBC_VENDOR_TAG_MTFTP_CPORT      = 2,\r
-  PXEBC_VENDOR_TAG_MTFTP_SPORT      = 3,\r
-  PXEBC_VENDOR_TAG_MTFTP_TIMEOUT    = 4,\r
-  PXEBC_VENDOR_TAG_MTFTP_DELAY      = 5,\r
-  PXEBC_VENDOR_TAG_DISCOVER_CTRL    = 6,\r
-  PXEBC_VENDOR_TAG_DISCOVER_MCAST   = 7,\r
-  PXEBC_VENDOR_TAG_BOOT_SERVERS     = 8,\r
-  PXEBC_VENDOR_TAG_BOOT_MENU        = 9,\r
-  PXEBC_VENDOR_TAG_MENU_PROMPT      = 10,\r
-  PXEBC_VENDOR_TAG_MCAST_ALLOC      = 11,\r
-  PXEBC_VENDOR_TAG_CREDENTIAL_TYPES = 12,\r
-  PXEBC_VENDOR_TAG_BOOT_ITEM        = 71,\r
-\r
-  PXEBC_DHCP4_DISCOVER_INIT_TIMEOUT = 4,\r
-  PXEBC_DHCP4_DISCOVER_RETRIES      = 4,\r
-\r
-  PXEBC_MAX_MENU_NUM                = 24,\r
-  PXEBC_MAX_OFFER_NUM               = 16,\r
-\r
-  PXEBC_BOOT_REQUEST_TIMEOUT        = 1,\r
-  PXEBC_BOOT_REQUEST_RETRIES        = 4,\r
-\r
-  PXEBC_DHCP4_OVERLOAD_FILE         = 1,\r
-  PXEBC_DHCP4_OVERLOAD_SERVER_NAME  = 2\r
-} PXEBC_ENUM_TYPES;\r
+#define PXEBC_DHCP4_MAX_OPTION_NUM         16\r
+#define PXEBC_DHCP4_MAX_OPTION_SIZE        312\r
+#define PXEBC_DHCP4_MAX_PACKET_SIZE        1472\r
+\r
+#define PXEBC_DHCP4_S_PORT                 67\r
+#define PXEBC_DHCP4_C_PORT                 68\r
+#define PXEBC_BS_DOWNLOAD_PORT             69\r
+#define PXEBC_BS_DISCOVER_PORT             4011\r
+\r
+#define PXEBC_DHCP4_OPCODE_REQUEST         1\r
+#define PXEBC_DHCP4_OPCODE_REPLY           2\r
+#define PXEBC_DHCP4_MSG_TYPE_REQUEST       3\r
+#define PXEBC_DHCP4_MAGIC                  0x63538263 // network byte order\r
+//\r
+// Dhcp Options\r
+//\r
+#define PXEBC_DHCP4_TAG_PAD                0    // Pad Option\r
+#define PXEBC_DHCP4_TAG_EOP                255  // End Option\r
+#define PXEBC_DHCP4_TAG_NETMASK            1    // Subnet Mask\r
+#define PXEBC_DHCP4_TAG_TIME_OFFSET        2    // Time Offset from UTC\r
+#define PXEBC_DHCP4_TAG_ROUTER             3    // Router option,\r
+#define PXEBC_DHCP4_TAG_TIME_SERVER        4    // Time Server\r
+#define PXEBC_DHCP4_TAG_NAME_SERVER        5    // Name Server\r
+#define PXEBC_DHCP4_TAG_DNS_SERVER         6    // Domain Name Server\r
+#define PXEBC_DHCP4_TAG_HOSTNAME           12   // Host Name\r
+#define PXEBC_DHCP4_TAG_BOOTFILE_LEN       13   // Boot File Size\r
+#define PXEBC_DHCP4_TAG_DUMP               14   // Merit Dump File\r
+#define PXEBC_DHCP4_TAG_DOMAINNAME         15   // Domain Name\r
+#define PXEBC_DHCP4_TAG_ROOTPATH           17   // Root path\r
+#define PXEBC_DHCP4_TAG_EXTEND_PATH        18   // Extensions Path\r
+#define PXEBC_DHCP4_TAG_EMTU               22   // Maximum Datagram Reassembly Size\r
+#define PXEBC_DHCP4_TAG_TTL                23   // Default IP Time-to-live\r
+#define PXEBC_DHCP4_TAG_BROADCAST          28   // Broadcast Address\r
+#define PXEBC_DHCP4_TAG_NIS_DOMAIN         40   // Network Information Service Domain\r
+#define PXEBC_DHCP4_TAG_NIS_SERVER         41   // Network Information Servers\r
+#define PXEBC_DHCP4_TAG_NTP_SERVER         42   // Network Time Protocol Servers\r
+#define PXEBC_DHCP4_TAG_VENDOR             43   // Vendor Specific Information\r
+#define PXEBC_DHCP4_TAG_REQUEST_IP         50   // Requested IP Address\r
+#define PXEBC_DHCP4_TAG_LEASE              51   // IP Address Lease Time\r
+#define PXEBC_DHCP4_TAG_OVERLOAD           52   // Option Overload\r
+#define PXEBC_DHCP4_TAG_MSG_TYPE           53   // DHCP Message Type\r
+#define PXEBC_DHCP4_TAG_SERVER_ID          54   // Server Identifier\r
+#define PXEBC_DHCP4_TAG_PARA_LIST          55   // Parameter Request List\r
+#define PXEBC_DHCP4_TAG_MAXMSG             57   // Maximum DHCP Message Size\r
+#define PXEBC_DHCP4_TAG_T1                 58   // Renewal (T1) Time Value\r
+#define PXEBC_DHCP4_TAG_T2                 59   // Rebinding (T2) Time Value\r
+#define PXEBC_DHCP4_TAG_CLASS_ID           60   // Vendor class identifier\r
+#define PXEBC_DHCP4_TAG_CLIENT_ID          61   // Client-identifier\r
+#define PXEBC_DHCP4_TAG_TFTP               66   // TFTP server name\r
+#define PXEBC_DHCP4_TAG_BOOTFILE           67   // Bootfile name\r
+#define PXEBC_PXE_DHCP4_TAG_ARCH           93\r
+#define PXEBC_PXE_DHCP4_TAG_UNDI           94\r
+#define PXEBC_PXE_DHCP4_TAG_UUID           97\r
+//\r
+// Sub-Options in Dhcp Vendor Option\r
+//\r
+#define PXEBC_VENDOR_TAG_MTFTP_IP          1\r
+#define PXEBC_VENDOR_TAG_MTFTP_CPORT       2\r
+#define PXEBC_VENDOR_TAG_MTFTP_SPORT       3\r
+#define PXEBC_VENDOR_TAG_MTFTP_TIMEOUT     4\r
+#define PXEBC_VENDOR_TAG_MTFTP_DELAY       5\r
+#define PXEBC_VENDOR_TAG_DISCOVER_CTRL     6\r
+#define PXEBC_VENDOR_TAG_DISCOVER_MCAST    7\r
+#define PXEBC_VENDOR_TAG_BOOT_SERVERS      8\r
+#define PXEBC_VENDOR_TAG_BOOT_MENU         9\r
+#define PXEBC_VENDOR_TAG_MENU_PROMPT       10\r
+#define PXEBC_VENDOR_TAG_MCAST_ALLOC       11\r
+#define PXEBC_VENDOR_TAG_CREDENTIAL_TYPES  12\r
+#define PXEBC_VENDOR_TAG_BOOT_ITEM         71\r
+\r
+#define PXEBC_DHCP4_DISCOVER_INIT_TIMEOUT  4\r
+#define PXEBC_DHCP4_DISCOVER_RETRIES       4\r
+\r
+#define PXEBC_MAX_MENU_NUM                 24\r
+#define PXEBC_MAX_OFFER_NUM                16\r
+\r
+#define PXEBC_BOOT_REQUEST_TIMEOUT         1\r
+#define PXEBC_BOOT_REQUEST_RETRIES         4\r
+\r
+#define PXEBC_DHCP4_OVERLOAD_FILE          1\r
+#define PXEBC_DHCP4_OVERLOAD_SERVER_NAME   2\r
 \r
 //\r
 // The array index of the DHCP4 option tag interested\r
 //\r
-typedef enum {\r
-  PXEBC_DHCP4_TAG_INDEX_BOOTFILE_LEN,\r
-  PXEBC_DHCP4_TAG_INDEX_VENDOR,\r
-  PXEBC_DHCP4_TAG_INDEX_OVERLOAD,\r
-  PXEBC_DHCP4_TAG_INDEX_MSG_TYPE,\r
-  PXEBC_DHCP4_TAG_INDEX_SERVER_ID,\r
-  PXEBC_DHCP4_TAG_INDEX_CLASS_ID,\r
-  PXEBC_DHCP4_TAG_INDEX_BOOTFILE,\r
-  PXEBC_DHCP4_TAG_INDEX_MAX\r
-} PXEBC_DHCP4_TAG_INDEX_ENUM_TYPES;\r
+#define PXEBC_DHCP4_TAG_INDEX_BOOTFILE_LEN 0\r
+#define PXEBC_DHCP4_TAG_INDEX_VENDOR       1\r
+#define PXEBC_DHCP4_TAG_INDEX_OVERLOAD     2\r
+#define PXEBC_DHCP4_TAG_INDEX_MSG_TYPE     3\r
+#define PXEBC_DHCP4_TAG_INDEX_SERVER_ID    4\r
+#define PXEBC_DHCP4_TAG_INDEX_CLASS_ID     5\r
+#define PXEBC_DHCP4_TAG_INDEX_BOOTFILE     6\r
+#define PXEBC_DHCP4_TAG_INDEX_MAX          7\r
 \r
 //\r
 // The type of DHCP OFFER, arranged by priority, PXE10 has the highest priority.\r
 //\r
-typedef enum {\r
-  DHCP4_PACKET_TYPE_PXE10,\r
-  DHCP4_PACKET_TYPE_WFM11A,\r
-  DHCP4_PACKET_TYPE_BINL,\r
-  DHCP4_PACKET_TYPE_DHCP_ONLY,\r
-  DHCP4_PACKET_TYPE_MAX,\r
-  DHCP4_PACKET_TYPE_BOOTP           = DHCP4_PACKET_TYPE_MAX\r
-} DHCP4_PACKET_TYPE_ENUM_TYPES;\r
+#define DHCP4_PACKET_TYPE_PXE10            0\r
+#define DHCP4_PACKET_TYPE_WFM11A           1\r
+#define DHCP4_PACKET_TYPE_BINL             2\r
+#define DHCP4_PACKET_TYPE_DHCP_ONLY        3\r
+#define DHCP4_PACKET_TYPE_MAX              4\r
+#define DHCP4_PACKET_TYPE_BOOTP            DHCP4_PACKET_TYPE_MAX\r
 \r
 #define BIT(x)  (1 << x)\r
 #define CTRL(x) (0x1F & (x))\r
@@ -274,13 +268,14 @@ typedef struct {
 \r
 #define PXEBC_CACHED_DHCP4_PACKET_MAX_SIZE  (OFFSET_OF (EFI_DHCP4_PACKET, Dhcp4) + PXEBC_DHCP4_MAX_PACKET_SIZE)\r
 \r
-typedef struct {\r
-  union {\r
-    EFI_DHCP4_PACKET  Offer;\r
-    EFI_DHCP4_PACKET  Ack;\r
-    UINT8             Buffer[PXEBC_CACHED_DHCP4_PACKET_MAX_SIZE];\r
-  } Packet;\r
+typedef union {\r
+  EFI_DHCP4_PACKET  Offer;\r
+  EFI_DHCP4_PACKET  Ack;\r
+  UINT8             Buffer[PXEBC_CACHED_DHCP4_PACKET_MAX_SIZE];\r
+} PXEBC_DHCP4_PACKET;\r
 \r
+typedef struct {\r
+  PXEBC_DHCP4_PACKET      Packet;\r
   BOOLEAN                 IsPxeOffer;\r
   UINT8                   OfferType;\r
   EFI_DHCP4_PACKET_OPTION *Dhcp4Option[PXEBC_DHCP4_TAG_INDEX_MAX];\r
@@ -438,7 +433,7 @@ PxeBcBuildDhcpOptions (
 \r
 \r
 /**\r
-  Create the boot options\r
+  Create the boot options.\r
 \r
   @param  OptList    Pointer to the list of the options\r
   @param  Type       the type of option\r
index 659f638..e04ae3a 100644 (file)
@@ -176,7 +176,7 @@ IcmpErrorListenHandlerDpc (
   }\r
 \r
   if (EFI_IP4 (RxData->Header->SourceAddress) != 0 &&\r
-      !Ip4IsUnicast (EFI_NTOHL (RxData->Header->SourceAddress), 0)) {\r
+      !NetIp4IsUnicast (EFI_NTOHL (RxData->Header->SourceAddress), 0)) {\r
     //\r
     // The source address is not zero and it's not a unicast IP address, discard it.\r
     //\r
@@ -1044,11 +1044,11 @@ EfiPxeBcMtftp (
   EFI_PXE_BASE_CODE_MODE  *Mode;\r
   EFI_MAC_ADDRESS         TempMacAddr;\r
 \r
-  if ((This == NULL)                                                       ||\r
-      (Filename == NULL)                                                   ||\r
-      (BufferSize == NULL)                                                 ||\r
-      ((ServerIp == NULL) || !Ip4IsUnicast (NTOHL (ServerIp->Addr[0]), 0)) ||\r
-      ((BufferPtr == NULL) && DontUseBuffer)                               ||\r
+  if ((This == NULL)                                                          ||\r
+      (Filename == NULL)                                                      ||\r
+      (BufferSize == NULL)                                                    ||\r
+      ((ServerIp == NULL) || !NetIp4IsUnicast (NTOHL (ServerIp->Addr[0]), 0)) ||\r
+      ((BufferPtr == NULL) && DontUseBuffer)                                  ||\r
       ((BlockSize != NULL) && (*BlockSize < 512))) {\r
 \r
     return EFI_INVALID_PARAMETER;\r
@@ -1243,7 +1243,7 @@ EfiPxeBcUdpWrite (
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
-  if ((GatewayIp != NULL) && !Ip4IsUnicast (NTOHL (GatewayIp->Addr[0]), 0)) {\r
+  if ((GatewayIp != NULL) && !NetIp4IsUnicast (NTOHL (GatewayIp->Addr[0]), 0)) {\r
     //\r
     // Gateway is provided but it's not a unicast IP address.\r
     //\r
@@ -1783,7 +1783,7 @@ EfiPxeBcSetIpFilter (
       DEBUG ((EFI_D_ERROR, "There is broadcast address in NewFilter.\n"));\r
       return EFI_INVALID_PARAMETER;\r
     }\r
-    if (Ip4IsUnicast (EFI_IP4 (NewFilter->IpList[Index].v4), 0) &&\r
+    if (NetIp4IsUnicast (EFI_IP4 (NewFilter->IpList[Index].v4), 0) &&\r
         (NewFilter->Filters & EFI_PXE_BASE_CODE_IP_FILTER_STATION_IP)\r
        ) {\r
       //\r
@@ -2110,7 +2110,7 @@ EfiPxeBcSetStationIP (
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
-  if (NewStationIp != NULL && !Ip4IsUnicast (NTOHL (NewStationIp->Addr[0]), 0)) {\r
+  if (NewStationIp != NULL && !NetIp4IsUnicast (NTOHL (NewStationIp->Addr[0]), 0)) {\r
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
index 2ef0450..4d795a2 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Mtftp routines for PxeBc.\r
     \r
-Copyright (c) 2007, Intel Corporation.<BR>\r
+Copyright (c) 2007 - 2009, 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
@@ -15,13 +15,11 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 #ifndef __EFI_PXEBC_MTFTP_H__\r
 #define __EFI_PXEBC_MTFTP_H__\r
 \r
-typedef enum {\r
-  PXE_MTFTP_OPTION_BLKSIZE_INDEX,\r
-  PXE_MTFTP_OPTION_TIMEOUT_INDEX,\r
-  PXE_MTFTP_OPTION_TSIZE_INDEX,\r
-  PXE_MTFTP_OPTION_MULTICAST_INDEX,\r
-  PXE_MTFTP_OPTION_MAXIMUM_INDEX\r
-} PXE_MTFTP_OPTION_ENUM_TYPES;\r
+#define PXE_MTFTP_OPTION_BLKSIZE_INDEX   0\r
+#define PXE_MTFTP_OPTION_TIMEOUT_INDEX   1\r
+#define PXE_MTFTP_OPTION_TSIZE_INDEX     2\r
+#define PXE_MTFTP_OPTION_MULTICAST_INDEX 3\r
+#define PXE_MTFTP_OPTION_MAXIMUM_INDEX   4\r
 \r
 \r
 /**\r