dscp_helper.c revision e37d45ce390c2f5a7f1e64742b9100ecef0def54
15f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer/*
25f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer * DiffServ classname <-> DiffServ codepoint mapping functions.
35f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer *
45f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer * The latest list of the mappings can be found at:
50bc735ffcfb223c0186419547abaa5c84482663eChris Lattner * <http://www.iana.org/assignments/dscp-registry>
60bc735ffcfb223c0186419547abaa5c84482663eChris Lattner *
75f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer * This code is released under the GNU GPL v2, 1991
85f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer *
95f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer * Author: Iain Barnes
105f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer */
115f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
125f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include <stdio.h>
135f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include <string.h>
145f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include <xtables.h>
155f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
165f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
170827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidisstatic const struct ds_class
183632a35e811096da86d957c3e6ba0e73d75782f5Ted Kremenek{
198f89652be7bb85bdac83c37fec85f20cdd2dfc83Argyrios Kyrtzidis	const char *name;
20ae50fa0a9e7217b043ed4ffe175af4b26dc90f34Chris Lattner	unsigned int dscp;
219dc1f530c086d2c16f8cba758b0f59a5bf41323aChris Lattner} ds_classes[] =
229c728dc4d8da89c73fcae74c9e72d7a83ffd7b6dTed Kremenek{
232b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner	{ "CS0", 0x00 },
24ae50fa0a9e7217b043ed4ffe175af4b26dc90f34Chris Lattner	{ "CS1", 0x08 },
25ceafc4b63599d14f0b5b10ff92e22bf242682dceBenjamin Kramer	{ "CS2", 0x10 },
262b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner	{ "CS3", 0x18 },
2706159e878569e5f39bf0e8f11b84ac3ad0970597Chris Lattner	{ "CS4", 0x20 },
289c728dc4d8da89c73fcae74c9e72d7a83ffd7b6dTed Kremenek	{ "CS5", 0x28 },
299c728dc4d8da89c73fcae74c9e72d7a83ffd7b6dTed Kremenek	{ "CS6", 0x30 },
305f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer	{ "CS7", 0x38 },
311eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump	{ "BE", 0x00 },
32a9793ed6a77946c988ee38035baf4cde6ff2e864Ted Kremenek	{ "AF11", 0x0a },
331eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump	{ "AF12", 0x0c },
342b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner	{ "AF13", 0x0e },
352b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner	{ "AF21", 0x12 },
362b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner	{ "AF22", 0x14 },
372b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner	{ "AF23", 0x16 },
382b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner	{ "AF31", 0x1a },
392b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner	{ "AF32", 0x1c },
402b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner	{ "AF33", 0x1e },
412b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner	{ "AF41", 0x22 },
421eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump	{ "AF42", 0x24 },
432b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner	{ "AF43", 0x26 },
441eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump	{ "EF", 0x2e }
452b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner};
462b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner
472b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner
482b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner
492b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattnerstatic unsigned int
502b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattnerclass_to_dscp(const char *name)
511eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump{
52de7aeefc5573d669ed476d7bda7a8940d3bcadb7Chris Lattner	unsigned int i;
532b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner
541eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump	for (i = 0; i < ARRAY_SIZE(ds_classes); i++) {
552b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner		if (!strncasecmp(name, ds_classes[i].name,
562b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner					strlen(ds_classes[i].name)))
57de7aeefc5573d669ed476d7bda7a8940d3bcadb7Chris Lattner			return ds_classes[i].dscp;
582b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner	}
592b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner
602b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner	xtables_error(PARAMETER_PROBLEM,
612b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner			"Invalid DSCP value `%s'\n", name);
622b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner}
632b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner
641eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
651eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump#if 0
665f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerstatic const char *
675f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerdscp_to_name(unsigned int dscp)
685f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer{
695f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer	int i;
705f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
71bcc2a67e5180612417727cbdd8afd0f79fdf726dChris Lattner	for (i = 0; i < ARRAY_SIZE(ds_classes); ++i)
725f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer		if (dscp == ds_classes[i].dscp)
73de7aeefc5573d669ed476d7bda7a8940d3bcadb7Chris Lattner			return ds_classes[i].name;
745f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
759ebac5e0dab6f99717e3ff169c45048966146b2eChris Lattner	xtables_error(PARAMETER_PROBLEM,
765f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer			"Invalid DSCP value `%d'\n", dscp);
775f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer}
781eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump#endif
79de7aeefc5573d669ed476d7bda7a8940d3bcadb7Chris Lattner
80de7aeefc5573d669ed476d7bda7a8940d3bcadb7Chris Lattner