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 */ 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