]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/Network/Tcp4Dxe/Tcp4Dispatcher.c
1. Sync the latest network stack. Add NetLibCreateIPv4DPathNode () in netlib library.
[mirror_edk2.git] / MdeModulePkg / Universal / Network / Tcp4Dxe / Tcp4Dispatcher.c
index c714dd3dae9c197dfa12a1dc559ea4c7f720616c..0b845ee9adf996f726b7565e6389af083e3b8297 100644 (file)
@@ -248,6 +248,16 @@ Tcp4FlushPcb (
   if (SOCK_IS_CONFIGURED (Sock)) {\r
     NetListRemoveEntry (&Tcb->List);\r
 \r
   if (SOCK_IS_CONFIGURED (Sock)) {\r
     NetListRemoveEntry (&Tcb->List);\r
 \r
+    //\r
+    // Uninstall the device path protocl.\r
+    //\r
+    gBS->UninstallProtocolInterface (\r
+           Sock->SockHandle,\r
+           &gEfiDevicePathProtocolGuid,\r
+           Sock->DevicePath\r
+           );\r
+    NetFreePool (Sock->DevicePath);\r
+\r
     TcpSetVariableData (TcpProto->TcpService);\r
   }\r
 \r
     TcpSetVariableData (TcpProto->TcpService);\r
   }\r
 \r
@@ -428,12 +438,19 @@ Tcp4ConfigurePcb (
   Tcb->TTL            = CfgData->TimeToLive;\r
   Tcb->TOS            = CfgData->TypeOfService;\r
 \r
   Tcb->TTL            = CfgData->TimeToLive;\r
   Tcb->TOS            = CfgData->TypeOfService;\r
 \r
+  Tcb->UseDefaultAddr = CfgData->AccessPoint.UseDefaultAddress;\r
+\r
   NetCopyMem (&Tcb->LocalEnd.Ip, &CfgData->AccessPoint.StationAddress, sizeof (IP4_ADDR));\r
   Tcb->LocalEnd.Port  = HTONS (CfgData->AccessPoint.StationPort);\r
   Tcb->SubnetMask     = CfgData->AccessPoint.SubnetMask;\r
 \r
   NetCopyMem (&Tcb->LocalEnd.Ip, &CfgData->AccessPoint.StationAddress, sizeof (IP4_ADDR));\r
   Tcb->LocalEnd.Port  = HTONS (CfgData->AccessPoint.StationPort);\r
   Tcb->SubnetMask     = CfgData->AccessPoint.SubnetMask;\r
 \r
-  NetCopyMem (&Tcb->RemoteEnd.Ip, &CfgData->AccessPoint.RemoteAddress, sizeof (IP4_ADDR));\r
-  Tcb->RemoteEnd.Port = HTONS (CfgData->AccessPoint.RemotePort);\r
+  if (CfgData->AccessPoint.ActiveFlag) {\r
+    NetCopyMem (&Tcb->RemoteEnd.Ip, &CfgData->AccessPoint.RemoteAddress, sizeof (IP4_ADDR));\r
+    Tcb->RemoteEnd.Port = HTONS (CfgData->AccessPoint.RemotePort);\r
+  } else {\r
+    Tcb->RemoteEnd.Ip   = 0;\r
+    Tcb->RemoteEnd.Port = 0;\r
+  }\r
 \r
   Option              = CfgData->ControlOption;\r
 \r
 \r
   Option              = CfgData->ControlOption;\r
 \r
@@ -537,6 +554,15 @@ Tcp4ConfigurePcb (
     }\r
   }\r
 \r
     }\r
   }\r
 \r
+  //\r
+  // The socket is bound, the <SrcIp, SrcPort, DstIp, DstPort> is\r
+  // determined, construct the IP device path and install it.\r
+  //\r
+  Status = TcpInstallDevicePath (Sk);\r
+  if (EFI_ERROR (Status)) {\r
+    goto OnExit;\r
+  }\r
+\r
   //\r
   // update state of Tcb and socket\r
   //\r
   //\r
   // update state of Tcb and socket\r
   //\r
@@ -681,8 +707,6 @@ Tcp4Dispatcher (
 \r
     return Tcp4Route (Tcb, (TCP4_ROUTE_INFO *) Data);\r
 \r
 \r
     return Tcp4Route (Tcb, (TCP4_ROUTE_INFO *) Data);\r
 \r
-  default:\r
-    return EFI_UNSUPPORTED;\r
   }\r
 \r
   return EFI_SUCCESS;\r
   }\r
 \r
   return EFI_SUCCESS;\r