xref: /aosp_15_r20/external/iptables/extensions/dscp_helper.c (revision a71a954618bbadd4a345637e5edcf36eec826889)
1*a71a9546SAutomerger Merge Worker /*
2*a71a9546SAutomerger Merge Worker  * DiffServ classname <-> DiffServ codepoint mapping functions.
3*a71a9546SAutomerger Merge Worker  *
4*a71a9546SAutomerger Merge Worker  * The latest list of the mappings can be found at:
5*a71a9546SAutomerger Merge Worker  * <http://www.iana.org/assignments/dscp-registry>
6*a71a9546SAutomerger Merge Worker  *
7*a71a9546SAutomerger Merge Worker  * This code is released under the GNU GPL v2, 1991
8*a71a9546SAutomerger Merge Worker  *
9*a71a9546SAutomerger Merge Worker  * Author: Iain Barnes
10*a71a9546SAutomerger Merge Worker  */
11*a71a9546SAutomerger Merge Worker 
12*a71a9546SAutomerger Merge Worker #include <stdio.h>
13*a71a9546SAutomerger Merge Worker #include <string.h>
14*a71a9546SAutomerger Merge Worker #include <xtables.h>
15*a71a9546SAutomerger Merge Worker 
16*a71a9546SAutomerger Merge Worker 
17*a71a9546SAutomerger Merge Worker static const struct ds_class
18*a71a9546SAutomerger Merge Worker {
19*a71a9546SAutomerger Merge Worker 	const char *name;
20*a71a9546SAutomerger Merge Worker 	unsigned int dscp;
21*a71a9546SAutomerger Merge Worker } ds_classes[] =
22*a71a9546SAutomerger Merge Worker {
23*a71a9546SAutomerger Merge Worker 	{ "CS0", 0x00 },
24*a71a9546SAutomerger Merge Worker 	{ "CS1", 0x08 },
25*a71a9546SAutomerger Merge Worker 	{ "CS2", 0x10 },
26*a71a9546SAutomerger Merge Worker 	{ "CS3", 0x18 },
27*a71a9546SAutomerger Merge Worker 	{ "CS4", 0x20 },
28*a71a9546SAutomerger Merge Worker 	{ "CS5", 0x28 },
29*a71a9546SAutomerger Merge Worker 	{ "CS6", 0x30 },
30*a71a9546SAutomerger Merge Worker 	{ "CS7", 0x38 },
31*a71a9546SAutomerger Merge Worker 	{ "BE", 0x00 },
32*a71a9546SAutomerger Merge Worker 	{ "AF11", 0x0a },
33*a71a9546SAutomerger Merge Worker 	{ "AF12", 0x0c },
34*a71a9546SAutomerger Merge Worker 	{ "AF13", 0x0e },
35*a71a9546SAutomerger Merge Worker 	{ "AF21", 0x12 },
36*a71a9546SAutomerger Merge Worker 	{ "AF22", 0x14 },
37*a71a9546SAutomerger Merge Worker 	{ "AF23", 0x16 },
38*a71a9546SAutomerger Merge Worker 	{ "AF31", 0x1a },
39*a71a9546SAutomerger Merge Worker 	{ "AF32", 0x1c },
40*a71a9546SAutomerger Merge Worker 	{ "AF33", 0x1e },
41*a71a9546SAutomerger Merge Worker 	{ "AF41", 0x22 },
42*a71a9546SAutomerger Merge Worker 	{ "AF42", 0x24 },
43*a71a9546SAutomerger Merge Worker 	{ "AF43", 0x26 },
44*a71a9546SAutomerger Merge Worker 	{ "EF", 0x2e }
45*a71a9546SAutomerger Merge Worker };
46*a71a9546SAutomerger Merge Worker 
47*a71a9546SAutomerger Merge Worker 
48*a71a9546SAutomerger Merge Worker 
49*a71a9546SAutomerger Merge Worker static unsigned int
class_to_dscp(const char * name)50*a71a9546SAutomerger Merge Worker class_to_dscp(const char *name)
51*a71a9546SAutomerger Merge Worker {
52*a71a9546SAutomerger Merge Worker 	unsigned int i;
53*a71a9546SAutomerger Merge Worker 
54*a71a9546SAutomerger Merge Worker 	for (i = 0; i < ARRAY_SIZE(ds_classes); i++) {
55*a71a9546SAutomerger Merge Worker 		if (!strncasecmp(name, ds_classes[i].name,
56*a71a9546SAutomerger Merge Worker 					strlen(ds_classes[i].name)))
57*a71a9546SAutomerger Merge Worker 			return ds_classes[i].dscp;
58*a71a9546SAutomerger Merge Worker 	}
59*a71a9546SAutomerger Merge Worker 
60*a71a9546SAutomerger Merge Worker 	xtables_error(PARAMETER_PROBLEM,
61*a71a9546SAutomerger Merge Worker 		      "Invalid DSCP value `%s'", name);
62*a71a9546SAutomerger Merge Worker }
63*a71a9546SAutomerger Merge Worker 
64*a71a9546SAutomerger Merge Worker 
65*a71a9546SAutomerger Merge Worker #if 0
66*a71a9546SAutomerger Merge Worker static const char *
67*a71a9546SAutomerger Merge Worker dscp_to_name(unsigned int dscp)
68*a71a9546SAutomerger Merge Worker {
69*a71a9546SAutomerger Merge Worker 	int i;
70*a71a9546SAutomerger Merge Worker 
71*a71a9546SAutomerger Merge Worker 	for (i = 0; i < ARRAY_SIZE(ds_classes); ++i)
72*a71a9546SAutomerger Merge Worker 		if (dscp == ds_classes[i].dscp)
73*a71a9546SAutomerger Merge Worker 			return ds_classes[i].name;
74*a71a9546SAutomerger Merge Worker 
75*a71a9546SAutomerger Merge Worker 	xtables_error(PARAMETER_PROBLEM,
76*a71a9546SAutomerger Merge Worker 		      "Invalid DSCP value `%d'", dscp);
77*a71a9546SAutomerger Merge Worker }
78*a71a9546SAutomerger Merge Worker #endif
79*a71a9546SAutomerger Merge Worker 
80