From: Yu Watanabe Date: Wed, 9 Jun 2021 21:01:44 +0000 (+0900) Subject: netlink: move resolve_ifname() or friends to netlink-util.[ch] X-Git-Tag: v249-rc1~28^2~8 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f6e491547d92e86aa728a3851cc2007db57ea10e;p=thirdparty%2Fsystemd.git netlink: move resolve_ifname() or friends to netlink-util.[ch] --- diff --git a/src/libsystemd/sd-netlink/netlink-util.c b/src/libsystemd/sd-netlink/netlink-util.c index 868763bb9c0..0650f0b4752 100644 --- a/src/libsystemd/sd-netlink/netlink-util.c +++ b/src/libsystemd/sd-netlink/netlink-util.c @@ -6,6 +6,7 @@ #include "memory-util.h" #include "netlink-internal.h" #include "netlink-util.h" +#include "parse-util.h" #include "strv.h" int rtnl_set_link_name(sd_netlink **rtnl, int ifindex, const char *name) { @@ -302,6 +303,44 @@ int rtnl_resolve_link_alternative_name(sd_netlink **rtnl, const char *name) { return ret; } +int rtnl_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 rtnl_resolve_interface(sd_netlink **rtnl, const char *name) { + int r; + + /* Like rtnl_resolve_ifname, but resolves interface numbers too. */ + + assert(name); + + r = parse_ifindex(name); + if (r > 0) + return r; + assert(r < 0); + + return rtnl_resolve_ifname(rtnl, name); +} + +int rtnl_resolve_interface_or_warn(sd_netlink **rtnl, const char *name) { + int r; + + r = rtnl_resolve_interface(rtnl, name); + if (r < 0) + return log_error_errno(r, "Failed to resolve interface \"%s\": %m", name); + return r; +} + int rtnl_get_link_info(sd_netlink **rtnl, int ifindex, unsigned short *ret_iftype, unsigned *ret_flags) { _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *message = NULL, *reply = NULL; unsigned short iftype; diff --git a/src/libsystemd/sd-netlink/netlink-util.h b/src/libsystemd/sd-netlink/netlink-util.h index c676c07135e..a4cdaaf8bd4 100644 --- a/src/libsystemd/sd-netlink/netlink-util.h +++ b/src/libsystemd/sd-netlink/netlink-util.h @@ -92,6 +92,9 @@ int rtnl_set_link_alternative_names(sd_netlink **rtnl, int ifindex, char * const int rtnl_set_link_alternative_names_by_ifname(sd_netlink **rtnl, const char *ifname, char * const *alternative_names); int rtnl_delete_link_alternative_names(sd_netlink **rtnl, int ifindex, char * const *alternative_names); int rtnl_resolve_link_alternative_name(sd_netlink **rtnl, const char *name); +int rtnl_resolve_ifname(sd_netlink **rtnl, const char *name); +int rtnl_resolve_interface(sd_netlink **rtnl, const char *name); +int rtnl_resolve_interface_or_warn(sd_netlink **rtnl, const char *name); int rtnl_get_link_info(sd_netlink **rtnl, int ifindex, unsigned short *ret_iftype, unsigned *ret_flags); int rtnl_log_parse_error(int r); diff --git a/src/network/networkctl.c b/src/network/networkctl.c index a3ba15672b4..343dea3ed64 100644 --- a/src/network/networkctl.c +++ b/src/network/networkctl.c @@ -2665,7 +2665,7 @@ static int link_up_down(int argc, char *argv[], void *userdata) { return log_oom(); for (int i = 1; i < argc; i++) { - index = resolve_interface_or_warn(&rtnl, argv[i]); + index = rtnl_resolve_interface_or_warn(&rtnl, argv[i]); if (index < 0) return index; @@ -2703,7 +2703,7 @@ static int link_delete(int argc, char *argv[], void *userdata) { return log_oom(); for (int i = 1; i < argc; i++) { - index = resolve_interface_or_warn(&rtnl, argv[i]); + index = rtnl_resolve_interface_or_warn(&rtnl, argv[i]); if (index < 0) return index; @@ -2748,7 +2748,7 @@ static int link_renew(int argc, char *argv[], void *userdata) { return log_error_errno(r, "Failed to connect system bus: %m"); for (int i = 1; i < argc; i++) { - index = resolve_interface_or_warn(&rtnl, argv[i]); + index = rtnl_resolve_interface_or_warn(&rtnl, argv[i]); if (index < 0) return index; @@ -2782,7 +2782,7 @@ static int link_force_renew(int argc, char *argv[], void *userdata) { return log_error_errno(r, "Failed to connect system bus: %m"); for (int i = 1; i < argc; i++) { - int index = resolve_interface_or_warn(&rtnl, argv[i]); + int index = rtnl_resolve_interface_or_warn(&rtnl, argv[i]); if (index < 0) return index; @@ -2827,7 +2827,7 @@ static int verb_reconfigure(int argc, char *argv[], void *userdata) { return log_oom(); for (int i = 1; i < argc; i++) { - index = resolve_interface_or_warn(&rtnl, argv[i]); + index = rtnl_resolve_interface_or_warn(&rtnl, argv[i]); if (index < 0) return index; diff --git a/src/nspawn/nspawn-network.c b/src/nspawn/nspawn-network.c index 95e4b0213b5..1f0d2747578 100644 --- a/src/nspawn/nspawn-network.c +++ b/src/nspawn/nspawn-network.c @@ -272,7 +272,7 @@ int setup_veth(const char *machine_name, if (r < 0) return r; - u = if_nametoindex(n); /* We don't need to use resolve_ifname() here because the + u = if_nametoindex(n); /* We don't need to use rtnl_resolve_ifname() here because the * name we assigned is always the main name. */ if (u == 0) return log_error_errno(errno, "Failed to resolve interface %s: %m", n); @@ -330,7 +330,7 @@ static int join_bridge(sd_netlink *rtnl, const char *veth_name, const char *brid assert(veth_name); assert(bridge_name); - bridge_ifi = resolve_interface(&rtnl, bridge_name); + bridge_ifi = rtnl_resolve_interface(&rtnl, bridge_name); if (bridge_ifi < 0) return bridge_ifi; @@ -475,7 +475,7 @@ int test_network_interface_initialized(const char *name) { /* udev should be around. */ - ifi = resolve_interface_or_warn(NULL, name); + ifi = rtnl_resolve_interface_or_warn(NULL, name); if (ifi < 0) return ifi; @@ -515,7 +515,7 @@ int move_network_interfaces(int netns_fd, char **ifaces) { _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL; int ifi; - ifi = resolve_interface_or_warn(&rtnl, *i); + ifi = rtnl_resolve_interface_or_warn(&rtnl, *i); if (ifi < 0) return ifi; @@ -554,7 +554,7 @@ int setup_macvlan(const char *machine_name, pid_t pid, char **ifaces) { struct ether_addr mac; int ifi; - ifi = resolve_interface_or_warn(&rtnl, *i); + ifi = rtnl_resolve_interface_or_warn(&rtnl, *i); if (ifi < 0) return ifi; @@ -640,7 +640,7 @@ int setup_ipvlan(const char *machine_name, pid_t pid, char **ifaces) { _cleanup_free_ char *n = NULL, *a = NULL; int ifi; - ifi = resolve_interface_or_warn(&rtnl, *i); + ifi = rtnl_resolve_interface_or_warn(&rtnl, *i); if (ifi < 0) return ifi; diff --git a/src/resolve/resolvectl.c b/src/resolve/resolvectl.c index e652c82ffcb..23f4ff1077b 100644 --- a/src/resolve/resolvectl.c +++ b/src/resolve/resolvectl.c @@ -119,7 +119,7 @@ int ifname_mangle(const char *s) { if (!iface) return log_oom(); - ifi = resolve_interface(NULL, iface); + ifi = rtnl_resolve_interface(NULL, iface); if (ifi < 0) { if (ifi == -ENODEV && arg_ifindex_permissive) { log_debug("Interface '%s' not found, but -f specified, ignoring.", iface); @@ -2018,7 +2018,7 @@ static int verb_status(int argc, char **argv, void *userdata) { STRV_FOREACH(ifname, argv + 1) { int ifindex, q; - ifindex = resolve_interface(&rtnl, *ifname); + ifindex = rtnl_resolve_interface(&rtnl, *ifname); if (ifindex < 0) { log_warning_errno(ifindex, "Failed to resolve interface \"%s\", ignoring: %m", *ifname); continue; diff --git a/src/shared/socket-netlink.c b/src/shared/socket-netlink.c index 4a7007d06e5..0c044378265 100644 --- a/src/shared/socket-netlink.c +++ b/src/shared/socket-netlink.c @@ -16,44 +16,6 @@ #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 resolve_interface(sd_netlink **rtnl, const char *name) { - int r; - - /* Like resolve_ifname, but resolves interface numbers too. */ - - assert(name); - - r = parse_ifindex(name); - if (r > 0) - return r; - assert(r < 0); - - return resolve_ifname(rtnl, name); -} - -int resolve_interface_or_warn(sd_netlink **rtnl, const char *name) { - int r; - - r = resolve_interface(rtnl, name); - if (r < 0) - return log_error_errno(r, "Failed to resolve interface \"%s\": %m", name); - return r; -} - int socket_address_parse(SocketAddress *a, const char *s) { _cleanup_free_ char *n = NULL; char *e; @@ -338,7 +300,7 @@ int in_addr_port_ifindex_name_from_string_auto( return -EINVAL; /* We want to return -EINVAL for syntactically invalid names, * and -ENODEV for valid but nonexistent interfaces. */ - ifindex = resolve_interface(NULL, m + 1); + ifindex = rtnl_resolve_interface(NULL, m + 1); if (ifindex < 0) return ifindex; diff --git a/src/shared/socket-netlink.h b/src/shared/socket-netlink.h index eac599159db..6256a831bac 100644 --- a/src/shared/socket-netlink.h +++ b/src/shared/socket-netlink.h @@ -1,16 +1,10 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #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 resolve_interface(sd_netlink **rtnl, const char *name); -int resolve_interface_or_warn(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);