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