mirror of
https://github.com/systemd/systemd
synced 2024-10-07 00:30:59 +00:00
netlink: move resolve_ifname() or friends to netlink-util.[ch]
This commit is contained in:
parent
f0ad7aedd9
commit
f6e491547d
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue