diff options
author | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2021-11-29 13:58:49 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-11-29 13:58:49 +0100 |
commit | 4b658ff651e0a59b099c6bee14a89ed97b061325 (patch) | |
tree | 22261b9a5bde2bb9786a0aa51bd1cbdeb2c035c0 /src/network/networkd-link.c | |
parent | 1e135e978092ca8df64cbd314148036bd17dcdcc (diff) | |
parent | 48c67fdfb13b09c2db25b1944b4730a21910f809 (diff) | |
download | systemd-4b658ff651e0a59b099c6bee14a89ed97b061325.tar.gz |
Merge pull request #21531 from keszybz/log2-tables
Optimize log2 tables
Diffstat (limited to 'src/network/networkd-link.c')
-rw-r--r-- | src/network/networkd-link.c | 59 |
1 files changed, 28 insertions, 31 deletions
diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index 3489dfa0d2..4df3e19220 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -2660,50 +2660,47 @@ int link_call_getlink(Link *link, link_netlink_message_handler_t callback) { } static const char* const link_state_table[_LINK_STATE_MAX] = { - [LINK_STATE_PENDING] = "pending", + [LINK_STATE_PENDING] = "pending", [LINK_STATE_INITIALIZED] = "initialized", [LINK_STATE_CONFIGURING] = "configuring", - [LINK_STATE_CONFIGURED] = "configured", - [LINK_STATE_UNMANAGED] = "unmanaged", - [LINK_STATE_FAILED] = "failed", - [LINK_STATE_LINGER] = "linger", + [LINK_STATE_CONFIGURED] = "configured", + [LINK_STATE_UNMANAGED] = "unmanaged", + [LINK_STATE_FAILED] = "failed", + [LINK_STATE_LINGER] = "linger", }; DEFINE_STRING_TABLE_LOOKUP(link_state, LinkState); int link_flags_to_string_alloc(uint32_t flags, char **ret) { _cleanup_free_ char *str = NULL; - static const struct { - uint32_t flag; - const char *name; - } map[] = { - { IFF_UP, "up" }, /* interface is up. */ - { IFF_BROADCAST, "broadcast" }, /* broadcast address valid.*/ - { IFF_DEBUG, "debug" }, /* turn on debugging. */ - { IFF_LOOPBACK, "loopback" }, /* interface is a loopback net. */ - { IFF_POINTOPOINT, "point-to-point" }, /* interface has p-p link. */ - { IFF_NOTRAILERS, "no-trailers" }, /* avoid use of trailers. */ - { IFF_RUNNING, "running" }, /* interface RFC2863 OPER_UP. */ - { IFF_NOARP, "no-arp" }, /* no ARP protocol. */ - { IFF_PROMISC, "promiscuous" }, /* receive all packets. */ - { IFF_ALLMULTI, "all-multicast" }, /* receive all multicast packets. */ - { IFF_MASTER, "master" }, /* master of a load balancer. */ - { IFF_SLAVE, "slave" }, /* slave of a load balancer. */ - { IFF_MULTICAST, "multicast" }, /* supports multicast.*/ - { IFF_PORTSEL, "portsel" }, /* can set media type. */ - { IFF_AUTOMEDIA, "auto-media" }, /* auto media select active. */ - { IFF_DYNAMIC, "dynamic" }, /* dialup device with changing addresses. */ - { IFF_LOWER_UP, "lower-up" }, /* driver signals L1 up. */ - { IFF_DORMANT, "dormant" }, /* driver signals dormant. */ - { IFF_ECHO, "echo" }, /* echo sent packets. */ + static const char* map[] = { + [LOG2U(IFF_UP)] = "up", /* interface is up. */ + [LOG2U(IFF_BROADCAST)] = "broadcast", /* broadcast address valid.*/ + [LOG2U(IFF_DEBUG)] = "debug", /* turn on debugging. */ + [LOG2U(IFF_LOOPBACK)] = "loopback", /* interface is a loopback net. */ + [LOG2U(IFF_POINTOPOINT)] = "point-to-point", /* interface has p-p link. */ + [LOG2U(IFF_NOTRAILERS)] = "no-trailers", /* avoid use of trailers. */ + [LOG2U(IFF_RUNNING)] = "running", /* interface RFC2863 OPER_UP. */ + [LOG2U(IFF_NOARP)] = "no-arp", /* no ARP protocol. */ + [LOG2U(IFF_PROMISC)] = "promiscuous", /* receive all packets. */ + [LOG2U(IFF_ALLMULTI)] = "all-multicast", /* receive all multicast packets. */ + [LOG2U(IFF_MASTER)] = "master", /* master of a load balancer. */ + [LOG2U(IFF_SLAVE)] = "slave", /* slave of a load balancer. */ + [LOG2U(IFF_MULTICAST)] = "multicast", /* supports multicast.*/ + [LOG2U(IFF_PORTSEL)] = "portsel", /* can set media type. */ + [LOG2U(IFF_AUTOMEDIA)] = "auto-media", /* auto media select active. */ + [LOG2U(IFF_DYNAMIC)] = "dynamic", /* dialup device with changing addresses. */ + [LOG2U(IFF_LOWER_UP)] = "lower-up", /* driver signals L1 up. */ + [LOG2U(IFF_DORMANT)] = "dormant", /* driver signals dormant. */ + [LOG2U(IFF_ECHO)] = "echo", /* echo sent 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; + if (FLAGS_SET(flags, 1 << i) && map[i]) + if (!strextend_with_separator(&str, ",", map[i])) + return -ENOMEM; *ret = TAKE_PTR(str); return 0; |