]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Adopt new IPv4/IPv6 device path for network modules.
authorniruiyu <niruiyu@6f19259b-4bc3-4df7-8a09-765794883524>
Wed, 26 Oct 2011 09:29:46 +0000 (09:29 +0000)
committerniruiyu <niruiyu@6f19259b-4bc3-4df7-8a09-765794883524>
Wed, 26 Oct 2011 09:29:46 +0000 (09:29 +0000)
Signed-off-by: tye
Reviewed-by: niruiyu
Adopt SasEx and new IPv6 device path for DevicePathDxe driver.
Signed-off-by: niruiyu
Reviewed-by: erictian
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12574 6f19259b-4bc3-4df7-8a09-765794883524

13 files changed:
MdeModulePkg/Include/Library/NetLib.h
MdeModulePkg/Library/DxeNetLib/DxeNetLib.c
MdeModulePkg/Universal/DevicePathDxe/DevicePathFromText.c
MdeModulePkg/Universal/DevicePathDxe/DevicePathToText.c
MdeModulePkg/Universal/Network/IScsiDxe/IScsiCHAP.h
MdeModulePkg/Universal/Network/IScsiDxe/IScsiConfigNVDataStruc.h
MdeModulePkg/Universal/Network/IScsiDxe/IScsiMisc.c
MdeModulePkg/Universal/Network/IScsiDxe/IScsiProto.c
MdeModulePkg/Universal/Network/Tcp4Dxe/Tcp4Misc.c
MdePkg/Include/Protocol/DevicePath.h
NetworkPkg/IScsiDxe/IScsiMisc.c
NetworkPkg/TcpDxe/TcpMisc.c
NetworkPkg/UefiPxeBcDxe/PxeBcDriver.c

index f1c6595a0d615e11edc8c34fb2820b0a19071a60..875af7b28327ac06badcb038d1180730213e86c1 100644 (file)
@@ -61,6 +61,8 @@ typedef UINT16          TCP_PORTNO;
 #define  IP_VERSION_4          4\r
 #define  IP_VERSION_6          6\r
 \r
+#define  IP6_PREFIX_LENGTH     64\r
+\r
 #pragma pack(1)\r
 \r
 //\r
index 82322c98c82cc40d1f58f1e4d4626be953551545..1743e9bdfa0dc28d28934da742e00f16a2ea0d36 100644 (file)
@@ -2578,7 +2578,6 @@ ON_EXIT:
 \r
   The header type of IPv4 device path node is MESSAGING_DEVICE_PATH.\r
   The header subtype of IPv4 device path node is MSG_IPv4_DP.\r
-  The length of the IPv4 device path node in bytes is 19.\r
   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
@@ -2606,7 +2605,7 @@ NetLibCreateIPv4DPathNode (
 {\r
   Node->Header.Type    = MESSAGING_DEVICE_PATH;\r
   Node->Header.SubType = MSG_IPv4_DP;\r
-  SetDevicePathNodeLength (&Node->Header, 19);\r
+  SetDevicePathNodeLength (&Node->Header, sizeof (IPv4_DEVICE_PATH));\r
 \r
   CopyMem (&Node->LocalIpAddress, &LocalIp, sizeof (EFI_IPv4_ADDRESS));\r
   CopyMem (&Node->RemoteIpAddress, &RemoteIp, sizeof (EFI_IPv4_ADDRESS));\r
@@ -2621,6 +2620,14 @@ NetLibCreateIPv4DPathNode (
   } else {\r
     Node->StaticIpAddress = NetLibDefaultAddressIsStatic (Controller);\r
   }\r
+\r
+  //\r
+  // Set the Gateway IP address to default value 0:0:0:0.\r
+  // Set the Subnet mask to default value 255:255:255:0.\r
+  //\r
+  ZeroMem (&Node->GatewayIpAddress, sizeof (EFI_IPv4_ADDRESS));\r
+  SetMem (&Node->SubnetMask, sizeof (EFI_IPv4_ADDRESS), 0xff);\r
+  Node->SubnetMask.Addr[3] = 0;\r
 }\r
 \r
 /**\r
@@ -2662,7 +2669,14 @@ NetLibCreateIPv6DPathNode (
   Node->RemotePort = RemotePort;\r
 \r
   Node->Protocol        = Protocol;\r
-  Node->StaticIpAddress = FALSE;\r
+\r
+  //\r
+  // Set default value to IPAddressOrigin, PrefixLength.\r
+  // Set the Gateway IP address to unspecified address.\r
+  //\r
+  Node->IpAddressOrigin = 0;\r
+  Node->PrefixLength    = IP6_PREFIX_LENGTH;\r
+  ZeroMem (&Node->GatewayIpAddress, sizeof (EFI_IPv6_ADDRESS));\r
 }\r
 \r
 /**\r
index bc9af70135fc3e192bb678435dddaeefa8bfaf49..11f5c159df449acb1482c1f9e3dbeb2e08b19cc5 100644 (file)
@@ -1684,6 +1684,74 @@ DevPathFromTextSAS (
   return (EFI_DEVICE_PATH_PROTOCOL *) Sas;\r
 }\r
 \r
+/**\r
+  Converts a text device path node to Serial Attached SCSI Ex device path structure.\r
+\r
+  @param TextDeviceNode  The input Text device path node.\r
+\r
+  @return A pointer to the newly-created Serial Attached SCSI Ex device path structure.\r
+\r
+**/\r
+EFI_DEVICE_PATH_PROTOCOL *\r
+DevPathFromTextSasEx (\r
+  IN CHAR16 *TextDeviceNode\r
+  )\r
+{\r
+  CHAR16            *AddressStr;\r
+  CHAR16            *LunStr;\r
+  CHAR16            *RTPStr;\r
+  CHAR16            *SASSATAStr;\r
+  CHAR16            *LocationStr;\r
+  CHAR16            *ConnectStr;\r
+  CHAR16            *DriveBayStr;\r
+  UINT16            Info;\r
+  SASEX_DEVICE_PATH *SasEx;\r
+\r
+  AddressStr  = GetNextParamStr (&TextDeviceNode);\r
+  LunStr      = GetNextParamStr (&TextDeviceNode);\r
+  RTPStr      = GetNextParamStr (&TextDeviceNode);\r
+  SASSATAStr  = GetNextParamStr (&TextDeviceNode);\r
+  LocationStr = GetNextParamStr (&TextDeviceNode);\r
+  ConnectStr  = GetNextParamStr (&TextDeviceNode);\r
+  DriveBayStr = GetNextParamStr (&TextDeviceNode);\r
+  Info        = 0x0000;\r
+  SasEx       = (SASEX_DEVICE_PATH *) CreateDeviceNode (\r
+                                        MESSAGING_DEVICE_PATH,\r
+                                        MSG_SASEX_DP,\r
+                                        (UINT16) sizeof (SASEX_DEVICE_PATH)\r
+                                        );\r
+\r
+  Strtoi64 (AddressStr, (UINT64 *) &SasEx->SasAddress);\r
+  Strtoi64 (LunStr,     (UINT64 *) &SasEx->Lun);\r
+  *(UINT64 *) &SasEx->SasAddress = SwapBytes64 (*(UINT64 *) &SasEx->SasAddress);\r
+  *(UINT64 *) &SasEx->Lun        = SwapBytes64 (*(UINT64 *) &SasEx->Lun);\r
+  SasEx->RelativeTargetPort      = (UINT16) Strtoi (RTPStr);\r
+  if (StrCmp (SASSATAStr, L"NoTopology") != 0) {\r
+    if (StrCmp (DriveBayStr, L"0") == 0) {\r
+      Info |= 0x0001;\r
+    } else {\r
+      Info |= 0x0002;\r
+      Info = (UINT16) (Info | (Strtoi (DriveBayStr) << 8));\r
+    }\r
+\r
+    if (StrCmp (SASSATAStr, L"SATA") == 0) {\r
+      Info |= 0x0010;\r
+    }\r
+\r
+    if (StrCmp (LocationStr, L"External") == 0) {\r
+      Info |= 0x0020;\r
+    }\r
+\r
+    if (StrCmp (ConnectStr, L"Expanded") == 0) {\r
+      Info |= 0x0040;\r
+    }\r
+  }\r
+\r
+  SasEx->DeviceTopology = Info;\r
+\r
+  return (EFI_DEVICE_PATH_PROTOCOL *) SasEx;\r
+}\r
+\r
 /**\r
   Converts a text device path node to Debug Port device path structure.\r
 \r
@@ -1843,12 +1911,16 @@ DevPathFromTextIPv6 (
   CHAR16            *ProtocolStr;\r
   CHAR16            *TypeStr;\r
   CHAR16            *LocalIPStr;\r
+  CHAR16            *GatewayIPStr;\r
+  CHAR16            *PrefixLengthStr;\r
   IPv6_DEVICE_PATH  *IPv6;\r
 \r
   RemoteIPStr           = GetNextParamStr (&TextDeviceNode);\r
   ProtocolStr           = GetNextParamStr (&TextDeviceNode);\r
   TypeStr               = GetNextParamStr (&TextDeviceNode);\r
   LocalIPStr            = GetNextParamStr (&TextDeviceNode);\r
+  PrefixLengthStr       = GetNextParamStr (&TextDeviceNode);\r
+  GatewayIPStr          = GetNextParamStr (&TextDeviceNode);\r
   IPv6                  = (IPv6_DEVICE_PATH *) CreateDeviceNode (\r
                                                  MESSAGING_DEVICE_PATH,\r
                                                  MSG_IPv6_DP,\r
@@ -1858,12 +1930,21 @@ DevPathFromTextIPv6 (
   StrToIPv6Addr (&RemoteIPStr, &IPv6->RemoteIpAddress);\r
   IPv6->Protocol        = (UINT16) NetworkProtocolFromText (ProtocolStr);\r
   if (StrCmp (TypeStr, L"Static") == 0) {\r
-    IPv6->StaticIpAddress = TRUE;\r
+    IPv6->IpAddressOrigin = 0;\r
+  } else if (StrCmp (TypeStr, L"StatelessAutoConfigure") == 0) {\r
+    IPv6->IpAddressOrigin = 1;\r
   } else {\r
-    IPv6->StaticIpAddress = FALSE;\r
+    IPv6->IpAddressOrigin = 2;\r
   }\r
 \r
   StrToIPv6Addr (&LocalIPStr, &IPv6->LocalIpAddress);\r
+  if (!IS_NULL (*GatewayIPStr) && !IS_NULL (*PrefixLengthStr)) {\r
+    StrToIPv6Addr (&GatewayIPStr, &IPv6->GatewayIpAddress);\r
+    IPv6->PrefixLength = (UINT8) Strtoi (PrefixLengthStr);\r
+  } else {\r
+    ZeroMem (&IPv6->GatewayIpAddress, sizeof (IPv6->GatewayIpAddress));\r
+    IPv6->PrefixLength = 0;\r
+  }\r
 \r
   IPv6->LocalPort       = 0;\r
   IPv6->RemotePort      = 0;\r
@@ -2895,6 +2976,7 @@ GLOBAL_REMOVE_IF_UNREFERENCED DEVICE_PATH_FROM_TEXT_TABLE DevPathFromTextTable[]
   {L"VenUtf8", DevPathFromTextVenUtf8},\r
   {L"UartFlowCtrl", DevPathFromTextUartFlowCtrl},\r
   {L"SAS", DevPathFromTextSAS},\r
+  {L"SasEx", DevPathFromTextSasEx},\r
   {L"DebugPort", DevPathFromTextDebugPort},\r
   {L"MAC", DevPathFromTextMAC},\r
   {L"IPv4", DevPathFromTextIPv4},\r
index d7cff207fe60181dd0ff12b5a04d20227c9c015d..2cfd6730d217264fe721d713e4f67ffb7d9a3882 100644 (file)
@@ -653,6 +653,66 @@ DevPathToTextFibreEx (
   CatPrint (Str, L")");\r
 }\r
 \r
+/**\r
+  Converts a Sas Ex device path structure to its string representative.\r
+\r
+  @param Str             The string representative of input device.\r
+  @param DevPath         The input device path structure.\r
+  @param DisplayOnly     If DisplayOnly is TRUE, then the shorter text representation\r
+                         of the display node is used, where applicable. If DisplayOnly\r
+                         is FALSE, then the longer text representation of the display node\r
+                         is used.\r
+  @param AllowShortcuts  If AllowShortcuts is TRUE, then the shortcut forms of text\r
+                         representation for a device node can be used, where applicable.\r
+\r
+**/\r
+VOID\r
+DevPathToTextSasEx (\r
+  IN OUT POOL_PRINT  *Str,\r
+  IN VOID            *DevPath,\r
+  IN BOOLEAN         DisplayOnly,\r
+  IN BOOLEAN         AllowShortcuts\r
+  )\r
+{\r
+  SASEX_DEVICE_PATH  *SasEx;\r
+  UINTN              Index;\r
+\r
+  SasEx = DevPath;\r
+  CatPrint (Str, L"SasEx(0x");\r
+\r
+  for (Index = 0; Index < sizeof (SasEx->SasAddress) / sizeof (SasEx->SasAddress[0]); Index++) {\r
+    CatPrint (Str, L"%02x", SasEx->SasAddress[Index]);\r
+  }\r
+  CatPrint (Str, L",0x");\r
+  for (Index = 0; Index < sizeof (SasEx->Lun) / sizeof (SasEx->Lun[0]); Index++) {\r
+    CatPrint (Str, L"%02x", SasEx->Lun[Index]);\r
+  }\r
+  CatPrint (Str, L",0x%x,", SasEx->RelativeTargetPort);\r
+\r
+  if ((SasEx->DeviceTopology & 0x0f) == 0) {\r
+    CatPrint (Str, L"NoTopology,0,0,0,");\r
+  } else if (((SasEx->DeviceTopology & 0x0f) == 1) || ((SasEx->DeviceTopology & 0x0f) == 2)) {\r
+    CatPrint (\r
+      Str,\r
+      L"%s,%s,%s,",\r
+      ((SasEx->DeviceTopology & (0x1 << 4)) != 0) ? L"SATA" : L"SAS",\r
+      ((SasEx->DeviceTopology & (0x1 << 5)) != 0) ? L"External" : L"Internal",\r
+      ((SasEx->DeviceTopology & (0x1 << 6)) != 0) ? L"Expanded" : L"Direct"\r
+      );\r
+    if ((SasEx->DeviceTopology & 0x0f) == 1) {\r
+      CatPrint (Str, L"0,");\r
+    } else {\r
+      CatPrint (Str, L"0x%x,", (SasEx->DeviceTopology >> 8) & 0xff);\r
+    }\r
+  } else {\r
+    CatPrint (Str, L"0,0,0,0,");\r
+  }\r
+\r
+  CatPrint (Str, L")");\r
+  return ;\r
+\r
+}\r
+\r
 /**\r
   Converts a 1394 device path structure to its string representative.\r
 \r
@@ -1205,10 +1265,21 @@ DevPathToTextIPv6 (
     IPDevPath->Protocol\r
     );\r
 \r
+  switch (IPDevPath->IpAddressOrigin) {\r
+    case 0:\r
+      CatPrint (Str, L",Static");\r
+      break;\r
+    case 1:\r
+      CatPrint (Str, L",StatelessAutoConfigure");\r
+      break;\r
+    default:\r
+      CatPrint (Str, L",StatefulAutoConfigure");\r
+      break;\r
+  }\r
+\r
   CatPrint (\r
     Str,\r
-    L",%s,%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x)",\r
-    IPDevPath->StaticIpAddress ? L"Static" : L"DHCP",\r
+    L",%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x",\r
     IPDevPath->LocalIpAddress.Addr[0],\r
     IPDevPath->LocalIpAddress.Addr[1],\r
     IPDevPath->LocalIpAddress.Addr[2],\r
@@ -1226,6 +1297,31 @@ DevPathToTextIPv6 (
     IPDevPath->LocalIpAddress.Addr[14],\r
     IPDevPath->LocalIpAddress.Addr[15]\r
     );\r
+\r
+  if (DevicePathNodeLength (IPDevPath) == sizeof (IPv6_DEVICE_PATH)) {\r
+    CatPrint (\r
+      Str,\r
+      L",0x%x,%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x",\r
+      IPDevPath->PrefixLength,\r
+      IPDevPath->GatewayIpAddress.Addr[0],\r
+      IPDevPath->GatewayIpAddress.Addr[1],\r
+      IPDevPath->GatewayIpAddress.Addr[2],\r
+      IPDevPath->GatewayIpAddress.Addr[3],\r
+      IPDevPath->GatewayIpAddress.Addr[4],\r
+      IPDevPath->GatewayIpAddress.Addr[5],\r
+      IPDevPath->GatewayIpAddress.Addr[6],\r
+      IPDevPath->GatewayIpAddress.Addr[7],\r
+      IPDevPath->GatewayIpAddress.Addr[8],\r
+      IPDevPath->GatewayIpAddress.Addr[9],\r
+      IPDevPath->GatewayIpAddress.Addr[10],\r
+      IPDevPath->GatewayIpAddress.Addr[11],\r
+      IPDevPath->GatewayIpAddress.Addr[12],\r
+      IPDevPath->GatewayIpAddress.Addr[13],\r
+      IPDevPath->GatewayIpAddress.Addr[14],\r
+      IPDevPath->GatewayIpAddress.Addr[15]\r
+      );\r
+  }\r
+  CatPrint (Str, L")");\r
 }\r
 \r
 /**\r
@@ -1790,6 +1886,7 @@ GLOBAL_REMOVE_IF_UNREFERENCED const DEVICE_PATH_TO_TEXT_TABLE DevPathToTextTable
   {MESSAGING_DEVICE_PATH, MSG_SCSI_DP, DevPathToTextScsi},\r
   {MESSAGING_DEVICE_PATH, MSG_FIBRECHANNEL_DP, DevPathToTextFibre},\r
   {MESSAGING_DEVICE_PATH, MSG_FIBRECHANNELEX_DP, DevPathToTextFibreEx},\r
+  {MESSAGING_DEVICE_PATH, MSG_SASEX_DP, DevPathToTextSasEx},\r
   {MESSAGING_DEVICE_PATH, MSG_1394_DP, DevPathToText1394},\r
   {MESSAGING_DEVICE_PATH, MSG_USB_DP, DevPathToTextUsb},\r
   {MESSAGING_DEVICE_PATH, MSG_USB_WWID_DP, DevPathToTextUsbWWID},\r
index 59d514fe188bb824b16564086face23320656363..f6a64e56dad97763773f253215085ca476cd7258 100644 (file)
@@ -41,9 +41,9 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 \r
 typedef struct _ISCSI_CHAP_AUTH_CONFIG_NVDATA {\r
   UINT8 CHAPType;\r
-  CHAR8 CHAPName[ISCSI_CHAP_NAME_MAX_LEN];\r
+  CHAR8 CHAPName[ISCSI_CHAP_NAME_STORAGE];\r
   CHAR8 CHAPSecret[ISCSI_CHAP_SECRET_STORAGE];\r
-  CHAR8 ReverseCHAPName[ISCSI_CHAP_NAME_MAX_LEN];\r
+  CHAR8 ReverseCHAPName[ISCSI_CHAP_NAME_STORAGE];\r
   CHAR8 ReverseCHAPSecret[ISCSI_CHAP_SECRET_STORAGE];\r
 } ISCSI_CHAP_AUTH_CONFIG_NVDATA;\r
 \r
index 85ad3d173e2ee1674e4313cd227645793f25a135..7c2e4e65fa8e752a66f804f09310c9c2f35446dc 100644 (file)
@@ -73,6 +73,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 #define ISCSI_CHAP_SECRET_STORAGE 17\r
 \r
 #define ISCSI_CHAP_NAME_MAX_LEN   126\r
+#define ISCSI_CHAP_NAME_STORAGE   127\r
 \r
 #define ISID_CONFIGURABLE_MIN_LEN 6\r
 #define ISID_CONFIGURABLE_MAX_LEN 12\r
@@ -96,9 +97,9 @@ typedef struct {
   UINT8   TargetInfoFromDhcp;\r
 \r
   UINT8   CHAPType;\r
-  CHAR16  CHAPName[ISCSI_CHAP_NAME_MAX_LEN];\r
+  CHAR16  CHAPName[ISCSI_CHAP_NAME_STORAGE];\r
   CHAR16  CHAPSecret[ISCSI_CHAP_SECRET_STORAGE];\r
-  CHAR16  ReverseCHAPName[ISCSI_CHAP_NAME_MAX_LEN];\r
+  CHAR16  ReverseCHAPName[ISCSI_CHAP_NAME_STORAGE];\r
   CHAR16  ReverseCHAPSecret[ISCSI_CHAP_SECRET_STORAGE];\r
 \r
   CHAR16  IsId[ISID_CONFIGURABLE_STORAGE];\r
index 840692b45d6beee40c73cf121cdc22b8493895a4..5341e5a01ef8bf1187b0272b88714ab040d08d14 100644 (file)
@@ -757,7 +757,19 @@ IScsiGetTcpConnDevicePath (
         ) {\r
 \r
       DPathNode->Ipv4.LocalPort       = 0;\r
-      DPathNode->Ipv4.StaticIpAddress = (BOOLEAN) (!Session->ConfigData.NvData.InitiatorInfoFromDhcp);\r
+      DPathNode->Ipv4.StaticIpAddress = \r
+        (BOOLEAN) (!Session->ConfigData.NvData.InitiatorInfoFromDhcp);\r
+\r
+      IP4_COPY_ADDRESS (\r
+        &DPathNode->Ipv4.GatewayIpAddress,\r
+        &Session->ConfigData.NvData.Gateway\r
+        );\r
+\r
+      IP4_COPY_ADDRESS (\r
+        &DPathNode->Ipv4.SubnetMask,\r
+        &Session->ConfigData.NvData.SubnetMask\r
+        );\r
+\r
       break;\r
     }\r
 \r
index 3836053d932e1e925e183d9c589644dcf35dd877..331f9d8d22a5261a6ea151d595f2aa64a0c5d5ee 100644 (file)
@@ -692,6 +692,14 @@ IScsiProcessLoginRsp (
   LoginRsp->MaxCmdSN  = NTOHL (LoginRsp->MaxCmdSN);\r
 \r
   if ((Conn->CurrentStage == ISCSI_SECURITY_NEGOTIATION) && (Conn->CHAPStep == ISCSI_CHAP_INITIAL)) {\r
+    //\r
+    // If the Login Request is a leading Login Request, the target MUST use\r
+    // the value presented in CmdSN as the target value for ExpCmdSN.\r
+    //\r
+    if ((Session->State == SESSION_STATE_FREE) && (Session->CmdSN != LoginRsp->ExpCmdSN)) {\r
+      return EFI_PROTOCOL_ERROR;\r
+    }\r
+\r
     //\r
     // It's the initial Login Response, initialize the local ExpStatSN, MaxCmdSN\r
     // and ExpCmdSN.\r
index 2ed3c254f3ce8783a79e6da59cd2c62852b2baa3..b3591aa7df09943beddba4d8b8e1035744b85e0c 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Misc support routines for tcp.\r
 \r
-Copyright (c) 2005 - 2010, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2005 - 2011, Intel Corporation. All rights reserved.<BR>\r
 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
@@ -1115,6 +1115,8 @@ TcpInstallDevicePath (
     Tcb->UseDefaultAddr\r
     );\r
 \r
+  IP4_COPY_ADDRESS (&Ip4DPathNode.SubnetMask, &Tcb->SubnetMask);\r
+\r
   Sock->DevicePath = AppendDevicePathNode (\r
                        Sock->ParentDevicePath,\r
                        (EFI_DEVICE_PATH_PROTOCOL *) &Ip4DPathNode\r
index 7318ff2744b9ed5f003506ea51074e6872ab654e..9c56d9e05ed5bb3fb1594d61b54d9d081e7227f8 100644 (file)
@@ -598,10 +598,21 @@ typedef struct {
   ///\r
   UINT16                          Protocol;\r
   ///\r
-  /// 0x00 - The Source IP Address was assigned though DHCP.\r
-  /// 0x01 - The Source IP Address is statically bound.\r
+  /// 0x00 - The Local IP Address was manually configured.\r
+  /// 0x01 - The Local IP Address is assigned through IPv6\r
+  /// stateless auto-configuration.\r
+  /// 0x02 - The Local IP Address is assigned through IPv6\r
+  /// stateful configuration.\r
   ///\r
-  BOOLEAN                         StaticIpAddress;\r
+  UINT8                           IpAddressOrigin;\r
+  ///\r
+  /// The prefix length\r
+  ///\r
+  UINT8                           PrefixLength;\r
+  ///\r
+  /// The gateway IP address\r
+  ///\r
+  EFI_IPv6_ADDRESS                GatewayIpAddress;\r
 } IPv6_DEVICE_PATH;\r
 \r
 ///\r
@@ -750,6 +761,30 @@ typedef struct {
   UINT16                          RelativeTargetPort;\r
 } SAS_DEVICE_PATH;\r
 \r
+///\r
+/// Serial Attached SCSI (SAS) Ex Device Path SubType\r
+///\r
+#define MSG_SASEX_DP              0x16\r
+typedef struct {\r
+  EFI_DEVICE_PATH_PROTOCOL        Header;\r
+  ///\r
+  /// 8-byte array of the SAS Address for Serial Attached SCSI Target Port.\r
+  ///\r
+  UINT8                           SasAddress[8];\r
+  ///\r
+  /// 8-byte array of the SAS Logical Unit Number.\r
+  ///\r
+  UINT8                           Lun[8];\r
+  ///\r
+  /// More Information about the device and its interconnect.\r
+  ///\r
+  UINT16                          DeviceTopology;\r
+  ///\r
+  /// Relative Target Port (RTP).\r
+  ///\r
+  UINT16                          RelativeTargetPort;\r
+} SASEX_DEVICE_PATH;\r
+\r
 ///\r
 /// iSCSI Device Path SubType\r
 ///\r
@@ -1047,6 +1082,7 @@ typedef union {
   UART_DEVICE_PATH                           Uart;\r
   UART_FLOW_CONTROL_DEVICE_PATH              UartFlowControl;\r
   SAS_DEVICE_PATH                            Sas;\r
+  SASEX_DEVICE_PATH                          SasEx;\r
   HARDDRIVE_DEVICE_PATH                      HardDrive;\r
   CDROM_DEVICE_PATH                          CD;\r
 \r
@@ -1095,6 +1131,7 @@ typedef union {
   UART_DEVICE_PATH                           *Uart;\r
   UART_FLOW_CONTROL_DEVICE_PATH              *UartFlowControl;\r
   SAS_DEVICE_PATH                            *Sas;\r
+  SASEX_DEVICE_PATH                          *SasEx;\r
   HARDDRIVE_DEVICE_PATH                      *HardDrive;\r
   CDROM_DEVICE_PATH                          *CD;\r
 \r
index 731081f1df85fa86ce2e49a99ae886a46e39a812..f3ecdb5f6a1de4d24e6994bd944cc669c382b77e 100644 (file)
@@ -1287,11 +1287,25 @@ IScsiGetTcpConnDevicePath (
     if (DevicePathType (&DPathNode->DevPath) == MESSAGING_DEVICE_PATH) {\r
       if (!Conn->Ipv6Flag && DevicePathSubType (&DPathNode->DevPath) == MSG_IPv4_DP) {\r
         DPathNode->Ipv4.LocalPort       = 0;\r
-        DPathNode->Ipv4.StaticIpAddress = (BOOLEAN) !Session->ConfigData->SessionConfigData.InitiatorInfoFromDhcp;\r
+\r
+        DPathNode->Ipv4.StaticIpAddress = \r
+          (BOOLEAN) (!Session->ConfigData->SessionConfigData.InitiatorInfoFromDhcp);\r
+\r
+        IP4_COPY_ADDRESS (\r
+          &DPathNode->Ipv4.GatewayIpAddress,\r
+          &Session->ConfigData->SessionConfigData.Gateway\r
+          );\r
+\r
+        IP4_COPY_ADDRESS (\r
+          &DPathNode->Ipv4.SubnetMask,\r
+          &Session->ConfigData->SessionConfigData.SubnetMask\r
+          );\r
         break;\r
       } else if (Conn->Ipv6Flag && DevicePathSubType (&DPathNode->DevPath) == MSG_IPv6_DP) {\r
         DPathNode->Ipv6.LocalPort       = 0;\r
-        DPathNode->Ipv6.StaticIpAddress = (BOOLEAN) !Session->ConfigData->SessionConfigData.InitiatorInfoFromDhcp;\r
+        DPathNode->Ipv6.IpAddressOrigin = 0;\r
+        DPathNode->Ipv6.PrefixLength    = IP6_PREFIX_LENGTH;\r
+        ZeroMem (&DPathNode->Ipv6.GatewayIpAddress, sizeof (EFI_IPv6_ADDRESS));\r
         break;\r
       }\r
     }\r
index 492ec35fb892fd2bb4dc500f38c5f8613d00094b..21bd9dfec1d1d0561b36f175a04e2e309cb451eb 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Misc support routines for TCP driver.\r
 \r
-  Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>\r
 \r
   This program and the accompanying materials\r
   are licensed and made available under the terms and conditions of the BSD License\r
@@ -1245,6 +1245,8 @@ TcpInstallDevicePath (
       Tcb->UseDefaultAddr\r
       );\r
 \r
+    IP4_COPY_ADDRESS (&Ip4DPathNode.SubnetMask, &Tcb->SubnetMask);\r
+\r
     DevicePath = (EFI_DEVICE_PATH_PROTOCOL *) &Ip4DPathNode;\r
   } else {\r
     NetLibCreateIPv6DPathNode (\r
index 8cfc8fb93cbbb83c1b8a1d26937e360da6bdf511..179009f91c600802fb47c0f94ee5027e79ccb0a9 100644 (file)
@@ -949,7 +949,7 @@ PxeBcCreateIp6Children (
   ZeroMem (&Ip6Node, sizeof (IPv6_DEVICE_PATH));\r
   Ip6Node.Header.Type     = MESSAGING_DEVICE_PATH;\r
   Ip6Node.Header.SubType  = MSG_IPv6_DP;\r
-  Ip6Node.StaticIpAddress = FALSE;\r
+  Ip6Node.PrefixLength    = IP6_PREFIX_LENGTH;\r
 \r
   SetDevicePathNodeLength (&Ip6Node.Header, sizeof (Ip6Node));\r
 \r