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