1 /** @file 2 Tcp option's routine header file. 3 4 Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR> 5 6 SPDX-License-Identifier: BSD-2-Clause-Patent 7 8 **/ 9 10 #ifndef _TCP_OPTION_H_ 11 #define _TCP_OPTION_H_ 12 13 // 14 // Supported TCP option types and their length. 15 // 16 #define TCP_OPTION_EOP 0 ///< End Of oPtion 17 #define TCP_OPTION_NOP 1 ///< No-Option. 18 #define TCP_OPTION_MSS 2 ///< Maximum Segment Size 19 #define TCP_OPTION_WS 3 ///< Window scale 20 #define TCP_OPTION_TS 8 ///< Timestamp 21 #define TCP_OPTION_MSS_LEN 4 ///< Length of MSS option 22 #define TCP_OPTION_WS_LEN 3 ///< Length of window scale option 23 #define TCP_OPTION_TS_LEN 10 ///< Length of timestamp option 24 #define TCP_OPTION_WS_ALIGNED_LEN 4 ///< Length of window scale option, aligned 25 #define TCP_OPTION_TS_ALIGNED_LEN 12 ///< Length of timestamp option, aligned 26 27 // 28 // recommend format of timestamp window scale 29 // option for fast process. 30 // 31 #define TCP_OPTION_TS_FAST ((TCP_OPTION_NOP << 24) | \ 32 (TCP_OPTION_NOP << 16) | \ 33 (TCP_OPTION_TS << 8) | \ 34 (TCP_OPTION_TS_LEN)) 35 36 #define TCP_OPTION_WS_FAST ((TCP_OPTION_NOP << 24) | \ 37 (TCP_OPTION_WS << 16) | \ 38 (TCP_OPTION_WS_LEN << 8)) 39 40 #define TCP_OPTION_MSS_FAST ((TCP_OPTION_MSS << 24) | (TCP_OPTION_MSS_LEN << 16)) 41 42 // 43 // Other misc definations 44 // 45 #define TCP_OPTION_RCVD_MSS 0x01 46 #define TCP_OPTION_RCVD_WS 0x02 47 #define TCP_OPTION_RCVD_TS 0x04 48 #define TCP_OPTION_MAX_WS 14 ///< Maxium window scale value 49 #define TCP_OPTION_MAX_WIN 0xffff ///< Max window size in TCP header 50 51 /// 52 /// The structure to store the parse option value. 53 /// ParseOption only parses the options, doesn't process them. 54 /// 55 typedef struct _TCP_OPTION { 56 UINT8 Flag; ///< Flag such as TCP_OPTION_RCVD_MSS 57 UINT8 WndScale; ///< The WndScale received 58 UINT16 Mss; ///< The Mss received 59 UINT32 TSVal; ///< The TSVal field in a timestamp option 60 UINT32 TSEcr; ///< The TSEcr field in a timestamp option 61 } TCP_OPTION; 62 63 /** 64 Compute the window scale value according to the given buffer size. 65 66 @param[in] Tcb Pointer to the TCP_CB of this TCP instance. 67 68 @return The scale value. 69 70 **/ 71 UINT8 72 TcpComputeScale ( 73 IN TCP_CB *Tcb 74 ); 75 76 /** 77 Build the TCP option in three-way handshake. 78 79 @param[in] Tcb Pointer to the TCP_CB of this TCP instance. 80 @param[in] Nbuf Pointer to the buffer to store the options. 81 82 @return The total length of the TCP option field. 83 84 **/ 85 UINT16 86 TcpSynBuildOption ( 87 IN TCP_CB *Tcb, 88 IN NET_BUF *Nbuf 89 ); 90 91 /** 92 Build the TCP option in synchronized states. 93 94 @param[in] Tcb Pointer to the TCP_CB of this TCP instance. 95 @param[in] Nbuf Pointer to the buffer to store the options. 96 97 @return The total length of the TCP option field. 98 99 **/ 100 UINT16 101 TcpBuildOption ( 102 IN TCP_CB *Tcb, 103 IN NET_BUF *Nbuf 104 ); 105 106 /** 107 Parse the supported options. 108 109 @param[in] Tcp Pointer to the TCP_CB of this TCP instance. 110 @param[in, out] Option Pointer to the TCP_OPTION used to store the 111 successfully pasrsed options. 112 113 @retval 0 The options successfully pasrsed. 114 @retval -1 Ilegal option was found. 115 116 **/ 117 INTN 118 TcpParseOption ( 119 IN TCP_HEAD *Tcp, 120 IN OUT TCP_OPTION *Option 121 ); 122 123 #endif 124