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)