10720c1226381f5c71748673c43c12499f1f254c7Jan Engelhardt#include <stdbool.h> 20720c1226381f5c71748673c43c12499f1f254c7Jan Engelhardt#include <stdint.h> 30720c1226381f5c71748673c43c12499f1f254c7Jan Engelhardt#include <stdio.h> 4ef18e8147903885708d1c264904129af4fb636d6Jan Engelhardt#include <linux/ip.h> 50720c1226381f5c71748673c43c12499f1f254c7Jan Engelhardt 6350661a6eb089f3e54e67e022db9e16ea280499fJan Engelhardt#ifndef IPTOS_NORMALSVC 7350661a6eb089f3e54e67e022db9e16ea280499fJan Engelhardt# define IPTOS_NORMALSVC 0 8350661a6eb089f3e54e67e022db9e16ea280499fJan Engelhardt#endif 9350661a6eb089f3e54e67e022db9e16ea280499fJan Engelhardt 100720c1226381f5c71748673c43c12499f1f254c7Jan Engelhardtstruct tos_value_mask { 110720c1226381f5c71748673c43c12499f1f254c7Jan Engelhardt uint8_t value, mask; 120720c1226381f5c71748673c43c12499f1f254c7Jan Engelhardt}; 130720c1226381f5c71748673c43c12499f1f254c7Jan Engelhardt 140720c1226381f5c71748673c43c12499f1f254c7Jan Engelhardtstatic const struct tos_symbol_info { 150720c1226381f5c71748673c43c12499f1f254c7Jan Engelhardt unsigned char value; 160720c1226381f5c71748673c43c12499f1f254c7Jan Engelhardt const char *name; 170720c1226381f5c71748673c43c12499f1f254c7Jan Engelhardt} tos_symbol_names[] = { 180720c1226381f5c71748673c43c12499f1f254c7Jan Engelhardt {IPTOS_LOWDELAY, "Minimize-Delay"}, 190720c1226381f5c71748673c43c12499f1f254c7Jan Engelhardt {IPTOS_THROUGHPUT, "Maximize-Throughput"}, 200720c1226381f5c71748673c43c12499f1f254c7Jan Engelhardt {IPTOS_RELIABILITY, "Maximize-Reliability"}, 210720c1226381f5c71748673c43c12499f1f254c7Jan Engelhardt {IPTOS_MINCOST, "Minimize-Cost"}, 220720c1226381f5c71748673c43c12499f1f254c7Jan Engelhardt {IPTOS_NORMALSVC, "Normal-Service"}, 2332b8e61e4e5bd405d9ad07bf9468498dfbb19f9eJan Engelhardt {}, 240720c1226381f5c71748673c43c12499f1f254c7Jan Engelhardt}; 250720c1226381f5c71748673c43c12499f1f254c7Jan Engelhardt 260720c1226381f5c71748673c43c12499f1f254c7Jan Engelhardtstatic bool tos_try_print_symbolic(const char *prefix, 277ac405297ec38449b30e3b05fd6bf2082fd3d803Jan Engelhardt uint8_t value, uint8_t mask) 280720c1226381f5c71748673c43c12499f1f254c7Jan Engelhardt{ 290720c1226381f5c71748673c43c12499f1f254c7Jan Engelhardt const struct tos_symbol_info *symbol; 300720c1226381f5c71748673c43c12499f1f254c7Jan Engelhardt 310720c1226381f5c71748673c43c12499f1f254c7Jan Engelhardt if (mask != 0x3F) 320720c1226381f5c71748673c43c12499f1f254c7Jan Engelhardt return false; 330720c1226381f5c71748673c43c12499f1f254c7Jan Engelhardt 340720c1226381f5c71748673c43c12499f1f254c7Jan Engelhardt for (symbol = tos_symbol_names; symbol->name != NULL; ++symbol) 350720c1226381f5c71748673c43c12499f1f254c7Jan Engelhardt if (value == symbol->value) { 3673866357e4a7a0fdc1b293bf8863fee2bd56da9eJan Engelhardt printf(" %s%s", prefix, symbol->name); 370720c1226381f5c71748673c43c12499f1f254c7Jan Engelhardt return true; 380720c1226381f5c71748673c43c12499f1f254c7Jan Engelhardt } 390720c1226381f5c71748673c43c12499f1f254c7Jan Engelhardt 400720c1226381f5c71748673c43c12499f1f254c7Jan Engelhardt return false; 410720c1226381f5c71748673c43c12499f1f254c7Jan Engelhardt} 42