From afdf6c3b6040ef43b05428b834f0f302c8ce9a1b Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Thu, 10 Jun 2021 18:17:47 +0900 Subject: [PATCH] netlink: make rtnl_resolve_link_alternative_name() optionally return the main interface name --- src/libsystemd/sd-netlink/netlink-util.c | 21 +++++++++++++++------ src/libsystemd/sd-netlink/netlink-util.h | 2 +- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/libsystemd/sd-netlink/netlink-util.c b/src/libsystemd/sd-netlink/netlink-util.c index 4012725f4cd..1211145fbf8 100644 --- a/src/libsystemd/sd-netlink/netlink-util.c +++ b/src/libsystemd/sd-netlink/netlink-util.c @@ -267,13 +267,15 @@ int rtnl_set_link_alternative_names_by_ifname(sd_netlink **rtnl, const char *ifn return 0; } -int rtnl_resolve_link_alternative_name(sd_netlink **rtnl, const char *name) { +int rtnl_resolve_link_alternative_name(sd_netlink **rtnl, const char *name, char **ret) { _cleanup_(sd_netlink_unrefp) sd_netlink *our_rtnl = NULL; _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *message = NULL, *reply = NULL; - int r, ret; + int r, ifindex; assert(name); + /* This returns ifindex and the main interface name. */ + if (!ifname_valid_full(name, IFNAME_VALID_ALTERNATIVE)) return -EINVAL; @@ -299,11 +301,18 @@ int rtnl_resolve_link_alternative_name(sd_netlink **rtnl, const char *name) { if (r < 0) return r; - r = sd_rtnl_message_link_get_ifindex(reply, &ret); + r = sd_rtnl_message_link_get_ifindex(reply, &ifindex); if (r < 0) return r; - assert(ret > 0); - return ret; + assert(ifindex > 0); + + if (ret) { + r = sd_netlink_message_read_string_strdup(message, IFLA_IFNAME, ret); + if (r < 0) + return r; + } + + return ifindex; } int rtnl_resolve_ifname(sd_netlink **rtnl, const char *name) { @@ -317,7 +326,7 @@ int rtnl_resolve_ifname(sd_netlink **rtnl, const char *name) { if (r > 0) return r; - return rtnl_resolve_link_alternative_name(rtnl, name); + return rtnl_resolve_link_alternative_name(rtnl, name, NULL); } int rtnl_resolve_interface(sd_netlink **rtnl, const char *name) { diff --git a/src/libsystemd/sd-netlink/netlink-util.h b/src/libsystemd/sd-netlink/netlink-util.h index a4cdaaf8bd4..a5d725655dd 100644 --- a/src/libsystemd/sd-netlink/netlink-util.h +++ b/src/libsystemd/sd-netlink/netlink-util.h @@ -91,7 +91,7 @@ int rtnl_get_link_alternative_names(sd_netlink **rtnl, int ifindex, char ***ret) int rtnl_set_link_alternative_names(sd_netlink **rtnl, int ifindex, char * const *alternative_names); 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_link_alternative_name(sd_netlink **rtnl, const char *name, char **ret); 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); -- 2.47.3