dccp.h
001: #ifndef _LINUX_DCCP_H
002: #define _LINUX_DCCP_H
003:
004: #include <linux/types.h>
005: #include <asm/byteorder.h>
006:
007:
008:
009:
010: @dccph
011: @dccph
012: @dccph
013: @dccph
014: @dccph
015: @dccph
016: @dccph
017: @dccph
018: @dccph
019:
020: struct dccp_hdr {
021: __be16 dccph_sport,
022: dccph_dport;
023: __u8 dccph_doff;
024: #if defined(__LITTLE_ENDIAN_BITFIELD)
025: __u8 dccph_cscov:4,
026: dccph_ccval:4;
027: #elif defined(__BIG_ENDIAN_BITFIELD)
028: __u8 dccph_ccval:4,
029: dccph_cscov:4;
030: #else
031: #error "Adjust your <asm/byteorder.h> defines"
032: #endif
033: __sum16 dccph_checksum;
034: #if defined(__LITTLE_ENDIAN_BITFIELD)
035: __u8 dccph_x:1,
036: dccph_type:4,
037: dccph_reserved:3;
038: #elif defined(__BIG_ENDIAN_BITFIELD)
039: __u8 dccph_reserved:3,
040: dccph_type:4,
041: dccph_x:1;
042: #else
043: #error "Adjust your <asm/byteorder.h> defines"
044: #endif
045: __u8 dccph_seq2;
046: __be16 dccph_seq;
047: };
048:
049:
050:
051:
052: @dccph
053:
054: struct dccp_hdr_ext {
055: __be32 dccph_seq_low;
056: };
057:
058:
059:
060:
061: @dccph
062:
063: struct dccp_hdr_request {
064: __be32 dccph_req_service;
065: };
066:
067:
068:
069: @dccph
070: @dccph
071:
072: struct dccp_hdr_ack_bits {
073: __be16 dccph_reserved1;
074: __be16 dccph_ack_nr_high;
075: __be32 dccph_ack_nr_low;
076: };
077:
078:
079:
080: @dccph
081: @dccph
082:
083: struct dccp_hdr_response {
084: struct dccp_hdr_ack_bits dccph_resp_ack;
085: __be32 dccph_resp_service;
086: };
087:
088:
089:
090:
091: @dccph
092: @dccph
093: @dccph
094:
095: struct dccp_hdr_reset {
096: struct dccp_hdr_ack_bits dccph_reset_ack;
097: __u8 dccph_reset_code,
098: dccph_reset_data[3];
099: };
100:
101: enum dccp_pkt_type {
102: DCCP_PKT_REQUEST = 0,
103: DCCP_PKT_RESPONSE,
104: DCCP_PKT_DATA,
105: DCCP_PKT_ACK,
106: DCCP_PKT_DATAACK,
107: DCCP_PKT_CLOSEREQ,
108: DCCP_PKT_CLOSE,
109: DCCP_PKT_RESET,
110: DCCP_PKT_SYNC,
111: DCCP_PKT_SYNCACK,
112: DCCP_PKT_INVALID,
113: };
114:
115: #define DCCP_NR_PKT_TYPES DCCP_PKT_INVALID
116:
117: static __inline__ unsigned int dccp_packet_hdr_len(const __u8 type)
118: {
119: if (type == DCCP_PKT_DATA)
120: return 0;
121: if (type == DCCP_PKT_DATAACK ||
122: type == DCCP_PKT_ACK ||
123: type == DCCP_PKT_SYNC ||
124: type == DCCP_PKT_SYNCACK ||
125: type == DCCP_PKT_CLOSE ||
126: type == DCCP_PKT_CLOSEREQ)
127: return sizeof(struct dccp_hdr_ack_bits);
128: if (type == DCCP_PKT_REQUEST)
129: return sizeof(struct dccp_hdr_request);
130: if (type == DCCP_PKT_RESPONSE)
131: return sizeof(struct dccp_hdr_response);
132: return sizeof(struct dccp_hdr_reset);
133: }
134: enum dccp_reset_codes {
135: DCCP_RESET_CODE_UNSPECIFIED = 0,
136: DCCP_RESET_CODE_CLOSED,
137: DCCP_RESET_CODE_ABORTED,
138: DCCP_RESET_CODE_NO_CONNECTION,
139: DCCP_RESET_CODE_PACKET_ERROR,
140: DCCP_RESET_CODE_OPTION_ERROR,
141: DCCP_RESET_CODE_MANDATORY_ERROR,
142: DCCP_RESET_CODE_CONNECTION_REFUSED,
143: DCCP_RESET_CODE_BAD_SERVICE_CODE,
144: DCCP_RESET_CODE_TOO_BUSY,
145: DCCP_RESET_CODE_BAD_INIT_COOKIE,
146: DCCP_RESET_CODE_AGGRESSION_PENALTY,
147:
148: DCCP_MAX_RESET_CODES
149: };
150:
151:
152: enum {
153: DCCPO_PADDING = 0,
154: DCCPO_MANDATORY = 1,
155: DCCPO_MIN_RESERVED = 3,
156: DCCPO_MAX_RESERVED = 31,
157: DCCPO_CHANGE_L = 32,
158: DCCPO_CONFIRM_L = 33,
159: DCCPO_CHANGE_R = 34,
160: DCCPO_CONFIRM_R = 35,
161: DCCPO_NDP_COUNT = 37,
162: DCCPO_ACK_VECTOR_0 = 38,
163: DCCPO_ACK_VECTOR_1 = 39,
164: DCCPO_TIMESTAMP = 41,
165: DCCPO_TIMESTAMP_ECHO = 42,
166: DCCPO_ELAPSED_TIME = 43,
167: DCCPO_MAX = 45,
168: DCCPO_MIN_RX_CCID_SPECIFIC = 128,
169: DCCPO_MAX_RX_CCID_SPECIFIC = 191,
170: DCCPO_MIN_TX_CCID_SPECIFIC = 192,
171: DCCPO_MAX_TX_CCID_SPECIFIC = 255,
172: };
173:
174: #define DCCP_SINGLE_OPT_MAXLEN 253
175:
176:
177: enum {
178: DCCPC_CCID2 = 2,
179: DCCPC_CCID3 = 3,
180: };
181:
182:
183: enum dccp_feature_numbers {
184: DCCPF_RESERVED = 0,
185: DCCPF_CCID = 1,
186: DCCPF_SHORT_SEQNOS = 2,
187: DCCPF_SEQUENCE_WINDOW = 3,
188: DCCPF_ECN_INCAPABLE = 4,
189: DCCPF_ACK_RATIO = 5,
190: DCCPF_SEND_ACK_VECTOR = 6,
191: DCCPF_SEND_NDP_COUNT = 7,
192: DCCPF_MIN_CSUM_COVER = 8,
193: DCCPF_DATA_CHECKSUM = 9,
194:
195: DCCPF_MIN_CCID_SPECIFIC = 128,
196: DCCPF_SEND_LEV_RATE = 192,
197: DCCPF_MAX_CCID_SPECIFIC = 255,
198: };
199:
200:
201: enum dccp_cmsg_type {
202: DCCP_SCM_PRIORITY = 1,
203: DCCP_SCM_QPOLICY_MAX = 0xFFFF,
204:
205: DCCP_SCM_MAX
206: };
207:
208:
209: enum dccp_packet_dequeueing_policy {
210: DCCPQ_POLICY_SIMPLE,
211: DCCPQ_POLICY_PRIO,
212: DCCPQ_POLICY_MAX
213: };
214:
215:
216: #define DCCP_SOCKOPT_PACKET_SIZE 1
217: #define DCCP_SOCKOPT_SERVICE 2
218: #define DCCP_SOCKOPT_CHANGE_L 3
219: #define DCCP_SOCKOPT_CHANGE_R 4
220: #define DCCP_SOCKOPT_GET_CUR_MPS 5
221: #define DCCP_SOCKOPT_SERVER_TIMEWAIT 6
222: #define DCCP_SOCKOPT_SEND_CSCOV 10
223: #define DCCP_SOCKOPT_RECV_CSCOV 11
224: #define DCCP_SOCKOPT_AVAILABLE_CCIDS 12
225: #define DCCP_SOCKOPT_CCID 13
226: #define DCCP_SOCKOPT_TX_CCID 14
227: #define DCCP_SOCKOPT_RX_CCID 15
228: #define DCCP_SOCKOPT_QPOLICY_ID 16
229: #define DCCP_SOCKOPT_QPOLICY_TXQLEN 17
230: #define DCCP_SOCKOPT_CCID_RX_INFO 128
231: #define DCCP_SOCKOPT_CCID_TX_INFO 192
232:
233:
234: #define DCCP_SERVICE_LIST_MAX_LEN 32
235:
236:
237: #endif
238:
© Andrew Scott 2006 -
2025,
All Rights Reserved