239 lines · c
1/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */2#ifndef _UAPI_LINUX_DCCP_H3#define _UAPI_LINUX_DCCP_H4 5#include <linux/types.h>6#include <asm/byteorder.h>7 8/**9 * struct dccp_hdr - generic part of DCCP packet header10 *11 * @dccph_sport - Relevant port on the endpoint that sent this packet12 * @dccph_dport - Relevant port on the other endpoint13 * @dccph_doff - Data Offset from the start of the DCCP header, in 32-bit words14 * @dccph_ccval - Used by the HC-Sender CCID15 * @dccph_cscov - Parts of the packet that are covered by the Checksum field16 * @dccph_checksum - Internet checksum, depends on dccph_cscov17 * @dccph_x - 0 = 24 bit sequence number, 1 = 4818 * @dccph_type - packet type, see DCCP_PKT_ prefixed macros19 * @dccph_seq - sequence number high or low order 24 bits, depends on dccph_x20 */21struct dccp_hdr {22 __be16 dccph_sport,23 dccph_dport;24 __u8 dccph_doff;25#if defined(__LITTLE_ENDIAN_BITFIELD)26 __u8 dccph_cscov:4,27 dccph_ccval:4;28#elif defined(__BIG_ENDIAN_BITFIELD)29 __u8 dccph_ccval:4,30 dccph_cscov:4;31#else32#error "Adjust your <asm/byteorder.h> defines"33#endif34 __sum16 dccph_checksum;35#if defined(__LITTLE_ENDIAN_BITFIELD)36 __u8 dccph_x:1,37 dccph_type:4,38 dccph_reserved:3;39#elif defined(__BIG_ENDIAN_BITFIELD)40 __u8 dccph_reserved:3,41 dccph_type:4,42 dccph_x:1;43#else44#error "Adjust your <asm/byteorder.h> defines"45#endif46 __u8 dccph_seq2;47 __be16 dccph_seq;48};49 50/**51 * struct dccp_hdr_ext - the low bits of a 48 bit seq packet52 *53 * @dccph_seq_low - low 24 bits of a 48 bit seq packet54 */55struct dccp_hdr_ext {56 __be32 dccph_seq_low;57};58 59/**60 * struct dccp_hdr_request - Connection initiation request header61 *62 * @dccph_req_service - Service to which the client app wants to connect63 */64struct dccp_hdr_request {65 __be32 dccph_req_service;66};67/**68 * struct dccp_hdr_ack_bits - acknowledgment bits common to most packets69 *70 * @dccph_resp_ack_nr_high - 48 bit ack number high order bits, contains GSR71 * @dccph_resp_ack_nr_low - 48 bit ack number low order bits, contains GSR72 */73struct dccp_hdr_ack_bits {74 __be16 dccph_reserved1;75 __be16 dccph_ack_nr_high;76 __be32 dccph_ack_nr_low;77};78/**79 * struct dccp_hdr_response - Connection initiation response header80 *81 * @dccph_resp_ack - 48 bit Acknowledgment Number Subheader (5.3)82 * @dccph_resp_service - Echoes the Service Code on a received DCCP-Request83 */84struct dccp_hdr_response {85 struct dccp_hdr_ack_bits dccph_resp_ack;86 __be32 dccph_resp_service;87};88 89/**90 * struct dccp_hdr_reset - Unconditionally shut down a connection91 *92 * @dccph_reset_ack - 48 bit Acknowledgment Number Subheader (5.6)93 * @dccph_reset_code - one of %dccp_reset_codes94 * @dccph_reset_data - the Data 1 ... Data 3 fields from 5.695 */96struct dccp_hdr_reset {97 struct dccp_hdr_ack_bits dccph_reset_ack;98 __u8 dccph_reset_code,99 dccph_reset_data[3];100};101 102enum dccp_pkt_type {103 DCCP_PKT_REQUEST = 0,104 DCCP_PKT_RESPONSE,105 DCCP_PKT_DATA,106 DCCP_PKT_ACK,107 DCCP_PKT_DATAACK,108 DCCP_PKT_CLOSEREQ,109 DCCP_PKT_CLOSE,110 DCCP_PKT_RESET,111 DCCP_PKT_SYNC,112 DCCP_PKT_SYNCACK,113 DCCP_PKT_INVALID,114};115 116#define DCCP_NR_PKT_TYPES DCCP_PKT_INVALID117 118static inline unsigned int dccp_packet_hdr_len(const __u8 type)119{120 if (type == DCCP_PKT_DATA)121 return 0;122 if (type == DCCP_PKT_DATAACK ||123 type == DCCP_PKT_ACK ||124 type == DCCP_PKT_SYNC ||125 type == DCCP_PKT_SYNCACK ||126 type == DCCP_PKT_CLOSE ||127 type == DCCP_PKT_CLOSEREQ)128 return sizeof(struct dccp_hdr_ack_bits);129 if (type == DCCP_PKT_REQUEST)130 return sizeof(struct dccp_hdr_request);131 if (type == DCCP_PKT_RESPONSE)132 return sizeof(struct dccp_hdr_response);133 return sizeof(struct dccp_hdr_reset);134}135enum dccp_reset_codes {136 DCCP_RESET_CODE_UNSPECIFIED = 0,137 DCCP_RESET_CODE_CLOSED,138 DCCP_RESET_CODE_ABORTED,139 DCCP_RESET_CODE_NO_CONNECTION,140 DCCP_RESET_CODE_PACKET_ERROR,141 DCCP_RESET_CODE_OPTION_ERROR,142 DCCP_RESET_CODE_MANDATORY_ERROR,143 DCCP_RESET_CODE_CONNECTION_REFUSED,144 DCCP_RESET_CODE_BAD_SERVICE_CODE,145 DCCP_RESET_CODE_TOO_BUSY,146 DCCP_RESET_CODE_BAD_INIT_COOKIE,147 DCCP_RESET_CODE_AGGRESSION_PENALTY,148 149 DCCP_MAX_RESET_CODES /* Leave at the end! */150};151 152/* DCCP options */153enum {154 DCCPO_PADDING = 0,155 DCCPO_MANDATORY = 1,156 DCCPO_MIN_RESERVED = 3,157 DCCPO_MAX_RESERVED = 31,158 DCCPO_CHANGE_L = 32,159 DCCPO_CONFIRM_L = 33,160 DCCPO_CHANGE_R = 34,161 DCCPO_CONFIRM_R = 35,162 DCCPO_NDP_COUNT = 37,163 DCCPO_ACK_VECTOR_0 = 38,164 DCCPO_ACK_VECTOR_1 = 39,165 DCCPO_TIMESTAMP = 41,166 DCCPO_TIMESTAMP_ECHO = 42,167 DCCPO_ELAPSED_TIME = 43,168 DCCPO_MAX = 45,169 DCCPO_MIN_RX_CCID_SPECIFIC = 128, /* from sender to receiver */170 DCCPO_MAX_RX_CCID_SPECIFIC = 191,171 DCCPO_MIN_TX_CCID_SPECIFIC = 192, /* from receiver to sender */172 DCCPO_MAX_TX_CCID_SPECIFIC = 255,173};174/* maximum size of a single TLV-encoded DCCP option (sans type/len bytes) */175#define DCCP_SINGLE_OPT_MAXLEN 253176 177/* DCCP CCIDS */178enum {179 DCCPC_CCID2 = 2,180 DCCPC_CCID3 = 3,181};182 183/* DCCP features (RFC 4340 section 6.4) */184enum dccp_feature_numbers {185 DCCPF_RESERVED = 0,186 DCCPF_CCID = 1,187 DCCPF_SHORT_SEQNOS = 2,188 DCCPF_SEQUENCE_WINDOW = 3,189 DCCPF_ECN_INCAPABLE = 4,190 DCCPF_ACK_RATIO = 5,191 DCCPF_SEND_ACK_VECTOR = 6,192 DCCPF_SEND_NDP_COUNT = 7,193 DCCPF_MIN_CSUM_COVER = 8,194 DCCPF_DATA_CHECKSUM = 9,195 /* 10-127 reserved */196 DCCPF_MIN_CCID_SPECIFIC = 128,197 DCCPF_SEND_LEV_RATE = 192, /* RFC 4342, sec. 8.4 */198 DCCPF_MAX_CCID_SPECIFIC = 255,199};200 201/* DCCP socket control message types for cmsg */202enum dccp_cmsg_type {203 DCCP_SCM_PRIORITY = 1,204 DCCP_SCM_QPOLICY_MAX = 0xFFFF,205 /* ^-- Up to here reserved exclusively for qpolicy parameters */206 DCCP_SCM_MAX207};208 209/* DCCP priorities for outgoing/queued packets */210enum dccp_packet_dequeueing_policy {211 DCCPQ_POLICY_SIMPLE,212 DCCPQ_POLICY_PRIO,213 DCCPQ_POLICY_MAX214};215 216/* DCCP socket options */217#define DCCP_SOCKOPT_PACKET_SIZE 1 /* XXX deprecated, without effect */218#define DCCP_SOCKOPT_SERVICE 2219#define DCCP_SOCKOPT_CHANGE_L 3220#define DCCP_SOCKOPT_CHANGE_R 4221#define DCCP_SOCKOPT_GET_CUR_MPS 5222#define DCCP_SOCKOPT_SERVER_TIMEWAIT 6223#define DCCP_SOCKOPT_SEND_CSCOV 10224#define DCCP_SOCKOPT_RECV_CSCOV 11225#define DCCP_SOCKOPT_AVAILABLE_CCIDS 12226#define DCCP_SOCKOPT_CCID 13227#define DCCP_SOCKOPT_TX_CCID 14228#define DCCP_SOCKOPT_RX_CCID 15229#define DCCP_SOCKOPT_QPOLICY_ID 16230#define DCCP_SOCKOPT_QPOLICY_TXQLEN 17231#define DCCP_SOCKOPT_CCID_RX_INFO 128232#define DCCP_SOCKOPT_CCID_TX_INFO 192233 234/* maximum number of services provided on the same listening port */235#define DCCP_SERVICE_LIST_MAX_LEN 32236 237 238#endif /* _UAPI_LINUX_DCCP_H */239