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