xref: /utopia/UTPA2-700.0.x/projects/tools/lint/mips-linux-gnu_include/linux/dccp.h (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1*53ee8cc1Swenshuai.xi #ifndef _LINUX_DCCP_H
2*53ee8cc1Swenshuai.xi #define _LINUX_DCCP_H
3*53ee8cc1Swenshuai.xi 
4*53ee8cc1Swenshuai.xi #include <linux/types.h>
5*53ee8cc1Swenshuai.xi #include <asm/byteorder.h>
6*53ee8cc1Swenshuai.xi 
7*53ee8cc1Swenshuai.xi /**
8*53ee8cc1Swenshuai.xi  * struct dccp_hdr - generic part of DCCP packet header
9*53ee8cc1Swenshuai.xi  *
10*53ee8cc1Swenshuai.xi  * @dccph_sport - Relevant port on the endpoint that sent this packet
11*53ee8cc1Swenshuai.xi  * @dccph_dport - Relevant port on the other endpoint
12*53ee8cc1Swenshuai.xi  * @dccph_doff - Data Offset from the start of the DCCP header, in 32-bit words
13*53ee8cc1Swenshuai.xi  * @dccph_ccval - Used by the HC-Sender CCID
14*53ee8cc1Swenshuai.xi  * @dccph_cscov - Parts of the packet that are covered by the Checksum field
15*53ee8cc1Swenshuai.xi  * @dccph_checksum - Internet checksum, depends on dccph_cscov
16*53ee8cc1Swenshuai.xi  * @dccph_x - 0 = 24 bit sequence number, 1 = 48
17*53ee8cc1Swenshuai.xi  * @dccph_type - packet type, see DCCP_PKT_ prefixed macros
18*53ee8cc1Swenshuai.xi  * @dccph_seq - sequence number high or low order 24 bits, depends on dccph_x
19*53ee8cc1Swenshuai.xi  */
20*53ee8cc1Swenshuai.xi struct dccp_hdr {
21*53ee8cc1Swenshuai.xi 	__be16	dccph_sport,
22*53ee8cc1Swenshuai.xi 		dccph_dport;
23*53ee8cc1Swenshuai.xi 	__u8	dccph_doff;
24*53ee8cc1Swenshuai.xi #if defined(__LITTLE_ENDIAN_BITFIELD)
25*53ee8cc1Swenshuai.xi 	__u8	dccph_cscov:4,
26*53ee8cc1Swenshuai.xi 		dccph_ccval:4;
27*53ee8cc1Swenshuai.xi #elif defined(__BIG_ENDIAN_BITFIELD)
28*53ee8cc1Swenshuai.xi 	__u8	dccph_ccval:4,
29*53ee8cc1Swenshuai.xi 		dccph_cscov:4;
30*53ee8cc1Swenshuai.xi #else
31*53ee8cc1Swenshuai.xi #error  "Adjust your <asm/byteorder.h> defines"
32*53ee8cc1Swenshuai.xi #endif
33*53ee8cc1Swenshuai.xi 	__sum16	dccph_checksum;
34*53ee8cc1Swenshuai.xi #if defined(__LITTLE_ENDIAN_BITFIELD)
35*53ee8cc1Swenshuai.xi 	__u8	dccph_x:1,
36*53ee8cc1Swenshuai.xi 		dccph_type:4,
37*53ee8cc1Swenshuai.xi 		dccph_reserved:3;
38*53ee8cc1Swenshuai.xi #elif defined(__BIG_ENDIAN_BITFIELD)
39*53ee8cc1Swenshuai.xi 	__u8	dccph_reserved:3,
40*53ee8cc1Swenshuai.xi 		dccph_type:4,
41*53ee8cc1Swenshuai.xi 		dccph_x:1;
42*53ee8cc1Swenshuai.xi #else
43*53ee8cc1Swenshuai.xi #error  "Adjust your <asm/byteorder.h> defines"
44*53ee8cc1Swenshuai.xi #endif
45*53ee8cc1Swenshuai.xi 	__u8	dccph_seq2;
46*53ee8cc1Swenshuai.xi 	__be16	dccph_seq;
47*53ee8cc1Swenshuai.xi };
48*53ee8cc1Swenshuai.xi 
49*53ee8cc1Swenshuai.xi /**
50*53ee8cc1Swenshuai.xi  * struct dccp_hdr_ext - the low bits of a 48 bit seq packet
51*53ee8cc1Swenshuai.xi  *
52*53ee8cc1Swenshuai.xi  * @dccph_seq_low - low 24 bits of a 48 bit seq packet
53*53ee8cc1Swenshuai.xi  */
54*53ee8cc1Swenshuai.xi struct dccp_hdr_ext {
55*53ee8cc1Swenshuai.xi 	__be32	dccph_seq_low;
56*53ee8cc1Swenshuai.xi };
57*53ee8cc1Swenshuai.xi 
58*53ee8cc1Swenshuai.xi /**
59*53ee8cc1Swenshuai.xi  * struct dccp_hdr_request - Connection initiation request header
60*53ee8cc1Swenshuai.xi  *
61*53ee8cc1Swenshuai.xi  * @dccph_req_service - Service to which the client app wants to connect
62*53ee8cc1Swenshuai.xi  */
63*53ee8cc1Swenshuai.xi struct dccp_hdr_request {
64*53ee8cc1Swenshuai.xi 	__be32	dccph_req_service;
65*53ee8cc1Swenshuai.xi };
66*53ee8cc1Swenshuai.xi /**
67*53ee8cc1Swenshuai.xi  * struct dccp_hdr_ack_bits - acknowledgment bits common to most packets
68*53ee8cc1Swenshuai.xi  *
69*53ee8cc1Swenshuai.xi  * @dccph_resp_ack_nr_high - 48 bit ack number high order bits, contains GSR
70*53ee8cc1Swenshuai.xi  * @dccph_resp_ack_nr_low - 48 bit ack number low order bits, contains GSR
71*53ee8cc1Swenshuai.xi  */
72*53ee8cc1Swenshuai.xi struct dccp_hdr_ack_bits {
73*53ee8cc1Swenshuai.xi 	__be16	dccph_reserved1;
74*53ee8cc1Swenshuai.xi 	__be16	dccph_ack_nr_high;
75*53ee8cc1Swenshuai.xi 	__be32	dccph_ack_nr_low;
76*53ee8cc1Swenshuai.xi };
77*53ee8cc1Swenshuai.xi /**
78*53ee8cc1Swenshuai.xi  * struct dccp_hdr_response - Connection initiation response header
79*53ee8cc1Swenshuai.xi  *
80*53ee8cc1Swenshuai.xi  * @dccph_resp_ack - 48 bit Acknowledgment Number Subheader (5.3)
81*53ee8cc1Swenshuai.xi  * @dccph_resp_service - Echoes the Service Code on a received DCCP-Request
82*53ee8cc1Swenshuai.xi  */
83*53ee8cc1Swenshuai.xi struct dccp_hdr_response {
84*53ee8cc1Swenshuai.xi 	struct dccp_hdr_ack_bits	dccph_resp_ack;
85*53ee8cc1Swenshuai.xi 	__be32				dccph_resp_service;
86*53ee8cc1Swenshuai.xi };
87*53ee8cc1Swenshuai.xi 
88*53ee8cc1Swenshuai.xi /**
89*53ee8cc1Swenshuai.xi  * struct dccp_hdr_reset - Unconditionally shut down a connection
90*53ee8cc1Swenshuai.xi  *
91*53ee8cc1Swenshuai.xi  * @dccph_reset_ack - 48 bit Acknowledgment Number Subheader (5.6)
92*53ee8cc1Swenshuai.xi  * @dccph_reset_code - one of %dccp_reset_codes
93*53ee8cc1Swenshuai.xi  * @dccph_reset_data - the Data 1 ... Data 3 fields from 5.6
94*53ee8cc1Swenshuai.xi  */
95*53ee8cc1Swenshuai.xi struct dccp_hdr_reset {
96*53ee8cc1Swenshuai.xi 	struct dccp_hdr_ack_bits	dccph_reset_ack;
97*53ee8cc1Swenshuai.xi 	__u8				dccph_reset_code,
98*53ee8cc1Swenshuai.xi 					dccph_reset_data[3];
99*53ee8cc1Swenshuai.xi };
100*53ee8cc1Swenshuai.xi 
101*53ee8cc1Swenshuai.xi enum dccp_pkt_type {
102*53ee8cc1Swenshuai.xi 	DCCP_PKT_REQUEST = 0,
103*53ee8cc1Swenshuai.xi 	DCCP_PKT_RESPONSE,
104*53ee8cc1Swenshuai.xi 	DCCP_PKT_DATA,
105*53ee8cc1Swenshuai.xi 	DCCP_PKT_ACK,
106*53ee8cc1Swenshuai.xi 	DCCP_PKT_DATAACK,
107*53ee8cc1Swenshuai.xi 	DCCP_PKT_CLOSEREQ,
108*53ee8cc1Swenshuai.xi 	DCCP_PKT_CLOSE,
109*53ee8cc1Swenshuai.xi 	DCCP_PKT_RESET,
110*53ee8cc1Swenshuai.xi 	DCCP_PKT_SYNC,
111*53ee8cc1Swenshuai.xi 	DCCP_PKT_SYNCACK,
112*53ee8cc1Swenshuai.xi 	DCCP_PKT_INVALID,
113*53ee8cc1Swenshuai.xi };
114*53ee8cc1Swenshuai.xi 
115*53ee8cc1Swenshuai.xi #define DCCP_NR_PKT_TYPES DCCP_PKT_INVALID
116*53ee8cc1Swenshuai.xi 
dccp_packet_hdr_len(const __u8 type)117*53ee8cc1Swenshuai.xi static __inline__ unsigned int dccp_packet_hdr_len(const __u8 type)
118*53ee8cc1Swenshuai.xi {
119*53ee8cc1Swenshuai.xi 	if (type == DCCP_PKT_DATA)
120*53ee8cc1Swenshuai.xi 		return 0;
121*53ee8cc1Swenshuai.xi 	if (type == DCCP_PKT_DATAACK	||
122*53ee8cc1Swenshuai.xi 	    type == DCCP_PKT_ACK	||
123*53ee8cc1Swenshuai.xi 	    type == DCCP_PKT_SYNC	||
124*53ee8cc1Swenshuai.xi 	    type == DCCP_PKT_SYNCACK	||
125*53ee8cc1Swenshuai.xi 	    type == DCCP_PKT_CLOSE	||
126*53ee8cc1Swenshuai.xi 	    type == DCCP_PKT_CLOSEREQ)
127*53ee8cc1Swenshuai.xi 		return sizeof(struct dccp_hdr_ack_bits);
128*53ee8cc1Swenshuai.xi 	if (type == DCCP_PKT_REQUEST)
129*53ee8cc1Swenshuai.xi 		return sizeof(struct dccp_hdr_request);
130*53ee8cc1Swenshuai.xi 	if (type == DCCP_PKT_RESPONSE)
131*53ee8cc1Swenshuai.xi 		return sizeof(struct dccp_hdr_response);
132*53ee8cc1Swenshuai.xi 	return sizeof(struct dccp_hdr_reset);
133*53ee8cc1Swenshuai.xi }
134*53ee8cc1Swenshuai.xi enum dccp_reset_codes {
135*53ee8cc1Swenshuai.xi 	DCCP_RESET_CODE_UNSPECIFIED = 0,
136*53ee8cc1Swenshuai.xi 	DCCP_RESET_CODE_CLOSED,
137*53ee8cc1Swenshuai.xi 	DCCP_RESET_CODE_ABORTED,
138*53ee8cc1Swenshuai.xi 	DCCP_RESET_CODE_NO_CONNECTION,
139*53ee8cc1Swenshuai.xi 	DCCP_RESET_CODE_PACKET_ERROR,
140*53ee8cc1Swenshuai.xi 	DCCP_RESET_CODE_OPTION_ERROR,
141*53ee8cc1Swenshuai.xi 	DCCP_RESET_CODE_MANDATORY_ERROR,
142*53ee8cc1Swenshuai.xi 	DCCP_RESET_CODE_CONNECTION_REFUSED,
143*53ee8cc1Swenshuai.xi 	DCCP_RESET_CODE_BAD_SERVICE_CODE,
144*53ee8cc1Swenshuai.xi 	DCCP_RESET_CODE_TOO_BUSY,
145*53ee8cc1Swenshuai.xi 	DCCP_RESET_CODE_BAD_INIT_COOKIE,
146*53ee8cc1Swenshuai.xi 	DCCP_RESET_CODE_AGGRESSION_PENALTY,
147*53ee8cc1Swenshuai.xi 
148*53ee8cc1Swenshuai.xi 	DCCP_MAX_RESET_CODES		/* Leave at the end!  */
149*53ee8cc1Swenshuai.xi };
150*53ee8cc1Swenshuai.xi 
151*53ee8cc1Swenshuai.xi /* DCCP options */
152*53ee8cc1Swenshuai.xi enum {
153*53ee8cc1Swenshuai.xi 	DCCPO_PADDING = 0,
154*53ee8cc1Swenshuai.xi 	DCCPO_MANDATORY = 1,
155*53ee8cc1Swenshuai.xi 	DCCPO_MIN_RESERVED = 3,
156*53ee8cc1Swenshuai.xi 	DCCPO_MAX_RESERVED = 31,
157*53ee8cc1Swenshuai.xi 	DCCPO_CHANGE_L = 32,
158*53ee8cc1Swenshuai.xi 	DCCPO_CONFIRM_L = 33,
159*53ee8cc1Swenshuai.xi 	DCCPO_CHANGE_R = 34,
160*53ee8cc1Swenshuai.xi 	DCCPO_CONFIRM_R = 35,
161*53ee8cc1Swenshuai.xi 	DCCPO_NDP_COUNT = 37,
162*53ee8cc1Swenshuai.xi 	DCCPO_ACK_VECTOR_0 = 38,
163*53ee8cc1Swenshuai.xi 	DCCPO_ACK_VECTOR_1 = 39,
164*53ee8cc1Swenshuai.xi 	DCCPO_TIMESTAMP = 41,
165*53ee8cc1Swenshuai.xi 	DCCPO_TIMESTAMP_ECHO = 42,
166*53ee8cc1Swenshuai.xi 	DCCPO_ELAPSED_TIME = 43,
167*53ee8cc1Swenshuai.xi 	DCCPO_MAX = 45,
168*53ee8cc1Swenshuai.xi 	DCCPO_MIN_CCID_SPECIFIC = 128,
169*53ee8cc1Swenshuai.xi 	DCCPO_MAX_CCID_SPECIFIC = 255,
170*53ee8cc1Swenshuai.xi };
171*53ee8cc1Swenshuai.xi 
172*53ee8cc1Swenshuai.xi /* DCCP CCIDS */
173*53ee8cc1Swenshuai.xi enum {
174*53ee8cc1Swenshuai.xi 	DCCPC_CCID2 = 2,
175*53ee8cc1Swenshuai.xi 	DCCPC_CCID3 = 3,
176*53ee8cc1Swenshuai.xi };
177*53ee8cc1Swenshuai.xi 
178*53ee8cc1Swenshuai.xi /* DCCP features (RFC 4340 section 6.4) */
179*53ee8cc1Swenshuai.xi enum {
180*53ee8cc1Swenshuai.xi 	DCCPF_RESERVED = 0,
181*53ee8cc1Swenshuai.xi 	DCCPF_CCID = 1,
182*53ee8cc1Swenshuai.xi 	DCCPF_SHORT_SEQNOS = 2,		/* XXX: not yet implemented */
183*53ee8cc1Swenshuai.xi 	DCCPF_SEQUENCE_WINDOW = 3,
184*53ee8cc1Swenshuai.xi 	DCCPF_ECN_INCAPABLE = 4,	/* XXX: not yet implemented */
185*53ee8cc1Swenshuai.xi 	DCCPF_ACK_RATIO = 5,
186*53ee8cc1Swenshuai.xi 	DCCPF_SEND_ACK_VECTOR = 6,
187*53ee8cc1Swenshuai.xi 	DCCPF_SEND_NDP_COUNT = 7,
188*53ee8cc1Swenshuai.xi 	DCCPF_MIN_CSUM_COVER = 8,
189*53ee8cc1Swenshuai.xi 	DCCPF_DATA_CHECKSUM = 9,	/* XXX: not yet implemented */
190*53ee8cc1Swenshuai.xi 	/* 10-127 reserved */
191*53ee8cc1Swenshuai.xi 	DCCPF_MIN_CCID_SPECIFIC = 128,
192*53ee8cc1Swenshuai.xi 	DCCPF_MAX_CCID_SPECIFIC = 255,
193*53ee8cc1Swenshuai.xi };
194*53ee8cc1Swenshuai.xi 
195*53ee8cc1Swenshuai.xi /* this structure is argument to DCCP_SOCKOPT_CHANGE_X */
196*53ee8cc1Swenshuai.xi struct dccp_so_feat {
197*53ee8cc1Swenshuai.xi 	__u8 dccpsf_feat;
198*53ee8cc1Swenshuai.xi 	__u8 *dccpsf_val;
199*53ee8cc1Swenshuai.xi 	__u8 dccpsf_len;
200*53ee8cc1Swenshuai.xi };
201*53ee8cc1Swenshuai.xi 
202*53ee8cc1Swenshuai.xi /* DCCP socket options */
203*53ee8cc1Swenshuai.xi #define DCCP_SOCKOPT_PACKET_SIZE	1 /* XXX deprecated, without effect */
204*53ee8cc1Swenshuai.xi #define DCCP_SOCKOPT_SERVICE		2
205*53ee8cc1Swenshuai.xi #define DCCP_SOCKOPT_CHANGE_L		3
206*53ee8cc1Swenshuai.xi #define DCCP_SOCKOPT_CHANGE_R		4
207*53ee8cc1Swenshuai.xi #define DCCP_SOCKOPT_GET_CUR_MPS	5
208*53ee8cc1Swenshuai.xi #define DCCP_SOCKOPT_SERVER_TIMEWAIT	6
209*53ee8cc1Swenshuai.xi #define DCCP_SOCKOPT_SEND_CSCOV		10
210*53ee8cc1Swenshuai.xi #define DCCP_SOCKOPT_RECV_CSCOV		11
211*53ee8cc1Swenshuai.xi #define DCCP_SOCKOPT_CCID_RX_INFO	128
212*53ee8cc1Swenshuai.xi #define DCCP_SOCKOPT_CCID_TX_INFO	192
213*53ee8cc1Swenshuai.xi 
214*53ee8cc1Swenshuai.xi /* maximum number of services provided on the same listening port */
215*53ee8cc1Swenshuai.xi #define DCCP_SERVICE_LIST_MAX_LEN      32
216*53ee8cc1Swenshuai.xi 
217*53ee8cc1Swenshuai.xi 
218*53ee8cc1Swenshuai.xi #endif /* _LINUX_DCCP_H */
219