/** @file\r
+ Routines to process TCP option.\r
\r
-Copyright (c) 2005 - 2006, Intel Corporation\r
-All rights reserved. This program and the accompanying materials\r
+Copyright (c) 2005 - 2018, 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
\r
- Tcp4Option.c\r
+#include "Tcp4Main.h"\r
\r
-Abstract:\r
+/**\r
+ Get a UINT16 value from buffer.\r
\r
- Routines to process TCP option.\r
+ @param Buf Pointer to input buffer.\r
\r
+ @return The UINT16 value get from buffer.\r
\r
**/\r
-\r
-#include "Tcp4Main.h"\r
-\r
-STATIC\r
UINT16\r
TcpGetUint16 (\r
IN UINT8 *Buf\r
return NTOHS (Value);\r
}\r
\r
-// STATIC\r
-// VOID\r
-// TcpPutUint16 (\r
-// IN UINT8 *Buf,\r
-// IN UINT16 Data\r
-// )\r
-// {\r
-// Data = HTONS (Data);\r
-// CopyMem (Buf, &Data, sizeof (UINT16));\r
-// }\r
-\r
-STATIC\r
+/**\r
+ Get a UINT32 value from buffer.\r
+\r
+ @param Buf Pointer to input buffer.\r
+\r
+ @return The UINT32 value get from buffer.\r
+\r
+**/\r
UINT32\r
TcpGetUint32 (\r
IN UINT8 *Buf\r
return NTOHL (Value);\r
}\r
\r
-STATIC\r
+/**\r
+ Put a UINT32 value in buffer.\r
+\r
+ @param Buf Pointer to the buffer.\r
+ @param Data The UINT32 Date to put in buffer\r
+\r
+**/\r
VOID\r
TcpPutUint32 (\r
- IN UINT8 *Buf,\r
- IN UINT32 Data\r
+ OUT UINT8 *Buf,\r
+ IN UINT32 Data\r
)\r
{\r
Data = HTONL (Data);\r
\r
\r
/**\r
- Compute the window scale value according to the given\r
- buffer size.\r
+ Compute the window scale value according to the given buffer size.\r
\r
@param Tcb Pointer to the TCP_CB of this TCP instance.\r
\r
- @retval UINT8 The scale value.\r
+ @return The scale value.\r
\r
**/\r
UINT8\r
UINT8 Scale;\r
UINT32 BufSize;\r
\r
- ASSERT (Tcb && Tcb->Sk);\r
+ ASSERT ((Tcb != NULL) && (Tcb->Sk != NULL));\r
\r
BufSize = GET_RCV_BUFFSIZE (Tcb->Sk);\r
\r
@param Tcb Pointer to the TCP_CB of this TCP instance.\r
@param Nbuf Pointer to the buffer to store the options.\r
\r
- @return The total length of the TCP option field.\r
+ @return The total length of the TCP option field.\r
\r
**/\r
UINT16\r
UINT8 *Data;\r
UINT16 Len;\r
\r
- ASSERT (Tcb && Nbuf && !Nbuf->Tcp);\r
+ ASSERT ((Tcb != NULL) && (Nbuf != NULL) && (Nbuf->Tcp == NULL));\r
\r
Len = 0;\r
\r
//\r
if (!TCP_FLG_ON (Tcb->CtrlFlag, TCP_CTRL_NO_TS) &&\r
(!TCP_FLG_ON (TCPSEG_NETBUF (Nbuf)->Flag, TCP_FLG_ACK) ||\r
- TCP_FLG_ON (Tcb->CtrlFlag, TCP_CTRL_RCVD_TS))) {\r
+ TCP_FLG_ON (Tcb->CtrlFlag, TCP_CTRL_RCVD_TS))) {\r
\r
Data = NetbufAllocSpace (\r
Nbuf,\r
NET_BUF_HEAD\r
);\r
\r
- ASSERT (Data);\r
+ ASSERT (Data != NULL);\r
Len += TCP_OPTION_TS_ALIGNED_LEN;\r
\r
TcpPutUint32 (Data, TCP_OPTION_TS_FAST);\r
//\r
if (!TCP_FLG_ON (Tcb->CtrlFlag, TCP_CTRL_NO_WS) &&\r
(!TCP_FLG_ON (TCPSEG_NETBUF (Nbuf)->Flag, TCP_FLG_ACK) ||\r
- TCP_FLG_ON (Tcb->CtrlFlag, TCP_CTRL_RCVD_WS))) {\r
+ TCP_FLG_ON (Tcb->CtrlFlag, TCP_CTRL_RCVD_WS))) {\r
\r
Data = NetbufAllocSpace (\r
Nbuf,\r
NET_BUF_HEAD\r
);\r
\r
- ASSERT (Data);\r
+ ASSERT (Data != NULL);\r
\r
Len += TCP_OPTION_WS_ALIGNED_LEN;\r
TcpPutUint32 (Data, TCP_OPTION_WS_FAST | TcpComputeScale (Tcb));\r
// Build MSS option\r
//\r
Data = NetbufAllocSpace (Nbuf, TCP_OPTION_MSS_LEN, 1);\r
- ASSERT (Data);\r
+ ASSERT (Data != NULL);\r
\r
Len += TCP_OPTION_MSS_LEN;\r
TcpPutUint32 (Data, TCP_OPTION_MSS_FAST | Tcb->RcvMss);\r
@param Tcb Pointer to the TCP_CB of this TCP instance.\r
@param Nbuf Pointer to the buffer to store the options.\r
\r
- @return The total length of the TCP option field.\r
+ @return The total length of the TCP option field.\r
\r
**/\r
UINT16\r
UINT8 *Data;\r
UINT16 Len;\r
\r
- ASSERT (Tcb && Nbuf && !Nbuf->Tcp);\r
+ ASSERT ((Tcb != NULL) && (Nbuf != NULL) && (Nbuf->Tcp == NULL));\r
Len = 0;\r
\r
//\r
NET_BUF_HEAD\r
);\r
\r
- ASSERT (Data);\r
+ ASSERT (Data != NULL);\r
Len += TCP_OPTION_TS_ALIGNED_LEN;\r
\r
TcpPutUint32 (Data, TCP_OPTION_TS_FAST);\r
**/\r
INTN\r
TcpParseOption (\r
- IN TCP_HEAD *Tcp,\r
- IN TCP_OPTION *Option\r
+ IN TCP_HEAD *Tcp,\r
+ IN OUT TCP_OPTION *Option\r
)\r
{\r
UINT8 *Head;\r
UINT8 Type;\r
UINT8 Len;\r
\r
- ASSERT (Tcp && Option);\r
+ ASSERT ((Tcp != NULL) && (Option != NULL));\r
\r
Option->Flag = 0;\r
\r
default:\r
Len = Head[Cur + 1];\r
\r
- if (TotalLen - Cur < Len || Len < 2) {\r
+ if ((TotalLen - Cur) < Len || Len < 2) {\r
return -1;\r
}\r
\r
}\r
\r
\r
-/**\r
- Check the segment against PAWS.\r
-\r
- @param Tcb Pointer to the TCP_CB of this TCP instance.\r
- @param TSVal The timestamp value.\r
-\r
- @retval 1 The segment passed the PAWS check.\r
- @retval 0 The segment failed to pass the PAWS check.\r
-\r
-**/\r
-UINT32\r
-TcpPawsOK (\r
- IN TCP_CB *Tcb,\r
- IN UINT32 TSVal\r
- )\r
-{\r
- //\r
- // PAWS as defined in RFC1323, buggy...\r
- //\r
- if (TCP_TIME_LT (TSVal, Tcb->TsRecent) &&\r
- TCP_TIME_LT (Tcb->TsRecentAge + TCP_PAWS_24DAY, mTcpTick)) {\r
-\r
- return 0;\r
-\r
- }\r
-\r
- return 1;\r
-}\r