diff --git a/networking/libiproute/rtm_map.c b/networking/libiproute/rtm_map.c index e94c99ab6..8b94c2f24 100644 --- a/networking/libiproute/rtm_map.c +++ b/networking/libiproute/rtm_map.c @@ -11,33 +11,55 @@ #include "rt_names.h" #include "utils.h" +static const char keywords[] ALIGN1 = + "local\0""nat\0""broadcast\0""brd\0""anycast\0" + "multicast\0""prohibit\0""unreachable\0""blackhole\0" + "xresolve\0""unicast\0""throw\0"; +enum { + ARG_local = 1, ARG_nat, ARG_broadcast, ARG_brd, ARG_anycast, + ARG_multicast, ARG_prohibit, ARG_unreachable, ARG_blackhole, + ARG_xresolve, ARG_unicast, ARG_throw +}; +#define str_local keywords +#define str_nat (str_local + sizeof("local")) +#define str_broadcast (str_nat + sizeof("nat")) +#define str_brd (str_broadcast + sizeof("broadcast")) +#define str_anycast (str_brd + sizeof("brd")) +#define str_multicast (str_anycast + sizeof("anycast")) +#define str_prohibit (str_multicast + sizeof("multicast")) +#define str_unreachable (str_prohibit + sizeof("prohibit")) +#define str_blackhole (str_unreachable + sizeof("unreachable")) +#define str_xresolve (str_blackhole + sizeof("blackhole")) +#define str_unicast (str_xresolve + sizeof("xresolve")) +#define str_throw (str_unicast + sizeof("unicast")) + const char* FAST_FUNC rtnl_rtntype_n2a(int id) { switch (id) { case RTN_UNSPEC: return "none"; case RTN_UNICAST: - return "unicast"; + return str_unicast; case RTN_LOCAL: - return "local"; + return str_local; case RTN_BROADCAST: - return "broadcast"; + return str_broadcast; case RTN_ANYCAST: - return "anycast"; + return str_anycast; case RTN_MULTICAST: - return "multicast"; + return str_multicast; case RTN_BLACKHOLE: - return "blackhole"; + return str_blackhole; case RTN_UNREACHABLE: - return "unreachable"; + return str_unreachable; case RTN_PROHIBIT: - return "prohibit"; + return str_prohibit; case RTN_THROW: - return "throw"; + return str_throw; case RTN_NAT: - return "nat"; + return str_nat; case RTN_XRESOLVE: - return "xresolve"; + return str_xresolve; default: return itoa(id); } @@ -45,15 +67,6 @@ const char* FAST_FUNC rtnl_rtntype_n2a(int id) int FAST_FUNC rtnl_rtntype_a2n(int *id, char *arg) { - static const char keywords[] ALIGN1 = - "local\0""nat\0""broadcast\0""brd\0""anycast\0" - "multicast\0""prohibit\0""unreachable\0""blackhole\0" - "xresolve\0""unicast\0""throw\0"; - enum { - ARG_local = 1, ARG_nat, ARG_broadcast, ARG_brd, ARG_anycast, - ARG_multicast, ARG_prohibit, ARG_unreachable, ARG_blackhole, - ARG_xresolve, ARG_unicast, ARG_throw - }; const smalluint key = index_in_substrings(keywords, arg) + 1; char *end; unsigned long res;