2007-09-30 05:08:02 +02:00
|
|
|
/** @file
|
2009-01-16 07:56:18 +01:00
|
|
|
Tcp option's routine header file.
|
2008-12-16 03:57:53 +01:00
|
|
|
|
2010-04-24 11:33:45 +02:00
|
|
|
Copyright (c) 2005 - 2009, Intel Corporation. All rights reserved.<BR>
|
|
|
|
This program and the accompanying materials
|
2007-09-30 05:08:02 +02:00
|
|
|
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
|
2008-12-16 03:57:53 +01:00
|
|
|
http://opensource.org/licenses/bsd-license.php<BR>
|
2007-09-30 05:08:02 +02:00
|
|
|
|
|
|
|
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_
|
|
|
|
|
2008-12-16 03:57:53 +01:00
|
|
|
///
|
|
|
|
/// 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
|
2007-09-30 05:08:02 +02:00
|
|
|
} TCP_OPTION;
|
|
|
|
|
2009-11-04 09:18:34 +01:00
|
|
|
//
|
|
|
|
// supported TCP option type and their length
|
|
|
|
//
|
|
|
|
#define TCP_OPTION_EOP 0 ///< End Of oPtion
|
|
|
|
#define TCP_OPTION_NOP 1 ///< No-Option.
|
|
|
|
#define TCP_OPTION_MSS 2 ///< Maximum Segment Size
|
|
|
|
#define TCP_OPTION_WS 3 ///< Window scale
|
|
|
|
#define TCP_OPTION_TS 8 ///< Timestamp
|
|
|
|
#define TCP_OPTION_MSS_LEN 4 ///< Length of MSS option
|
|
|
|
#define TCP_OPTION_WS_LEN 3 ///< Length of window scale option
|
|
|
|
#define TCP_OPTION_TS_LEN 10 ///< Length of timestamp option
|
|
|
|
#define TCP_OPTION_WS_ALIGNED_LEN 4 ///< Length of window scale option, aligned
|
|
|
|
#define TCP_OPTION_TS_ALIGNED_LEN 12 ///< Length of timestamp option, aligned
|
|
|
|
|
|
|
|
//
|
|
|
|
// recommend format of timestamp window scale
|
|
|
|
// option for fast process.
|
|
|
|
//
|
|
|
|
#define TCP_OPTION_TS_FAST ((TCP_OPTION_NOP << 24) | \
|
|
|
|
(TCP_OPTION_NOP << 16) | \
|
|
|
|
(TCP_OPTION_TS << 8) | \
|
|
|
|
(TCP_OPTION_TS_LEN))
|
|
|
|
|
|
|
|
#define TCP_OPTION_WS_FAST ((TCP_OPTION_NOP << 24) | \
|
|
|
|
(TCP_OPTION_WS << 16) | \
|
|
|
|
(TCP_OPTION_WS_LEN << 8))
|
|
|
|
|
|
|
|
#define TCP_OPTION_MSS_FAST ((TCP_OPTION_MSS << 24) | (TCP_OPTION_MSS_LEN << 16))
|
|
|
|
|
|
|
|
//
|
|
|
|
// Other misc definations
|
|
|
|
//
|
|
|
|
#define TCP_OPTION_RCVD_MSS 0x01
|
|
|
|
#define TCP_OPTION_RCVD_WS 0x02
|
|
|
|
#define TCP_OPTION_RCVD_TS 0x04
|
|
|
|
#define TCP_OPTION_MAX_WS 14 ///< Maxium window scale value
|
|
|
|
#define TCP_OPTION_MAX_WIN 0xffff ///< Max window size in TCP header
|
|
|
|
|
2007-09-30 05:08:02 +02:00
|
|
|
|
2008-12-16 03:57:53 +01:00
|
|
|
/**
|
|
|
|
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.
|
|
|
|
|
|
|
|
**/
|
2007-09-30 05:08:02 +02:00
|
|
|
UINT8
|
|
|
|
TcpComputeScale (
|
|
|
|
IN TCP_CB *Tcb
|
|
|
|
);
|
|
|
|
|
2008-12-16 03:57:53 +01:00
|
|
|
/**
|
|
|
|
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.
|
|
|
|
|
|
|
|
**/
|
2007-09-30 05:08:02 +02:00
|
|
|
UINT16
|
|
|
|
TcpSynBuildOption (
|
|
|
|
IN TCP_CB *Tcb,
|
2008-12-16 03:57:53 +01:00
|
|
|
IN NET_BUF *Nbuf
|
2007-09-30 05:08:02 +02:00
|
|
|
);
|
|
|
|
|
2008-12-16 03:57:53 +01:00
|
|
|
/**
|
|
|
|
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.
|
|
|
|
|
|
|
|
**/
|
2007-09-30 05:08:02 +02:00
|
|
|
UINT16
|
|
|
|
TcpBuildOption (
|
|
|
|
IN TCP_CB *Tcb,
|
2008-12-16 03:57:53 +01:00
|
|
|
IN NET_BUF *Nbuf
|
2007-09-30 05:08:02 +02:00
|
|
|
);
|
|
|
|
|
2008-12-16 03:57:53 +01:00
|
|
|
/**
|
|
|
|
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.
|
|
|
|
|
|
|
|
**/
|
2007-09-30 05:08:02 +02:00
|
|
|
INTN
|
|
|
|
TcpParseOption (
|
2008-12-29 13:58:38 +01:00
|
|
|
IN TCP_HEAD *Tcp,
|
|
|
|
IN OUT TCP_OPTION *Option
|
2007-09-30 05:08:02 +02:00
|
|
|
);
|
|
|
|
|
2008-12-16 03:57:53 +01:00
|
|
|
/**
|
|
|
|
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.
|
|
|
|
|
|
|
|
**/
|
2007-09-30 05:08:02 +02:00
|
|
|
UINT32
|
|
|
|
TcpPawsOK (
|
|
|
|
IN TCP_CB *Tcb,
|
|
|
|
IN UINT32 TSVal
|
|
|
|
);
|
|
|
|
|
|
|
|
#endif
|