15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <stdbool.h> 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <stdint.h> 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <stdio.h> 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <linux/ip.h> 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef IPTOS_NORMALSVC 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define IPTOS_NORMALSVC 0 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct tos_value_mask { 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint8_t value, mask; 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static const struct tos_symbol_info { 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned char value; 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char *name; 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} tos_symbol_names[] = { 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {IPTOS_LOWDELAY, "Minimize-Delay"}, 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {IPTOS_THROUGHPUT, "Maximize-Throughput"}, 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {IPTOS_RELIABILITY, "Maximize-Reliability"}, 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {IPTOS_MINCOST, "Minimize-Cost"}, 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {IPTOS_NORMALSVC, "Normal-Service"}, 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {}, 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static bool tos_try_print_symbolic(const char *prefix, 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint8_t value, uint8_t mask) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const struct tos_symbol_info *symbol; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (mask != 0x3F) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (symbol = tos_symbol_names; symbol->name != NULL; ++symbol) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (value == symbol->value) { 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf(" %s%s", prefix, symbol->name); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)