xref: /freebsd/sys/netinet/dccp.h (revision 95ee2897)
1d88fe3d9STom Jones /*-
24d846d26SWarner Losh  * SPDX-License-Identifier: BSD-2-Clause
3d88fe3d9STom Jones  *
4d88fe3d9STom Jones  * Copyright (c) 2019 Tom Jones <thj@freebsd.org>
5d88fe3d9STom Jones  *
6d88fe3d9STom Jones  * Redistribution and use in source and binary forms, with or without
7d88fe3d9STom Jones  * modification, are permitted provided that the following conditions
8d88fe3d9STom Jones  * are met:
9d88fe3d9STom Jones  * 1. Redistributions of source code must retain the above copyright
10d88fe3d9STom Jones  *    notice, this list of conditions and the following disclaimer.
11d88fe3d9STom Jones  * 2. Redistributions in binary form must reproduce the above copyright
12d88fe3d9STom Jones  *    notice, this list of conditions and the following disclaimer in the
13d88fe3d9STom Jones  *    documentation and/or other materials provided with the distribution.
14d88fe3d9STom Jones  *
15d88fe3d9STom Jones  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16d88fe3d9STom Jones  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17d88fe3d9STom Jones  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18d88fe3d9STom Jones  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19d88fe3d9STom Jones  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20d88fe3d9STom Jones  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21d88fe3d9STom Jones  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22d88fe3d9STom Jones  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23d88fe3d9STom Jones  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24d88fe3d9STom Jones  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25d88fe3d9STom Jones  * SUCH DAMAGE.
26d88fe3d9STom Jones  */
27d88fe3d9STom Jones 
28d88fe3d9STom Jones #ifndef _NETINET_DCCP_H_
29d88fe3d9STom Jones #define _NETINET_DCCP_H_
30d88fe3d9STom Jones 
31d88fe3d9STom Jones /* DCCP protocol header as per RFC4340 */
32d88fe3d9STom Jones struct dccphdr {
33d88fe3d9STom Jones 	uint16_t	d_sport;
34d88fe3d9STom Jones 	uint16_t	d_dport;
35d88fe3d9STom Jones 	uint8_t		d_doff;
36d88fe3d9STom Jones #if BYTE_ORDER == LITTLE_ENDIAN
37d88fe3d9STom Jones 	uint8_t		d_cscov:4,
38d88fe3d9STom Jones 			d_ccval:4;
39d88fe3d9STom Jones #endif
40d88fe3d9STom Jones #if BYTE_ORDER == BIG_ENDIAN
41d88fe3d9STom Jones 	uint8_t		d_ccval:4,
42d88fe3d9STom Jones 			d_cscov:4;
43d88fe3d9STom Jones #endif
44d88fe3d9STom Jones 	uint8_t		d_cksum[2];
45d88fe3d9STom Jones #if BYTE_ORDER == LITTLE_ENDIAN
46d88fe3d9STom Jones 	uint8_t		d_res:3,
47d88fe3d9STom Jones 			d_type:4,
48d88fe3d9STom Jones 			d_x:1;
49d88fe3d9STom Jones #endif
50d88fe3d9STom Jones #if BYTE_ORDER == BIG_ENDIAN
51d88fe3d9STom Jones 	uint8_t		d_x:1,
52d88fe3d9STom Jones 			d_type:4,
53d88fe3d9STom Jones 			d_res:3;
54d88fe3d9STom Jones #endif
55d88fe3d9STom Jones        /*
56d88fe3d9STom Jones         * Provide enough space for both the short (24 bit) sequence number and
57d88fe3d9STom Jones         * the long (48 bit) sequene number and a leading reserved byte in
58d88fe3d9STom Jones         * front of the long sequence number.
59d88fe3d9STom Jones         */
60d88fe3d9STom Jones        union dccp_seqno {
61d88fe3d9STom Jones                uint8_t shortseq[3];
62d88fe3d9STom Jones                struct dccp_long_seqno {
63d88fe3d9STom Jones                        uint8_t res;
64d88fe3d9STom Jones                        uint8_t seq[6];
65d88fe3d9STom Jones                } longseq;
66d88fe3d9STom Jones        } d_seqno;
67d88fe3d9STom Jones };
68d88fe3d9STom Jones 
69d88fe3d9STom Jones #define d_seqno_short d_seqno.shortseq;
70d88fe3d9STom Jones #define d_seqno_long d_seqno.longseq.seq;
71d88fe3d9STom Jones 
72d88fe3d9STom Jones #define DCCP_SHORTHDR	12
73d88fe3d9STom Jones #define DCCP_LONGHDR	16
74d88fe3d9STom Jones #define DCCP_EXTHDR	0x80
75d88fe3d9STom Jones 
76d88fe3d9STom Jones #endif /* _NETINET_DCCP_H */
77