linux-headers (unknown)

(root)/
include/
linux/
dccp.h
       1  /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
       2  #ifndef _LINUX_DCCP_H
       3  #define _LINUX_DCCP_H
       4  
       5  #include <linux/types.h>
       6  #include <asm/byteorder.h>
       7  
       8  /**
       9   * struct dccp_hdr - generic part of DCCP packet header
      10   *
      11   * @dccph_sport - Relevant port on the endpoint that sent this packet
      12   * @dccph_dport - Relevant port on the other endpoint
      13   * @dccph_doff - Data Offset from the start of the DCCP header, in 32-bit words
      14   * @dccph_ccval - Used by the HC-Sender CCID
      15   * @dccph_cscov - Parts of the packet that are covered by the Checksum field
      16   * @dccph_checksum - Internet checksum, depends on dccph_cscov
      17   * @dccph_x - 0 = 24 bit sequence number, 1 = 48
      18   * @dccph_type - packet type, see DCCP_PKT_ prefixed macros
      19   * @dccph_seq - sequence number high or low order 24 bits, depends on dccph_x
      20   */
      21  struct 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  #else
      32  #error  "Adjust your <asm/byteorder.h> defines"
      33  #endif
      34  	__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  #else
      44  #error  "Adjust your <asm/byteorder.h> defines"
      45  #endif
      46  	__u8	dccph_seq2;
      47  	__be16	dccph_seq;
      48  };
      49  
      50  /**
      51   * struct dccp_hdr_ext - the low bits of a 48 bit seq packet
      52   *
      53   * @dccph_seq_low - low 24 bits of a 48 bit seq packet
      54   */
      55  struct dccp_hdr_ext {
      56  	__be32	dccph_seq_low;
      57  };
      58  
      59  /**
      60   * struct dccp_hdr_request - Connection initiation request header
      61   *
      62   * @dccph_req_service - Service to which the client app wants to connect
      63   */
      64  struct dccp_hdr_request {
      65  	__be32	dccph_req_service;
      66  };
      67  /**
      68   * struct dccp_hdr_ack_bits - acknowledgment bits common to most packets
      69   *
      70   * @dccph_resp_ack_nr_high - 48 bit ack number high order bits, contains GSR
      71   * @dccph_resp_ack_nr_low - 48 bit ack number low order bits, contains GSR
      72   */
      73  struct 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 header
      80   *
      81   * @dccph_resp_ack - 48 bit Acknowledgment Number Subheader (5.3)
      82   * @dccph_resp_service - Echoes the Service Code on a received DCCP-Request
      83   */
      84  struct 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 connection
      91   *
      92   * @dccph_reset_ack - 48 bit Acknowledgment Number Subheader (5.6)
      93   * @dccph_reset_code - one of %dccp_reset_codes
      94   * @dccph_reset_data - the Data 1 ... Data 3 fields from 5.6
      95   */
      96  struct dccp_hdr_reset {
      97  	struct dccp_hdr_ack_bits	dccph_reset_ack;
      98  	__u8				dccph_reset_code,
      99  					dccph_reset_data[3];
     100  };
     101  
     102  enum 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_INVALID
     117  
     118  static __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  }
     135  enum 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 */
     153  enum {
     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	253
     176  
     177  /* DCCP CCIDS */
     178  enum {
     179  	DCCPC_CCID2 = 2,
     180  	DCCPC_CCID3 = 3,
     181  };
     182  
     183  /* DCCP features (RFC 4340 section 6.4) */
     184  enum 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 */
     202  enum 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_MAX
     207  };
     208  
     209  /* DCCP priorities for outgoing/queued packets */
     210  enum dccp_packet_dequeueing_policy {
     211  	DCCPQ_POLICY_SIMPLE,
     212  	DCCPQ_POLICY_PRIO,
     213  	DCCPQ_POLICY_MAX
     214  };
     215  
     216  /* DCCP socket options */
     217  #define DCCP_SOCKOPT_PACKET_SIZE	1 /* XXX deprecated, without effect */
     218  #define DCCP_SOCKOPT_SERVICE		2
     219  #define DCCP_SOCKOPT_CHANGE_L		3
     220  #define DCCP_SOCKOPT_CHANGE_R		4
     221  #define DCCP_SOCKOPT_GET_CUR_MPS	5
     222  #define DCCP_SOCKOPT_SERVER_TIMEWAIT	6
     223  #define DCCP_SOCKOPT_SEND_CSCOV		10
     224  #define DCCP_SOCKOPT_RECV_CSCOV		11
     225  #define DCCP_SOCKOPT_AVAILABLE_CCIDS	12
     226  #define DCCP_SOCKOPT_CCID		13
     227  #define DCCP_SOCKOPT_TX_CCID		14
     228  #define DCCP_SOCKOPT_RX_CCID		15
     229  #define DCCP_SOCKOPT_QPOLICY_ID		16
     230  #define DCCP_SOCKOPT_QPOLICY_TXQLEN	17
     231  #define DCCP_SOCKOPT_CCID_RX_INFO	128
     232  #define DCCP_SOCKOPT_CCID_TX_INFO	192
     233  
     234  /* maximum number of services provided on the same listening port */
     235  #define DCCP_SERVICE_LIST_MAX_LEN      32
     236  
     237  
     238  #endif /* _LINUX_DCCP_H */