• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /** @file
2   Tcp option's routine header file.
3 
4   Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.<BR>
5 
6   This program and the accompanying materials
7   are licensed and made available under the terms and conditions of the BSD License
8   which accompanies this distribution.  The full text of the license may be found at
9   http://opensource.org/licenses/bsd-license.php.
10 
11   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
12   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
13 
14 **/
15 
16 #ifndef _TCP_OPTION_H_
17 #define _TCP_OPTION_H_
18 
19 //
20 // Supported TCP option types and their length.
21 //
22 #define TCP_OPTION_EOP             0  ///< End Of oPtion
23 #define TCP_OPTION_NOP             1  ///< No-Option.
24 #define TCP_OPTION_MSS             2  ///< Maximum Segment Size
25 #define TCP_OPTION_WS              3  ///< Window scale
26 #define TCP_OPTION_TS              8  ///< Timestamp
27 #define TCP_OPTION_MSS_LEN         4  ///< Length of MSS option
28 #define TCP_OPTION_WS_LEN          3  ///< Length of window scale option
29 #define TCP_OPTION_TS_LEN          10 ///< Length of timestamp option
30 #define TCP_OPTION_WS_ALIGNED_LEN  4  ///< Length of window scale option, aligned
31 #define TCP_OPTION_TS_ALIGNED_LEN  12 ///< Length of timestamp option, aligned
32 
33 //
34 // recommend format of timestamp window scale
35 // option for fast process.
36 //
37 #define TCP_OPTION_TS_FAST ((TCP_OPTION_NOP << 24) | \
38                             (TCP_OPTION_NOP << 16) | \
39                             (TCP_OPTION_TS << 8)   | \
40                             (TCP_OPTION_TS_LEN))
41 
42 #define TCP_OPTION_WS_FAST   ((TCP_OPTION_NOP << 24) | \
43                               (TCP_OPTION_WS << 16)  | \
44                               (TCP_OPTION_WS_LEN << 8))
45 
46 #define TCP_OPTION_MSS_FAST  ((TCP_OPTION_MSS << 24) | (TCP_OPTION_MSS_LEN << 16))
47 
48 //
49 // Other misc definations
50 //
51 #define TCP_OPTION_RCVD_MSS        0x01
52 #define TCP_OPTION_RCVD_WS         0x02
53 #define TCP_OPTION_RCVD_TS         0x04
54 #define TCP_OPTION_MAX_WS          14      ///< Maxium window scale value
55 #define TCP_OPTION_MAX_WIN         0xffff  ///< Max window size in TCP header
56 
57 ///
58 /// The structure to store the parse option value.
59 /// ParseOption only parses the options, doesn't process them.
60 ///
61 typedef struct _TCP_OPTION {
62   UINT8   Flag;     ///< Flag such as TCP_OPTION_RCVD_MSS
63   UINT8   WndScale; ///< The WndScale received
64   UINT16  Mss;      ///< The Mss received
65   UINT32  TSVal;    ///< The TSVal field in a timestamp option
66   UINT32  TSEcr;    ///< The TSEcr field in a timestamp option
67 } TCP_OPTION;
68 
69 /**
70   Compute the window scale value according to the given buffer size.
71 
72   @param[in]  Tcb Pointer to the TCP_CB of this TCP instance.
73 
74   @return         The scale value.
75 
76 **/
77 UINT8
78 TcpComputeScale (
79   IN TCP_CB *Tcb
80   );
81 
82 /**
83   Build the TCP option in three-way handshake.
84 
85   @param[in]  Tcb     Pointer to the TCP_CB of this TCP instance.
86   @param[in]  Nbuf    Pointer to the buffer to store the options.
87 
88   @return             The total length of the TCP option field.
89 
90 **/
91 UINT16
92 TcpSynBuildOption (
93   IN TCP_CB  *Tcb,
94   IN NET_BUF *Nbuf
95   );
96 
97 /**
98   Build the TCP option in synchronized states.
99 
100   @param[in]  Tcb     Pointer to the TCP_CB of this TCP instance.
101   @param[in]  Nbuf    Pointer to the buffer to store the options.
102 
103   @return             The total length of the TCP option field.
104 
105 **/
106 UINT16
107 TcpBuildOption (
108   IN TCP_CB  *Tcb,
109   IN NET_BUF *Nbuf
110   );
111 
112 /**
113   Parse the supported options.
114 
115   @param[in]       Tcp     Pointer to the TCP_CB of this TCP instance.
116   @param[in, out]  Option  Pointer to the TCP_OPTION used to store the
117                            successfully pasrsed options.
118 
119   @retval          0       The options successfully pasrsed.
120   @retval          -1      Ilegal option was found.
121 
122 **/
123 INTN
124 TcpParseOption (
125   IN     TCP_HEAD   *Tcp,
126   IN OUT TCP_OPTION *Option
127   );
128 
129 /**
130   Check the segment against PAWS.
131 
132   @param[in]  Tcb     Pointer to the TCP_CB of this TCP instance.
133   @param[in]  TSVal   The timestamp value.
134 
135   @retval     1       The segment passed the PAWS check.
136   @retval     0       The segment failed to pass the PAWS check.
137 
138 **/
139 UINT32
140 TcpPawsOK (
141   IN TCP_CB *Tcb,
142   IN UINT32 TSVal
143   );
144 
145 #endif
146