/** @file | |
Tcp option's routine header file. | |
Copyright (c) 2005 - 2006, Intel Corporation<BR> | |
All rights reserved. This program and the accompanying materials | |
are licensed and made available under the terms and conditions of the BSD License | |
which accompanies this distribution. The full text of the license may be found at | |
http://opensource.org/licenses/bsd-license.php<BR> | |
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, | |
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. | |
**/ | |
#ifndef _TCP4_OPTION_H_ | |
#define _TCP4_OPTION_H_ | |
/// | |
/// The structure to store the parse option value. | |
/// ParseOption only parse the options, don't process them. | |
/// | |
typedef struct _TCP_OPTION { | |
UINT8 Flag; ///< Flag such as TCP_OPTION_RCVD_MSS | |
UINT8 WndScale; ///< The WndScale received | |
UINT16 Mss; ///< The Mss received | |
UINT32 TSVal; ///< The TSVal field in a timestamp option | |
UINT32 TSEcr; ///< The TSEcr field in a timestamp option | |
} TCP_OPTION; | |
typedef enum { | |
// | |
// supported TCP option type and their length | |
// | |
TCP_OPTION_EOP = 0, ///< End Of oPtion | |
TCP_OPTION_NOP = 1, ///< No-Option. | |
TCP_OPTION_MSS = 2, ///< Maximum Segment Size | |
TCP_OPTION_WS = 3, ///< Window scale | |
TCP_OPTION_TS = 8, ///< Timestamp | |
TCP_OPTION_MSS_LEN = 4, ///< Length of MSS option | |
TCP_OPTION_WS_LEN = 3, ///< Length of window scale option | |
TCP_OPTION_TS_LEN = 10, ///< Length of timestamp option | |
TCP_OPTION_WS_ALIGNED_LEN = 4, ///< Length of window scale option, aligned | |
TCP_OPTION_TS_ALIGNED_LEN = 12, ///< Length of timestamp option, aligned | |
// | |
// recommend format of timestamp window scale | |
// option for fast process. | |
// | |
TCP_OPTION_TS_FAST = ((TCP_OPTION_NOP << 24) | | |
(TCP_OPTION_NOP << 16) | | |
(TCP_OPTION_TS << 8) | | |
TCP_OPTION_TS_LEN), | |
TCP_OPTION_WS_FAST = ((TCP_OPTION_NOP << 24) | | |
(TCP_OPTION_WS << 16) | | |
(TCP_OPTION_WS_LEN << 8)), | |
TCP_OPTION_MSS_FAST = ((TCP_OPTION_MSS << 24) | | |
(TCP_OPTION_MSS_LEN << 16)), | |
// | |
// Other misc definations | |
// | |
TCP_OPTION_RCVD_MSS = 0x01, | |
TCP_OPTION_RCVD_WS = 0x02, | |
TCP_OPTION_RCVD_TS = 0x04, | |
TCP_OPTION_MAX_WS = 14, ///< Maxium window scale value | |
TCP_OPTION_MAX_WIN = 0xffff ///< Max window size in TCP header | |
} TCP_OPTION_TYPE; | |
/** | |
Compute the window scale value according to the given buffer size. | |
@param Tcb Pointer to the TCP_CB of this TCP instance. | |
@return The scale value. | |
**/ | |
UINT8 | |
TcpComputeScale ( | |
IN TCP_CB *Tcb | |
); | |
/** | |
Build the TCP option in three-way handshake. | |
@param Tcb Pointer to the TCP_CB of this TCP instance. | |
@param Nbuf Pointer to the buffer to store the options. | |
@return The total length of the TCP option field. | |
**/ | |
UINT16 | |
TcpSynBuildOption ( | |
IN TCP_CB *Tcb, | |
IN NET_BUF *Nbuf | |
); | |
/** | |
Build the TCP option in synchronized states. | |
@param Tcb Pointer to the TCP_CB of this TCP instance. | |
@param Nbuf Pointer to the buffer to store the options. | |
@return The total length of the TCP option field. | |
**/ | |
UINT16 | |
TcpBuildOption ( | |
IN TCP_CB *Tcb, | |
IN NET_BUF *Nbuf | |
); | |
/** | |
Parse the supported options. | |
@param Tcp Pointer to the TCP_CB of this TCP instance. | |
@param Option Pointer to the TCP_OPTION used to store the successfully pasrsed | |
options. | |
@retval 0 The options are successfully pasrsed. | |
@retval -1 Ilegal option was found. | |
**/ | |
INTN | |
TcpParseOption ( | |
IN TCP_HEAD *Tcp, | |
IN OUT TCP_OPTION *Option | |
); | |
/** | |
Check the segment against PAWS. | |
@param Tcb Pointer to the TCP_CB of this TCP instance. | |
@param TSVal The timestamp value. | |
@retval 1 The segment passed the PAWS check. | |
@retval 0 The segment failed to pass the PAWS check. | |
**/ | |
UINT32 | |
TcpPawsOK ( | |
IN TCP_CB *Tcb, | |
IN UINT32 TSVal | |
); | |
#endif |