Dr Andrew Scott G7VAV

My photo
 
June 2025
Mo Tu We Th Fr Sa Su
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 1 2 3 4 5 6


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:  * struct dccp_hdr - generic part of DCCP packet header
009:  *
010:  * @dccph_sport - Relevant port on the endpoint that sent this packet
011:  * @dccph_dport - Relevant port on the other endpoint
012:  * @dccph_doff - Data Offset from the start of the DCCP header, in 32-bit words
013:  * @dccph_ccval - Used by the HC-Sender CCID
014:  * @dccph_cscov - Parts of the packet that are covered by the Checksum field
015:  * @dccph_checksum - Internet checksum, depends on dccph_cscov
016:  * @dccph_x - 0 = 24 bit sequence number, 1 = 48
017:  * @dccph_type - packet type, see DCCP_PKT_ prefixed macros
018:  * @dccph_seq - sequence number high or low order 24 bits, depends on dccph_x
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:  * struct dccp_hdr_ext - the low bits of a 48 bit seq packet
051:  *
052:  * @dccph_seq_low - low 24 bits of a 48 bit seq packet
053:  */
054: struct dccp_hdr_ext {
055:         __be32  dccph_seq_low;
056: };
057: 
058: /**
059:  * struct dccp_hdr_request - Connection initiation request header
060:  *
061:  * @dccph_req_service - Service to which the client app wants to connect
062:  */
063: struct dccp_hdr_request {
064:         __be32  dccph_req_service;
065: };
066: /**
067:  * struct dccp_hdr_ack_bits - acknowledgment bits common to most packets
068:  *
069:  * @dccph_resp_ack_nr_high - 48 bit ack number high order bits, contains GSR
070:  * @dccph_resp_ack_nr_low - 48 bit ack number low order bits, contains GSR
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:  * struct dccp_hdr_response - Connection initiation response header
079:  *
080:  * @dccph_resp_ack - 48 bit Acknowledgment Number Subheader (5.3)
081:  * @dccph_resp_service - Echoes the Service Code on a received DCCP-Request
082:  */
083: struct dccp_hdr_response {
084:         struct dccp_hdr_ack_bits        dccph_resp_ack;
085:         __be32                          dccph_resp_service;
086: };
087: 
088: /**
089:  * struct dccp_hdr_reset - Unconditionally shut down a connection
090:  *
091:  * @dccph_reset_ack - 48 bit Acknowledgment Number Subheader (5.6)
092:  * @dccph_reset_code - one of %dccp_reset_codes
093:  * @dccph_reset_data - the Data 1 ... Data 3 fields from 5.6
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            /* Leave at the end!  */
149: };
150: 
151: /* DCCP options */
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,       /* from sender to receiver */
169:         DCCPO_MAX_RX_CCID_SPECIFIC = 191,
170:         DCCPO_MIN_TX_CCID_SPECIFIC = 192,       /* from receiver to sender */
171:         DCCPO_MAX_TX_CCID_SPECIFIC = 255,
172: };
173: /* maximum size of a single TLV-encoded DCCP option (sans type/len bytes) */
174: #define DCCP_SINGLE_OPT_MAXLEN  253
175: 
176: /* DCCP CCIDS */
177: enum {
178:         DCCPC_CCID2 = 2,
179:         DCCPC_CCID3 = 3,
180: };
181: 
182: /* DCCP features (RFC 4340 section 6.4) */
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:         /* 10-127 reserved */
195:         DCCPF_MIN_CCID_SPECIFIC = 128,
196:         DCCPF_SEND_LEV_RATE = 192,      /* RFC 4342, sec. 8.4 */
197:         DCCPF_MAX_CCID_SPECIFIC = 255,
198: };
199: 
200: /* DCCP socket control message types for cmsg */
201: enum dccp_cmsg_type {
202:         DCCP_SCM_PRIORITY = 1,
203:         DCCP_SCM_QPOLICY_MAX = 0xFFFF,
204:         /* ^-- Up to here reserved exclusively for qpolicy parameters */
205:         DCCP_SCM_MAX
206: };
207: 
208: /* DCCP priorities for outgoing/queued packets */
209: enum dccp_packet_dequeueing_policy {
210:         DCCPQ_POLICY_SIMPLE,
211:         DCCPQ_POLICY_PRIO,
212:         DCCPQ_POLICY_MAX
213: };
214: 
215: /* DCCP socket options */
216: #define DCCP_SOCKOPT_PACKET_SIZE        1 /* XXX deprecated, without effect */
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: /* maximum number of services provided on the same listening port */
234: #define DCCP_SERVICE_LIST_MAX_LEN      32
235: 
236: 
237: #endif /* _LINUX_DCCP_H */
238: 


for client (none)
© Andrew Scott 2006 - 2025,
All Rights Reserved
http://www.andrew-scott.uk/
Andrew Scott
http://www.andrew-scott.co.uk/