dscp_helper.c revision 2c69b55e55f2efc5a334b87ccdceaa9de0ecb658
16e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)/*
26e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * DiffServ classname <-> DiffServ codepoint mapping functions.
36e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) *
46e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * The latest list of the mappings can be found at:
56e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * <http://www.iana.org/assignments/dscp-registry>
66e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) *
76e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * This code is released under the GNU GPL v2, 1991
86e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) *
96e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * Author: Iain Barnes
106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) */
116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include <stdio.h>
136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include <string.h>
146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include <xtables.h>
156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)static const struct ds_class
186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles){
196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)	const char *name;
206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)	unsigned int dscp;
216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} ds_classes[] =
226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles){
236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)	{ "CS0", 0x00 },
246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)	{ "CS1", 0x08 },
256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)	{ "CS2", 0x10 },
266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)	{ "CS3", 0x18 },
276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)	{ "CS4", 0x20 },
286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)	{ "CS5", 0x28 },
296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)	{ "CS6", 0x30 },
306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)	{ "CS7", 0x38 },
316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)	{ "BE", 0x00 },
326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)	{ "AF11", 0x0a },
336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)	{ "AF12", 0x0c },
346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)	{ "AF13", 0x0e },
356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)	{ "AF21", 0x12 },
366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)	{ "AF22", 0x14 },
376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)	{ "AF23", 0x16 },
386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)	{ "AF31", 0x1a },
396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)	{ "AF32", 0x1c },
406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)	{ "AF33", 0x1e },
4134680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)	{ "AF41", 0x22 },
426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)	{ "AF42", 0x24 },
436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)	{ "AF43", 0x26 },
446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)	{ "EF", 0x2e }
456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)};
466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)static unsigned int
506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class_to_dscp(const char *name)
516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles){
526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)	unsigned int i;
536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)	for (i = 0; i < ARRAY_SIZE(ds_classes); i++) {
556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)		if (!strncasecmp(name, ds_classes[i].name,
566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)					strlen(ds_classes[i].name)))
576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)			return ds_classes[i].dscp;
586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)	}
596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)	xtables_error(PARAMETER_PROBLEM,
616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)			"Invalid DSCP value `%s'\n", name);
626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#if 0
666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)static const char *
676e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)dscp_to_name(unsigned int dscp)
686e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles){
696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)	int i;
706e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)	for (i = 0; i < ARRAY_SIZE(ds_classes); ++i)
726e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)		if (dscp == ds_classes[i].dscp)
736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)			return ds_classes[i].name;
746e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)	xtables_error(PARAMETER_PROBLEM,
766e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)			"Invalid DSCP value `%d'\n", dscp);
776e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#endif
796e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
806e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)