1/*	$KAME: dccp.h,v 1.10 2005/10/26 18:46:33 nishida Exp $	*/
  2/* $NetBSD: dccp.h,v 1.1 2015/02/10 19:11:52 rjs Exp $ */
  3
  4/*
  5 * Copyright (c) 2003 Joacim H�ggmark, Magnus Erixzon, Nils-Erik Mattsson 
  6 * All rights reserved.
  7 *
  8 * Redistribution and use in source and binary forms, with or without
  9 * modification, are permitted provided that the following conditions
 10 * are met:
 11 *
 12 * 1. Redistributions of source code must retain the above copyright
 13 *    notice, this list of conditions and the following disclaimer.
 14 * 2. Redistributions in binary form must reproduce the above copyright
 15 *    notice, this list of conditions and the following disclaimer in the
 16 *    documentation and/or other materials provided with the distribution.
 17 * 3. The name of the author may not be used to endorse or promote products
 18 *    derived from this software without specific prior written permission.
 19 *
 20 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
 21 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 22 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 23 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
 24 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 25 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 26 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 27 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 28 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 29 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 30 *
 31 * Id: dccp.h,v 1.13 2003/07/31 11:14:41 joahag-9 Exp
 32 */
 33
 34#ifndef _NETINET_DCCP_H_
 35#define _NETINET_DCCP_H_
 36
 37/*
 38 * DCCP protocol header
 39 * draft-ietf-dccp-spec-01.txt 
 40 */
 41struct dccphdr {
 42	u_short		dh_sport;	/* source port */
 43	u_short		dh_dport;	/* destination port */
 44
 45	u_int8_t	dh_off;		/* Data offset */
 46#if BYTE_ORDER == LITTLE_ENDIAN
 47	u_int8_t	dh_cscov:4,	/* Checksum Length */
 48				dh_ccval:4;	/* Number of non data packets */
 49#else
 50	u_int8_t	dh_ccval:4,
 51				dh_cscov:4;
 52#endif
 53	u_short		dh_sum;		/* Checksum */
 54
 55#if BYTE_ORDER == LITTLE_ENDIAN
 56	u_int32_t	dh_x:1,		/* long/short sequence number */
 57				dh_type:4,
 58				dh_res:3,
 59				dh_seq:24;	/* Sequence number */
 60#else
 61	u_int32_t	dh_res:3,	/* Reserved */
 62				dh_type:4,	/* Type of message */
 63				dh_x:1,		/* long/short sequence number */
 64				dh_seq:24;	
 65#endif
 66};
 67
 68struct dccplhdr {
 69	u_short		dh_sport;	/* source port */
 70	u_short		dh_dport;	/* destination port */
 71
 72	u_int8_t	dh_off;		/* Data offset */
 73#if BYTE_ORDER == LITTLE_ENDIAN
 74	u_int8_t	dh_cscov:4,	/* Checksum Length */
 75				dh_ccval:4;	/* Number of non data packets */
 76#else
 77	u_int8_t	dh_ccval:4,
 78				dh_cscov:4;
 79#endif
 80	u_short		dh_sum;		/* Checksum */
 81
 82#if BYTE_ORDER == LITTLE_ENDIAN
 83	u_int8_t	dh_x:1,		/* long/short sequence number */
 84				dh_type:4,
 85				dh_res:3;
 86#else
 87	u_int8_t	dh_res:3,	/* Reserved */
 88				dh_type:4,	/* Type of message */
 89				dh_x:1;		/* long/short sequence number */
 90#endif
 91	u_int8_t	dh_res2;	
 92	u_int16_t	dh_seq;	
 93	u_int32_t	dh_seq2;	/* long sequence number */
 94};
 95
 96struct dccp_nathdr {
 97	u_int16_t	dh_sport;	/* source port */
 98	u_int16_t	dh_dport;	/* destination port */
 99	u_int8_t	dh_off;
100#if BYTE_ORDER == LITTLE_ENDIAN
101	u_int8_t	dh_cscov:4,	/* Checksum Length */
102				dh_ccval:4;	/* Number of non data packets */
103#else
104	u_int8_t	dh_ccval:4,
105				dh_cscov:4;
106#endif
107
108	u_int16_t	dh_seq;
109	u_int32_t	dh_seq2;
110};
111
112
113struct dccp_requesthdr {
114	u_int32_t	drqh_scode;	/* Service Code */
115};
116
117struct dccp_acksubhdr { 
118#if BYTE_ORDER == LITTLE_ENDIAN
119	u_int32_t	dah_res:8,  /* Reserved */
120				dah_ack:24; /* Acknowledgement number */
121#else
122	u_int32_t	dah_ack:24,
123				dah_res:8;
124#endif
125};
126
127struct dccp_acksublhdr {
128	u_int16_t	dah_res; /* Reserved */
129	u_int16_t	dah_ack; /* Acknowledgement number */
130	u_int32_t   dah_ack2;
131};
132
133struct dccp_ackhdr {
134	struct dccp_acksubhdr   dash;
135};
136 
137struct dccp_acklhdr {
138	struct dccp_acksublhdr  dash;
139};
140
141struct dccp_resethdr {
142	struct dccp_acksublhdr  drth_dash;
143	u_int8_t	drth_reason;	/* Reason */
144	u_int8_t	drth_data1;	/* Data 1 */
145	u_int8_t	drth_data2;	/* Data 2 */
146	u_int8_t	drth_data3;	/* Data 3 */
147};
148
149#define DCCP_TYPE_REQUEST	0
150#define DCCP_TYPE_RESPONSE	1
151#define DCCP_TYPE_DATA		2
152#define DCCP_TYPE_ACK		3
153#define DCCP_TYPE_DATAACK	4
154#define DCCP_TYPE_CLOSEREQ	5
155#define DCCP_TYPE_CLOSE		6
156#define DCCP_TYPE_RESET		7
157#define DCCP_TYPE_MOVE		8
158
159#define DCCP_FEATURE_CC		1
160#define DCCP_FEATURE_ECN	2
161#define DCCP_FEATURE_ACKRATIO	3
162#define DCCP_FEATURE_ACKVECTOR	4
163#define DCCP_FEATURE_MOBILITY	5
164#define DCCP_FEATURE_LOSSWINDOW	6
165#define DCCP_FEATURE_CONN_NONCE	8
166#define DCCP_FEATURE_IDENTREG	7
167
168#define DCCP_OPT_PADDING		0
169#define DCCP_OPT_DATA_DISCARD	1
170#define DCCP_OPT_SLOW_RECV		2
171#define DCCP_OPT_BUF_CLOSED		3
172#define DCCP_OPT_CHANGE_L		32
173#define DCCP_OPT_CONFIRM_L		33
174#define DCCP_OPT_CHANGE_R		34
175#define DCCP_OPT_CONFIRM_R		35
176#define DCCP_OPT_INIT_COOKIE	36
177#define DCCP_OPT_NDP_COUNT		37
178#define DCCP_OPT_ACK_VECTOR0	38
179#define DCCP_OPT_ACK_VECTOR1	39
180#define DCCP_OPT_RECV_BUF_DROPS 40
181#define DCCP_OPT_TIMESTAMP		41
182#define DCCP_OPT_TIMESTAMP_ECHO 42
183#define DCCP_OPT_ELAPSEDTIME	43
184#define DCCP_OPT_DATACHECKSUM	44
185
186#define DCCP_REASON_UNSPEC	0
187#define DCCP_REASON_CLOSED	1
188#define DCCP_REASON_INVALID	2
189#define DCCP_REASON_OPTION_ERR	3
190#define DCCP_REASON_FEA_ERR	4
191#define DCCP_REASON_CONN_REF	5
192#define DCCP_REASON_BAD_SNAME	6
193#define DCCP_REASON_BAD_COOKIE	7
194#define DCCP_REASON_INV_MOVE	8
195#define DCCP_REASON_UNANSW_CH	10
196#define DCCP_REASON_FRUITLESS_NEG	11
197
198#define DCCP_CCID		0x01
199#define DCCP_CSLEN		0x02
200#define DCCP_MAXSEG		0x04
201#define DCCP_SERVICE	0x08
202
203#define DCCP_NDP_LIMIT          16
204#define DCCP_SEQ_NUM_LIMIT      16777216
205#define DCCP_MAX_OPTIONS	32
206#define DCCP_CONNECT_TIMER	(75 * hz)
207#define DCCP_CLOSE_TIMER	(75 * hz)
208#define DCCP_TIMEWAIT_TIMER	(60 * hz)
209#define DCCP_MAX_PKTS		100
210#endif