]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
util-lib: add function to resolve "alternative" names
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Fri, 10 Jan 2020 20:18:31 +0000 (21:18 +0100)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Sun, 12 Jan 2020 09:54:31 +0000 (10:54 +0100)
Calls to if_nametoindex() are expected to use resolve_ifname() instead.

src/network/networkd-manager-bus.c
src/shared/socket-netlink.c
src/shared/socket-netlink.h

index 4db72b3302485765660df7f11e6207aa23f952d9..660c2847eb385824fb5cc1e7ca47877de807d480 100644 (file)
@@ -7,12 +7,12 @@
 #include "alloc-util.h"
 #include "bus-common-errors.h"
 #include "bus-util.h"
-#include "netlink-util.h"
 #include "networkd-link-bus.h"
 #include "networkd-link.h"
 #include "networkd-manager-bus.h"
 #include "networkd-manager.h"
 #include "path-util.h"
+#include "socket-netlink.h"
 #include "strv.h"
 #include "user-util.h"
 
@@ -66,12 +66,9 @@ static int method_get_link_by_name(sd_bus_message *message, void *userdata, sd_b
         if (r < 0)
                 return r;
 
-        index = if_nametoindex(name);
-        if (index <= 0) {
-                index = rtnl_resolve_link_alternative_name(&manager->rtnl, name);
-                if (index < 0)
-                        return sd_bus_error_setf(error, BUS_ERROR_NO_SUCH_LINK, "Link %s not known", name);
-        }
+        index = resolve_ifname(&manager->rtnl, name);
+        if (index < 0)
+                return sd_bus_error_setf(error, BUS_ERROR_NO_SUCH_LINK, "Link %s cannot be resolved", name);
 
         link = hashmap_get(manager->links, INT_TO_PTR(index));
         if (!link)
index 9f992d3e2f24266d8080be27552db8807acb928a..3fb73563170171e43a81192c1b8eee36eaccf38d 100644 (file)
 #include "extract-word.h"
 #include "log.h"
 #include "memory-util.h"
+#include "netlink-util.h"
 #include "parse-util.h"
 #include "socket-netlink.h"
 #include "socket-util.h"
 #include "string-util.h"
 
+int resolve_ifname(sd_netlink **rtnl, const char *name) {
+        int r;
+
+        /* Like if_nametoindex, but resolves "alternative names" too. */
+
+        assert(name);
+
+        r = if_nametoindex(name);
+        if (r > 0)
+                return r;
+
+        return rtnl_resolve_link_alternative_name(rtnl, name);
+}
+
 int socket_address_parse(SocketAddress *a, const char *s) {
         _cleanup_free_ char *n = NULL;
         char *e;
@@ -140,15 +155,12 @@ int socket_address_parse(SocketAddress *a, const char *s) {
                                 a->sockaddr.in.sin_port = htobe16(port);
                                 a->size = sizeof(struct sockaddr_in);
                         } else {
-                                unsigned idx;
-
-                                if (strlen(n) > IF_NAMESIZE-1)
-                                        return -EINVAL;
+                                int idx;
 
                                 /* Uh, our last resort, an interface name */
-                                idx = if_nametoindex(n);
-                                if (idx == 0)
-                                        return -EINVAL;
+                                idx = resolve_ifname(NULL, n);
+                                if (idx < 0)
+                                        return idx;
 
                                 a->sockaddr.in6.sin6_family = AF_INET6;
                                 a->sockaddr.in6.sin6_port = htobe16(port);
index 8808c589b77ad3b564e4c91406dcfaf3bc4e25f9..d389857242994a32a9f5931283746fd154c1262f 100644 (file)
@@ -1,10 +1,14 @@
 /* SPDX-License-Identifier: LGPL-2.1+ */
 #pragma once
 
+#include "sd-netlink.h"
+
 #include "in-addr-util.h"
 #include "macro.h"
 #include "socket-util.h"
 
+int resolve_ifname(sd_netlink **rtnl, const char *name);
+
 int make_socket_fd(int log_level, const char* address, int type, int flags);
 
 int socket_address_parse(SocketAddress *a, const char *s);