Home | History | Annotate | Line # | Download | only in netinet
      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 Hggmark, 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  */
     41 struct 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 
     68 struct 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 
     96 struct 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 
    113 struct dccp_requesthdr {
    114 	u_int32_t	drqh_scode;	/* Service Code */
    115 };
    116 
    117 struct 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 
    127 struct 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 
    133 struct dccp_ackhdr {
    134 	struct dccp_acksubhdr   dash;
    135 };
    136 
    137 struct dccp_acklhdr {
    138 	struct dccp_acksublhdr  dash;
    139 };
    140 
    141 struct 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
    211