#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) {
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;
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);
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;
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;
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;
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;
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;
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);
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;
/* udev should be around. */
- ifi = resolve_interface_or_warn(NULL, name);
+ ifi = rtnl_resolve_interface_or_warn(NULL, name);
if (ifi < 0)
return ifi;
_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;
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;
_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;
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);
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;
#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;
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;
/* 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);