From: Yu Watanabe Date: Fri, 12 Nov 2021 05:29:12 +0000 (+0900) Subject: network: introduce route_flags_to_string_alloc() X-Git-Tag: v250-rc1~263^2~1 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=18b23bd49356e3b5a527badae76761be46517d00;p=thirdparty%2Fsystemd.git network: introduce route_flags_to_string_alloc() --- diff --git a/src/network/networkd-route-util.c b/src/network/networkd-route-util.c index 77e8c2bfb9b..c1ab437facf 100644 --- a/src/network/networkd-route-util.c +++ b/src/network/networkd-route-util.c @@ -219,6 +219,32 @@ static const char * const route_protocol_full_table[] = { DEFINE_STRING_TABLE_LOOKUP_WITH_FALLBACK(route_protocol_full, int, UINT8_MAX); +int route_flags_to_string_alloc(uint32_t flags, char **ret) { + _cleanup_free_ char *str = NULL; + static const struct { + uint32_t flag; + const char *name; + } map[] = { + { RTNH_F_DEAD, "dead" }, /* Nexthop is dead (used by multipath) */ + { RTNH_F_PERVASIVE, "pervasive" }, /* Do recursive gateway lookup */ + { RTNH_F_ONLINK, "onlink" }, /* Gateway is forced on link */ + { RTNH_F_OFFLOAD, "offload" }, /* Nexthop is offloaded */ + { RTNH_F_LINKDOWN, "linkdown" }, /* carrier-down on nexthop */ + { RTNH_F_UNRESOLVED, "unresolved" }, /* The entry is unresolved (ipmr) */ + { RTNH_F_TRAP, "trap" }, /* Nexthop is trapping packets */ + }; + + assert(ret); + + for (size_t i = 0; i < ELEMENTSOF(map); i++) + if (flags & map[i].flag && + !strextend_with_separator(&str, ",", map[i].name)) + return -ENOMEM; + + *ret = TAKE_PTR(str); + return 0; +} + static const char * const route_table_table[] = { [RT_TABLE_DEFAULT] = "default", [RT_TABLE_MAIN] = "main", diff --git a/src/network/networkd-route-util.h b/src/network/networkd-route-util.h index 4b1f778d933..3dd3d3ace8e 100644 --- a/src/network/networkd-route-util.h +++ b/src/network/networkd-route-util.h @@ -26,6 +26,8 @@ int route_protocol_to_string_alloc(int t, char **ret); int route_protocol_full_from_string(const char *s); int route_protocol_full_to_string_alloc(int t, char **ret); +int route_flags_to_string_alloc(uint32_t flags, char **ret); + int manager_get_route_table_from_string(const Manager *m, const char *table, uint32_t *ret); int manager_get_route_table_to_string(const Manager *m, uint32_t table, char **ret);