xref: /linux/include/net/dscp.h (revision 90d32e92011eaae8e70a9169b4e7acf4ca8f9d3a)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /* Copyright (c) 2024 Pengutronix, Oleksij Rempel <kernel@pengutronix.de> */
3 
4 #ifndef __DSCP_H__
5 #define __DSCP_H__
6 
7 /*
8  * DSCP Pools and Codepoint Space Division:
9  *
10  * The Differentiated Services (Diffserv) architecture defines a method for
11  * classifying and managing network traffic using the DS field in IPv4 and IPv6
12  * packet headers. This field can carry one of 64 distinct DSCP (Differentiated
13  * Services Code Point) values, which are divided into three pools based on
14  * their Least Significant Bits (LSB) patterns and intended usage. Each pool has
15  * a specific registration procedure for assigning DSCP values:
16  *
17  * Pool 1 (Standards Action Pool):
18  * - Codepoint Space: xxxxx0
19  *   This pool includes DSCP values ending in '0' (binary), allocated via
20  *   Standards Action. It is intended for globally recognized traffic classes,
21  *   ensuring interoperability across the internet. This pool encompasses
22  *   well-known DSCP values such as CS0-CS7, AFxx, EF, and VOICE-ADMIT.
23  *
24  * Pool 2 (Experimental/Local Use Pool):
25  * - Codepoint Space: xxxx11
26  *   Reserved for DSCP values ending in '11' (binary), this pool is designated
27  *   for Experimental or Local Use. It allows for private or temporary traffic
28  *   marking schemes not intended for standardized global use, facilitating
29  *   testing and network-specific configurations without impacting
30  *   interoperability.
31  *
32  * Pool 3 (Preferential Standardization Pool):
33  * - Codepoint Space: xxxx01
34  *   Initially reserved for experimental or local use, this pool now serves as
35  *   a secondary standardization resource should Pool 1 become exhausted. DSCP
36  *   values ending in '01' (binary) are assigned via Standards Action, with a
37  *   focus on adopting new, standardized traffic classes as the need arises.
38  *
39  * For pool updates see:
40  * https://www.iana.org/assignments/dscp-registry/dscp-registry.xhtml
41  */
42 
43 /* Pool 1: Standardized DSCP values as per [RFC8126] */
44 #define DSCP_CS0 0		/* 000000, [RFC2474] */
45 /* CS0 is some times called default (DF) */
46 #define DSCP_DF 0		/* 000000, [RFC2474] */
47 #define DSCP_CS1 8		/* 001000, [RFC2474] */
48 #define DSCP_CS2 16		/* 010000, [RFC2474] */
49 #define DSCP_CS3 24		/* 011000, [RFC2474] */
50 #define DSCP_CS4 32		/* 100000, [RFC2474] */
51 #define DSCP_CS5 40		/* 101000, [RFC2474] */
52 #define DSCP_CS6 48		/* 110000, [RFC2474] */
53 #define DSCP_CS7 56		/* 111000, [RFC2474] */
54 #define DSCP_AF11 10		/* 001010, [RFC2597] */
55 #define DSCP_AF12 12		/* 001100, [RFC2597] */
56 #define DSCP_AF13 14		/* 001110, [RFC2597] */
57 #define DSCP_AF21 18		/* 010010, [RFC2597] */
58 #define DSCP_AF22 20		/* 010100, [RFC2597] */
59 #define DSCP_AF23 22		/* 010110, [RFC2597] */
60 #define DSCP_AF31 26		/* 011010, [RFC2597] */
61 #define DSCP_AF32 28		/* 011100, [RFC2597] */
62 #define DSCP_AF33 30		/* 011110, [RFC2597] */
63 #define DSCP_AF41 34		/* 100010, [RFC2597] */
64 #define DSCP_AF42 36		/* 100100, [RFC2597] */
65 #define DSCP_AF43 38		/* 100110, [RFC2597] */
66 #define DSCP_EF 46		/* 101110, [RFC3246] */
67 #define DSCP_VOICE_ADMIT 44	/* 101100, [RFC5865] */
68 
69 /* Pool 3: Standardized assignments, previously available for experimental/local
70  * use
71  */
72 #define DSCP_LE 1		/* 000001, [RFC8622] */
73 
74 #define DSCP_MAX 64
75 
76 #endif /* __DSCP_H__ */
77