FD.io VPP
v17.01.1-3-gc6833f8
Vector Packet Processing
Main Page
Related Pages
Data Structures
Source
Files
Symbols
tcp_packet.h
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2015 Cisco and/or its affiliates.
3
* Licensed under the Apache License, Version 2.0 (the "License");
4
* you may not use this file except in compliance with the License.
5
* You may obtain a copy of the License at:
6
*
7
* http://www.apache.org/licenses/LICENSE-2.0
8
*
9
* Unless required by applicable law or agreed to in writing, software
10
* distributed under the License is distributed on an "AS IS" BASIS,
11
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
* See the License for the specific language governing permissions and
13
* limitations under the License.
14
*/
15
/*
16
* ip4/tcp_packet.h: TCP packet format (see RFC 793)
17
*
18
* Copyright (c) 2008 Eliot Dresselhaus
19
*
20
* Permission is hereby granted, free of charge, to any person obtaining
21
* a copy of this software and associated documentation files (the
22
* "Software"), to deal in the Software without restriction, including
23
* without limitation the rights to use, copy, modify, merge, publish,
24
* distribute, sublicense, and/or sell copies of the Software, and to
25
* permit persons to whom the Software is furnished to do so, subject to
26
* the following conditions:
27
*
28
* The above copyright notice and this permission notice shall be
29
* included in all copies or substantial portions of the Software.
30
*
31
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
32
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
33
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
34
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
35
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
36
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
37
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
38
*/
39
40
#ifndef included_tcp_packet_h
41
#define included_tcp_packet_h
42
43
/* TCP flags bit 0 first. */
44
#define foreach_tcp_flag \
45
_ (FIN) \
46
_ (SYN) \
47
_ (RST) \
48
_ (PSH) \
49
_ (ACK) \
50
_ (URG) \
51
_ (ECE) \
52
_ (CWR)
53
54
enum
55
{
56
#define _(f) TCP_FLAG_BIT_##f,
57
foreach_tcp_flag
58
#undef _
59
TCP_N_FLAG_BITS
,
60
61
#define _(f) TCP_FLAG_##f = 1 << TCP_FLAG_BIT_##f,
62
foreach_tcp_flag
63
#undef _
64
};
65
66
typedef
struct
67
{
68
/* Source and destination port. */
69
union
70
{
71
union
72
{
73
struct
74
{
75
u16
src
, dst;
76
};
77
u32
src_and_dst
;
78
} ports;
79
u16
src_port
, dst_port;
80
};
81
82
/* Sequence and acknowledgment number. */
83
u32
seq_number
, ack_number;
84
85
/* Size of TCP header in 32-bit units plus 4 reserved bits. */
86
u8
tcp_header_u32s_and_reserved
;
87
88
/* see foreach_tcp_flag for enumation of tcp flags. */
89
u8
flags
;
90
91
/* Current window advertised by sender.
92
This is the number of bytes sender is willing to receive
93
right now. */
94
u16
window
;
95
96
/* Checksum of TCP pseudo header and data. */
97
u16
checksum
;
98
99
u16
urgent_pointer
;
100
}
tcp_header_t
;
101
102
always_inline
int
103
tcp_header_bytes
(
tcp_header_t
* t)
104
{
105
return
(t->
tcp_header_u32s_and_reserved
>> 4) *
sizeof
(
u32
);
106
}
107
108
/* TCP options. */
109
typedef
enum
tcp_option_type
110
{
111
TCP_OPTION_END
= 0,
112
TCP_OPTION_NOP
= 1,
113
TCP_OPTION_MSS
= 2,
114
TCP_OPTION_WINDOW_SCALE
= 3,
115
TCP_OPTION_SACK_PERMITTED
= 4,
116
TCP_OPTION_SACK_BLOCK
= 5,
117
TCP_OPTION_TIME_STAMP
= 8,
118
}
tcp_option_type_t
;
119
120
/* All except NOP and END have 1 byte length field. */
121
typedef
struct
122
{
123
tcp_option_type_t
type
:8;
124
125
/* Length of this option in bytes. */
126
u8
length
;
127
}
tcp_option_with_length_t
;
128
129
#endif
/* included_tcp_packet_h */
130
131
132
/*
133
* fd.io coding-style-patch-verification: ON
134
*
135
* Local Variables:
136
* eval: (c-set-style "gnu")
137
* End:
138
*/
tcp_header_t::flags
u8 flags
Definition:
tcp_packet.h:89
type
bad routing header type(not 4)") sr_error (NO_MORE_SEGMENTS
TCP_OPTION_SACK_PERMITTED
Definition:
tcp_packet.h:115
tcp_header_t::urgent_pointer
u16 urgent_pointer
Definition:
tcp_packet.h:99
TCP_OPTION_END
Definition:
tcp_packet.h:111
tcp_option_with_length_t
Definition:
tcp_packet.h:121
TCP_OPTION_MSS
Definition:
tcp_packet.h:113
always_inline
#define always_inline
Definition:
clib.h:84
tcp_option_type_t
enum tcp_option_type tcp_option_type_t
tcp_option_with_length_t::length
u8 length
Definition:
tcp_packet.h:126
tcp_header_t::seq_number
u32 seq_number
Definition:
tcp_packet.h:83
tcp_header_t::src
u16 src
Definition:
tcp_packet.h:75
TCP_OPTION_SACK_BLOCK
Definition:
tcp_packet.h:116
TCP_OPTION_NOP
Definition:
tcp_packet.h:112
tcp_header_t
Definition:
tcp_packet.h:66
tcp_header_t::src_port
u16 src_port
Definition:
tcp_packet.h:79
u32
unsigned int u32
Definition:
types.h:88
tcp_header_t::checksum
u16 checksum
Definition:
tcp_packet.h:97
foreach_tcp_flag
#define foreach_tcp_flag
Definition:
tcp_packet.h:44
tcp_header_t::window
u16 window
Definition:
tcp_packet.h:94
u16
unsigned short u16
Definition:
types.h:57
u8
unsigned char u8
Definition:
types.h:56
TCP_OPTION_TIME_STAMP
Definition:
tcp_packet.h:117
TCP_N_FLAG_BITS
Definition:
tcp_packet.h:59
tcp_header_bytes
static int tcp_header_bytes(tcp_header_t *t)
Definition:
tcp_packet.h:103
tcp_header_t::tcp_header_u32s_and_reserved
u8 tcp_header_u32s_and_reserved
Definition:
tcp_packet.h:86
TCP_OPTION_WINDOW_SCALE
Definition:
tcp_packet.h:114
tcp_header_t::src_and_dst
u32 src_and_dst
Definition:
tcp_packet.h:77
tcp_option_type
tcp_option_type
Definition:
tcp_packet.h:109
vnet
vnet
ip
tcp_packet.h
Generated on Mon May 15 2017 22:02:10 for FD.io VPP by
1.8.11