]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/Network/Tcp4Dxe/Tcp4Misc.c
Update the copyright notice format
[mirror_edk2.git] / MdeModulePkg / Universal / Network / Tcp4Dxe / Tcp4Misc.c
index 82e3a600db0ea86326b601bbc8ef315f20df3b33..f36a5bd1bf1a7da4cd20bb08c0a34c469812d998 100644 (file)
@@ -1,23 +1,15 @@
 /** @file\r
+  Misc support routines for tcp.\r
 \r
-Copyright (c) 2005 - 2006, Intel Corporation\r
-All rights reserved. This program and the accompanying materials\r
+Copyright (c) 2005 - 2009, 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
-http://opensource.org/licenses/bsd-license.php\r
+http://opensource.org/licenses/bsd-license.php<BR>\r
 \r
 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
 \r
-Module Name:\r
-\r
-  Tcp4Misc.c\r
-\r
-Abstract:\r
-\r
-  Misc support routines for tcp.\r
-\r
-\r
 **/\r
 \r
 \r
@@ -57,12 +49,10 @@ CHAR16   *mTcpStateName[] = {
 \r
   @param  Tcb                   Pointer to the TCP_CB of this TCP instance.\r
 \r
-  @return None\r
-\r
 **/\r
 VOID\r
 TcpInitTcbLocal (\r
-  IN TCP_CB *Tcb\r
+  IN OUT TCP_CB *Tcb\r
   )\r
 {\r
   //\r
@@ -85,7 +75,7 @@ TcpInitTcbLocal (
   Tcb->RcvWnd = GET_RCV_BUFFSIZE (Tcb->Sk);\r
 \r
   //\r
-  // Fisrt window size is never scaled\r
+  // First window size is never scaled\r
   //\r
   Tcb->RcvWndScale = 0;\r
 }\r
@@ -99,19 +89,17 @@ TcpInitTcbLocal (
                                 intial info.\r
   @param  Opt                   Pointer to the options announced by the peer.\r
 \r
-  @return None\r
-\r
 **/\r
 VOID\r
 TcpInitTcbPeer (\r
-  IN TCP_CB     *Tcb,\r
-  IN TCP_SEG    *Seg,\r
-  IN TCP_OPTION *Opt\r
+  IN OUT TCP_CB     *Tcb,\r
+  IN     TCP_SEG    *Seg,\r
+  IN     TCP_OPTION *Opt\r
   )\r
 {\r
   UINT16  RcvMss;\r
 \r
-  ASSERT (Tcb && Seg && Opt);\r
+  ASSERT ((Tcb != NULL) && (Seg != NULL) && (Opt != NULL));\r
   ASSERT (TCP_FLG_ON (Seg->Flag, TCP_FLG_SYN));\r
 \r
   Tcb->SndWnd     = Seg->Wnd;\r
@@ -183,10 +171,10 @@ TcpInitTcbPeer (
   @param  Local                 Pointer to the local (IP, Port).\r
   @param  Remote                Pointer to the remote (IP, Port).\r
 \r
-  @return Pointer to the TCP_CB with the least number of wildcard, if NULL no match is found.\r
+  @return  Pointer to the TCP_CB with the least number of wildcard, \r
+           if NULL no match is found.\r
 \r
 **/\r
-STATIC\r
 TCP_CB *\r
 TcpLocateListenTcb (\r
   IN TCP_PEER *Local,\r
@@ -207,8 +195,7 @@ TcpLocateListenTcb (
 \r
     if ((Local->Port != Node->LocalEnd.Port) ||\r
         !TCP_PEER_MATCH (Remote, &Node->RemoteEnd) ||\r
-        !TCP_PEER_MATCH (Local, &Node->LocalEnd)\r
-          ) {\r
+        !TCP_PEER_MATCH (Local, &Node->LocalEnd)) {\r
 \r
       continue;\r
     }\r
@@ -249,7 +236,7 @@ TcpLocateListenTcb (
   @param  Addr                  Pointer to the IP address needs to match.\r
   @param  Port                  The port number needs to match.\r
 \r
-  @return The Tcb which matches the <Addr Port> paire exists or not.\r
+  @return  The Tcb which matches the <Addr Port> paire exists or not.\r
 \r
 **/\r
 BOOLEAN\r
@@ -300,7 +287,7 @@ TcpFindTcbByPeer (
   @param  Syn                   Whether to search the listen sockets, if TRUE, the\r
                                 listen sockets are searched.\r
 \r
-  @return Pointer to the related TCP_CB, if NULL no match is found.\r
+  @return  Pointer to the related TCP_CB, if NULL no match is found.\r
 \r
 **/\r
 TCP_CB *\r
@@ -370,13 +357,11 @@ TcpInsertTcb (
   TCP4_PROTO_DATA  *TcpProto;\r
 \r
   ASSERT (\r
-    Tcb &&\r
-    (\r
-    (Tcb->State == TCP_LISTEN) ||\r
-    (Tcb->State == TCP_SYN_SENT) ||\r
-    (Tcb->State == TCP_SYN_RCVD) ||\r
-    (Tcb->State == TCP_CLOSED)\r
-    )\r
+    (Tcb != NULL) &&\r
+    ((Tcb->State == TCP_LISTEN) ||\r
+     (Tcb->State == TCP_SYN_SENT) ||\r
+     (Tcb->State == TCP_SYN_RCVD) ||\r
+     (Tcb->State == TCP_CLOSED))\r
     );\r
 \r
   if (Tcb->LocalEnd.Port == 0) {\r
@@ -412,11 +397,11 @@ TcpInsertTcb (
 \r
 \r
 /**\r
-  Clone a TCP_CB from Tcb.\r
+  Clone a TCB_CB from Tcb.\r
 \r
   @param  Tcb                   Pointer to the TCP_CB to be cloned.\r
 \r
-  @return Pointer to the new cloned TCP_CB, if NULL error condition occurred.\r
+  @return  Pointer to the new cloned TCP_CB, if NULL error condition occurred.\r
 \r
 **/\r
 TCP_CB *\r
@@ -447,7 +432,7 @@ TcpCloneTcb (
   Clone->Sk = SockClone (Tcb->Sk);\r
   if (Clone->Sk == NULL) {\r
     DEBUG ((EFI_D_ERROR, "TcpCloneTcb: failed to clone a sock\n"));\r
-    gBS->FreePool (Clone);\r
+    FreePool (Clone);\r
     return NULL;\r
   }\r
 \r
@@ -460,9 +445,7 @@ TcpCloneTcb (
 /**\r
   Compute an ISS to be used by a new connection.\r
 \r
-  None\r
-\r
-  @return The result ISS.\r
+  @return  The result ISS.\r
 \r
 **/\r
 TCP_SEQNO\r
@@ -478,9 +461,9 @@ TcpGetIss (
 /**\r
   Get the local mss.\r
 \r
-  None\r
+  @param  Sock        Pointer to the socket to get mss\r
 \r
-  @return The mss size.\r
+  @return  The mss size.\r
 \r
 **/\r
 UINT16\r
@@ -488,19 +471,19 @@ TcpGetRcvMss (
   IN SOCKET  *Sock\r
   )\r
 {\r
-  EFI_SIMPLE_NETWORK_MODE SnpMode;\r
+  EFI_IP4_MODE_DATA       Ip4Mode;\r
   TCP4_PROTO_DATA         *TcpProto;\r
   EFI_IP4_PROTOCOL        *Ip;\r
 \r
-  ASSERT (Sock);\r
+  ASSERT (Sock != NULL);\r
 \r
   TcpProto = (TCP4_PROTO_DATA *) Sock->ProtoReserved;\r
-  Ip       = TcpProto->TcpService->IpIo->Ip;\r
-  ASSERT (Ip);\r
+  Ip       = (EFI_IP4_PROTOCOL *) (TcpProto->TcpService->IpIo->Ip);\r
+  ASSERT (Ip != NULL);\r
 \r
-  Ip->GetModeData (Ip, NULL, NULL, &SnpMode);\r
+  Ip->GetModeData (Ip, &Ip4Mode, NULL, NULL);\r
 \r
-  return (UINT16) (SnpMode.MaxPacketSize - 40);\r
+  return (UINT16) (Ip4Mode.MaxPacketSize - sizeof (TCP_HEAD));\r
 }\r
 \r
 \r
@@ -510,18 +493,16 @@ TcpGetRcvMss (
   @param  Tcb                   Pointer to the TCP_CB of this TCP instance.\r
   @param  State                 The state to be set.\r
 \r
-  @return None\r
-\r
 **/\r
 VOID\r
 TcpSetState (\r
-  IN TCP_CB *Tcb,\r
-  IN UINT8  State\r
+  IN OUT TCP_CB  *Tcb,\r
+  IN     UINT8   State\r
   )\r
 {\r
   DEBUG (\r
     (EFI_D_INFO,\r
-    "Tcb (%x) state %s --> %s\n",\r
+    "Tcb (%p) state %s --> %s\n",\r
     Tcb,\r
     mTcpStateName[Tcb->State],\r
     mTcpStateName[State])\r
@@ -548,6 +529,8 @@ TcpSetState (
 \r
     SockConnClosed (Tcb->Sk);\r
 \r
+    break;\r
+  default:\r
     break;\r
   }\r
 }\r
@@ -561,7 +544,7 @@ TcpSetState (
   @param  HeadSum               The checksum value of the fixed part of pseudo\r
                                 header.\r
 \r
-  @return The checksum value.\r
+  @return  The checksum value.\r
 \r
 **/\r
 UINT16\r
@@ -575,15 +558,14 @@ TcpChecksum (
   Checksum  = NetbufChecksum (Nbuf);\r
   Checksum  = NetAddChecksum (Checksum, HeadSum);\r
 \r
-  Checksum = NetAddChecksum (\r
-              Checksum,\r
-              HTONS ((UINT16) Nbuf->TotalSize)\r
-              );\r
+  Checksum  = NetAddChecksum (\r
+                Checksum,\r
+                HTONS ((UINT16) Nbuf->TotalSize)\r
+                );\r
 \r
   return (UINT16) ~Checksum;\r
 }\r
 \r
-\r
 /**\r
   Translate the information from the head of the received TCP\r
   segment Nbuf contains and fill it into a TCP_SEG structure.\r
@@ -591,13 +573,13 @@ TcpChecksum (
   @param  Tcb                   Pointer to the TCP_CB of this TCP instance.\r
   @param  Nbuf                  Pointer to the buffer contains the TCP segment.\r
 \r
-  @return Pointer to the TCP_SEG that contains the translated TCP head information.\r
+  @return  Pointer to the TCP_SEG that contains the translated TCP head information.\r
 \r
 **/\r
 TCP_SEG *\r
 TcpFormatNetbuf (\r
-  IN TCP_CB  *Tcb,\r
-  IN NET_BUF *Nbuf\r
+  IN     TCP_CB  *Tcb,\r
+  IN OUT NET_BUF *Nbuf\r
   )\r
 {\r
   TCP_SEG   *Seg;\r
@@ -640,8 +622,6 @@ TcpFormatNetbuf (
   @param  Tcb                   Pointer to the TCP_CB of the connection to be\r
                                 reset.\r
 \r
-  @return None\r
-\r
 **/\r
 VOID\r
 TcpResetConnection (\r
@@ -686,17 +666,15 @@ TcpResetConnection (
 \r
 \r
 /**\r
-  Initialize an active connection,\r
+  Initialize an active connection.\r
 \r
   @param  Tcb                   Pointer to the TCP_CB that wants to initiate a\r
                                 connection.\r
 \r
-  @return None\r
-\r
 **/\r
 VOID\r
 TcpOnAppConnect (\r
-  IN TCP_CB  *Tcb\r
+  IN OUT TCP_CB  *Tcb\r
   )\r
 {\r
   TcpInitTcbLocal (Tcb);\r
@@ -713,20 +691,18 @@ TcpOnAppConnect (
 \r
   @param  Tcb                   Pointer to the TCP_CB of this TCP instance.\r
 \r
-  @return None.\r
-\r
 **/\r
 VOID\r
 TcpOnAppClose (\r
-  IN TCP_CB *Tcb\r
+  IN OUT TCP_CB *Tcb\r
   )\r
 {\r
-  ASSERT (Tcb);\r
+  ASSERT (Tcb != NULL);\r
 \r
-  if (!IsListEmpty (&Tcb->RcvQue) || GET_RCV_DATASIZE (Tcb->Sk)) {\r
+  if (!IsListEmpty (&Tcb->RcvQue) || GET_RCV_DATASIZE (Tcb->Sk) != 0) {\r
 \r
     DEBUG ((EFI_D_WARN, "TcpOnAppClose: connection reset "\r
-      "because data is lost for TCB %x\n", Tcb));\r
+      "because data is lost for TCB %p\n", Tcb));\r
 \r
     TcpResetConnection (Tcb);\r
     TcpClose (Tcb);\r
@@ -748,6 +724,8 @@ TcpOnAppClose (
   case TCP_CLOSE_WAIT:\r
     TcpSetState (Tcb, TCP_LAST_ACK);\r
     break;\r
+  default:\r
+    break;\r
   }\r
 \r
   TcpToSendData (Tcb, 1);\r
@@ -755,8 +733,7 @@ TcpOnAppClose (
 \r
 \r
 /**\r
-  Check whether the application's newly delivered data\r
-  can be sent out.\r
+  Check whether the application's newly delivered data can be sent out.\r
 \r
   @param  Tcb                   Pointer to the TCP_CB of this TCP instance.\r
 \r
@@ -768,29 +745,25 @@ TcpOnAppClose (
 **/\r
 INTN\r
 TcpOnAppSend (\r
-  IN TCP_CB *Tcb\r
+  IN OUT TCP_CB *Tcb\r
   )\r
 {\r
 \r
   switch (Tcb->State) {\r
   case TCP_CLOSED:\r
     return -1;\r
-    break;\r
 \r
   case TCP_LISTEN:\r
     return -1;\r
-    break;\r
 \r
   case TCP_SYN_SENT:\r
   case TCP_SYN_RCVD:\r
     return 0;\r
-    break;\r
 \r
   case TCP_ESTABLISHED:\r
   case TCP_CLOSE_WAIT:\r
     TcpToSendData (Tcb, 0);\r
     return 0;\r
-    break;\r
 \r
   case TCP_FIN_WAIT_1:\r
   case TCP_FIN_WAIT_2:\r
@@ -798,6 +771,8 @@ TcpOnAppSend (
   case TCP_LAST_ACK:\r
   case TCP_TIME_WAIT:\r
     return -1;\r
+\r
+  default:\r
     break;\r
   }\r
 \r
@@ -811,9 +786,8 @@ TcpOnAppSend (
 \r
   @param  Tcb                   Pointer to the TCP_CB of this TCP instance.\r
 \r
-\r
 **/\r
-INTN\r
+VOID\r
 TcpOnAppConsume (\r
   IN TCP_CB *Tcb\r
   )\r
@@ -822,17 +796,14 @@ TcpOnAppConsume (
 \r
   switch (Tcb->State) {\r
   case TCP_CLOSED:\r
-    return -1;\r
-    break;\r
+    return;\r
 \r
   case TCP_LISTEN:\r
-    return -1;\r
-    break;\r
+    return;\r
 \r
   case TCP_SYN_SENT:\r
   case TCP_SYN_RCVD:\r
-    return 0;\r
-    break;\r
+    return;\r
 \r
   case TCP_ESTABLISHED:\r
     TcpOld = TcpRcvWinOld (Tcb);\r
@@ -841,13 +812,13 @@ TcpOnAppConsume (
       if (TcpOld < Tcb->RcvMss) {\r
 \r
         DEBUG ((EFI_D_INFO, "TcpOnAppConsume: send a window"\r
-          " update for a window closed Tcb(%x)\n", Tcb));\r
+          " update for a window closed Tcb %p\n", Tcb));\r
 \r
         TcpSendAck (Tcb);\r
       } else if (Tcb->DelayedAck == 0) {\r
 \r
         DEBUG ((EFI_D_INFO, "TcpOnAppConsume: scheduled a delayed"\r
-          " ACK to update window for Tcb(%x)\n", Tcb));\r
+          " ACK to update window for Tcb %p\n", Tcb));\r
 \r
         Tcb->DelayedAck = 1;\r
       }\r
@@ -856,19 +827,18 @@ TcpOnAppConsume (
     break;\r
 \r
   case TCP_CLOSE_WAIT:\r
-    return 0;\r
-    break;\r
+    return;\r
 \r
   case TCP_FIN_WAIT_1:\r
   case TCP_FIN_WAIT_2:\r
   case TCP_CLOSING:\r
   case TCP_LAST_ACK:\r
   case TCP_TIME_WAIT:\r
-    return -1;\r
+    return;\r
+\r
+  default:\r
     break;\r
   }\r
-\r
-  return -1;\r
 }\r
 \r
 \r
@@ -878,8 +848,6 @@ TcpOnAppConsume (
 \r
   @param  Tcb                   Pointer to the TCP_CB of the TCP instance.\r
 \r
-  @return None.\r
-\r
 **/\r
 VOID\r
 TcpOnAppAbort (\r
@@ -887,7 +855,7 @@ TcpOnAppAbort (
   )\r
 {\r
   DEBUG ((EFI_D_WARN, "TcpOnAppAbort: connection reset "\r
-    "issued by application for TCB %x\n", Tcb));\r
+    "issued by application for TCB %p\n", Tcb));\r
 \r
   switch (Tcb->State) {\r
   case TCP_SYN_RCVD:\r
@@ -897,6 +865,8 @@ TcpOnAppAbort (
   case TCP_CLOSE_WAIT:\r
     TcpResetConnection (Tcb);\r
     break;\r
+  default:\r
+    break;\r
   }\r
 \r
   TcpSetState (Tcb, TCP_CLOSED);\r
@@ -906,7 +876,7 @@ TcpOnAppAbort (
 /**\r
   Set the Tdp4 variable data.\r
 \r
-  @param  Tcp4Service           Tcp4 service data.\r
+  @param  Tcp4Service           Pointer to Tcp4 service data.\r
 \r
   @retval EFI_OUT_OF_RESOURCES  There are not enough resources to set the variable.\r
   @retval other                 Set variable failed.\r
@@ -1055,7 +1025,7 @@ TcpSetVariableData (
              );\r
     }\r
 \r
-    gBS->FreePool (Tcp4Service->MacString);\r
+    FreePool (Tcp4Service->MacString);\r
   }\r
 \r
   Tcp4Service->MacString = NewMacString;\r
@@ -1070,7 +1040,7 @@ TcpSetVariableData (
 \r
 ON_ERROR:\r
 \r
-  gBS->FreePool (Tcp4VariableData);\r
+  FreePool (Tcp4VariableData);\r
 \r
   return Status;\r
 }\r
@@ -1079,9 +1049,7 @@ ON_ERROR:
 /**\r
   Clear the variable and free the resource.\r
 \r
-  @param  Tcp4Service           Tcp4 service data.\r
-\r
-  @return None.\r
+  @param  Tcp4Service           Pointer to Tcp4 service data.\r
 \r
 **/\r
 VOID\r
@@ -1099,56 +1067,53 @@ TcpClearVariableData (
          NULL\r
          );\r
 \r
-  gBS->FreePool (Tcp4Service->MacString);\r
+  FreePool (Tcp4Service->MacString);\r
   Tcp4Service->MacString = NULL;\r
 }\r
 \r
-EFI_STATUS\r
-TcpInstallDevicePath (\r
-  IN SOCKET *Sock\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
+/**\r
   Install the device path protocol on the TCP instance.\r
 \r
-Arguments:\r
+  @param  Sock             Pointer to the socket representing the TCP instance.\r
 \r
-  Sock - Pointer to the socket representing the TCP instance.\r
+  @retval  EFI_SUCCESS     The device path protocol is installed.\r
+  @retval  other           Failed to install the device path protocol.\r
 \r
-Returns:\r
-\r
-  EFI_SUCCESS - The device path protocol is installed.\r
-  other       - Failed to install the device path protocol.\r
-\r
---*/\r
+**/\r
+EFI_STATUS\r
+TcpInstallDevicePath (\r
+  IN SOCKET *Sock\r
+  )\r
 {\r
   TCP4_PROTO_DATA    *TcpProto;\r
   TCP4_SERVICE_DATA  *TcpService;\r
   TCP_CB             *Tcb;\r
   IPv4_DEVICE_PATH   Ip4DPathNode;\r
   EFI_STATUS         Status;\r
+  TCP_PORTNO         LocalPort;\r
+  TCP_PORTNO         RemotePort;\r
 \r
   TcpProto   = (TCP4_PROTO_DATA *) Sock->ProtoReserved;\r
   TcpService = TcpProto->TcpService;\r
   Tcb        = TcpProto->TcpPcb;\r
 \r
+  LocalPort = NTOHS (Tcb->LocalEnd.Port);\r
+  RemotePort = NTOHS (Tcb->RemoteEnd.Port);\r
   NetLibCreateIPv4DPathNode (\r
     &Ip4DPathNode,\r
     TcpService->ControllerHandle,\r
     Tcb->LocalEnd.Ip,\r
-    NTOHS (Tcb->LocalEnd.Port),\r
+    LocalPort,\r
     Tcb->RemoteEnd.Ip,\r
-    NTOHS (Tcb->RemoteEnd.Port),\r
+    RemotePort,\r
     EFI_IP_PROTO_TCP,\r
     Tcb->UseDefaultAddr\r
     );\r
 \r
   Sock->DevicePath = AppendDevicePathNode (\r
-                     Sock->ParentDevicePath,\r
-                     (EFI_DEVICE_PATH_PROTOCOL *) &Ip4DPathNode\r
-                     );\r
+                       Sock->ParentDevicePath,\r
+                       (EFI_DEVICE_PATH_PROTOCOL *) &Ip4DPathNode\r
+                       );\r
   if (Sock->DevicePath == NULL) {\r
     return EFI_OUT_OF_RESOURCES;\r
   }\r
@@ -1160,7 +1125,7 @@ Returns:
                   Sock->DevicePath\r
                   );\r
   if (EFI_ERROR (Status)) {\r
-    gBS->FreePool (Sock->DevicePath);\r
+    FreePool (Sock->DevicePath);\r
   }\r
 \r
   return Status;\r