Skip to content

Commit d308bb9

Browse files
committed
Resolve alternative ifnames wherever we would resolve an interface name
To keep the names manageable, "ifname_or_ifindex" is replaced by "interface".
1 parent fc2ea97 commit d308bb9

File tree

9 files changed

+47
-58
lines changed

9 files changed

+47
-58
lines changed

src/basic/parse-util.c

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -93,23 +93,6 @@ int parse_ifindex(const char *s) {
9393
return ifi;
9494
}
9595

96-
int parse_ifindex_or_ifname(const char *s) {
97-
int r;
98-
99-
assert(s);
100-
101-
r = parse_ifindex(s);
102-
if (r > 0)
103-
return r;
104-
assert(r < 0);
105-
106-
r = (int) if_nametoindex(s);
107-
if (r <= 0)
108-
return -errno;
109-
110-
return r;
111-
}
112-
11396
int parse_mtu(int family, const char *s, uint32_t *ret) {
11497
uint64_t u;
11598
size_t m;

src/basic/parse-util.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ int parse_dev(const char *s, dev_t *ret);
1414
int parse_pid(const char *s, pid_t* ret_pid);
1515
int parse_mode(const char *s, mode_t *ret);
1616
int parse_ifindex(const char *s);
17-
int parse_ifindex_or_ifname(const char *s);
1817
int parse_mtu(int family, const char *s, uint32_t *ret);
1918

2019
int parse_size(const char *t, uint64_t base, uint64_t *size);

src/libsystemd/sd-netlink/netlink-util.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,8 @@ int rtnl_resolve_link_alternative_name(sd_netlink **rtnl, const char *name) {
191191
return r;
192192

193193
r = sd_netlink_call(*rtnl, message, 0, &reply);
194+
if (r == -EINVAL)
195+
return -ENODEV; /* The device doesn't exist */
194196
if (r < 0)
195197
return r;
196198

src/network/networkctl.c

Lines changed: 4 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
#include "parse-util.h"
3939
#include "pretty-print.h"
4040
#include "set.h"
41+
#include "socket-netlink.h"
4142
#include "socket-util.h"
4243
#include "sort-util.h"
4344
#include "sparse-endian.h"
@@ -64,21 +65,6 @@ static bool arg_stats = false;
6465
static bool arg_full = false;
6566
static unsigned arg_lines = 10;
6667

67-
static int resolve_ifname(sd_netlink **rtnl, const char *name) {
68-
int r;
69-
70-
r = parse_ifindex_or_ifname(name);
71-
if (r > 0)
72-
return r;
73-
assert(r < 0);
74-
75-
r = rtnl_resolve_link_alternative_name(rtnl, name);
76-
if (r > 0)
77-
return r;
78-
assert(r < 0);
79-
return log_error_errno(r, "Failed to resolve interface \"%s\": %m", name);
80-
}
81-
8268
static char *link_get_type_string(unsigned short iftype, sd_device *d) {
8369
const char *t, *devtype;
8470
char *p;
@@ -1895,7 +1881,7 @@ static int link_delete(int argc, char *argv[], void *userdata) {
18951881
return log_oom();
18961882

18971883
for (i = 1; i < argc; i++) {
1898-
index = resolve_ifname(&rtnl, argv[i]);
1884+
index = resolve_interface_or_warn(&rtnl, argv[i]);
18991885
if (index < 0)
19001886
return index;
19011887

@@ -1948,7 +1934,7 @@ static int link_renew(int argc, char *argv[], void *userdata) {
19481934
return log_error_errno(r, "Failed to connect system bus: %m");
19491935

19501936
for (i = 1; i < argc; i++) {
1951-
index = resolve_ifname(&rtnl, argv[i]);
1937+
index = resolve_interface_or_warn(&rtnl, argv[i]);
19521938
if (index < 0)
19531939
return index;
19541940

@@ -2000,7 +1986,7 @@ static int verb_reconfigure(int argc, char *argv[], void *userdata) {
20001986
return log_oom();
20011987

20021988
for (i = 1; i < argc; i++) {
2003-
index = resolve_ifname(&rtnl, argv[i]);
1989+
index = resolve_interface_or_warn(&rtnl, argv[i]);
20041990
if (index < 0)
20051991
return index;
20061992

src/network/networkd-route.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
#include "networkd-route.h"
1313
#include "parse-util.h"
1414
#include "set.h"
15+
#include "socket-netlink.h"
1516
#include "string-table.h"
1617
#include "string-util.h"
1718
#include "strxcpyx.h"
@@ -1646,7 +1647,7 @@ int config_parse_multipath_route(
16461647
m->gateway.family = family;
16471648

16481649
if (dev) {
1649-
r = parse_ifindex_or_ifname(dev);
1650+
r = resolve_interface(NULL, dev);
16501651
if (r < 0) {
16511652
log_syntax(unit, LOG_ERR, filename, line, r,
16521653
"Invalid interface name or index, ignoring assignment: %s", dev);

src/nspawn/nspawn-network.c

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include "nspawn-network.h"
1919
#include "parse-util.h"
2020
#include "siphash24.h"
21+
#include "socket-netlink.h"
2122
#include "socket-util.h"
2223
#include "stat-util.h"
2324
#include "string-util.h"
@@ -280,7 +281,8 @@ int setup_veth(const char *machine_name,
280281
if (r < 0)
281282
return r;
282283

283-
u = if_nametoindex(n);
284+
u = if_nametoindex(n); /* We don't need to use resolve_ifname() here because the
285+
* name we assigned is always the main name. */
284286
if (u == 0)
285287
return log_error_errno(errno, "Failed to resolve interface %s: %m", n);
286288

@@ -337,7 +339,7 @@ static int join_bridge(sd_netlink *rtnl, const char *veth_name, const char *brid
337339
assert(veth_name);
338340
assert(bridge_name);
339341

340-
bridge_ifi = parse_ifindex_or_ifname(bridge_name);
342+
bridge_ifi = resolve_interface(&rtnl, bridge_name);
341343
if (bridge_ifi < 0)
342344
return bridge_ifi;
343345

@@ -472,16 +474,6 @@ int remove_bridge(const char *bridge_name) {
472474
return remove_one_link(rtnl, bridge_name);
473475
}
474476

475-
static int parse_interface(const char *name) {
476-
int ifi;
477-
478-
ifi = parse_ifindex_or_ifname(name);
479-
if (ifi < 0)
480-
return log_error_errno(ifi, "Failed to resolve interface %s: %m", name);
481-
482-
return ifi;
483-
}
484-
485477
int test_network_interface_initialized(const char *name) {
486478
_cleanup_(sd_device_unrefp) sd_device *d = NULL;
487479
int ifi, r;
@@ -492,7 +484,7 @@ int test_network_interface_initialized(const char *name) {
492484

493485
/* udev should be around. */
494486

495-
ifi = parse_interface(name);
487+
ifi = resolve_interface_or_warn(NULL, name);
496488
if (ifi < 0)
497489
return ifi;
498490

@@ -532,7 +524,7 @@ int move_network_interfaces(int netns_fd, char **ifaces) {
532524
_cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
533525
int ifi;
534526

535-
ifi = parse_interface(*i);
527+
ifi = resolve_interface_or_warn(&rtnl, *i);
536528
if (ifi < 0)
537529
return ifi;
538530

@@ -571,7 +563,7 @@ int setup_macvlan(const char *machine_name, pid_t pid, char **ifaces) {
571563
struct ether_addr mac;
572564
int ifi;
573565

574-
ifi = parse_interface(*i);
566+
ifi = resolve_interface_or_warn(&rtnl, *i);
575567
if (ifi < 0)
576568
return ifi;
577569

@@ -657,7 +649,7 @@ int setup_ipvlan(const char *machine_name, pid_t pid, char **ifaces) {
657649
_cleanup_free_ char *n = NULL, *a = NULL;
658650
int ifi;
659651

660-
ifi = parse_interface(*i);
652+
ifi = resolve_interface_or_warn(&rtnl, *i);
661653
if (ifi < 0)
662654
return ifi;
663655

src/resolve/resolvectl.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -94,14 +94,14 @@ int ifname_mangle(const char *s) {
9494
if (!iface)
9595
return log_oom();
9696

97-
ifi = parse_ifindex_or_ifname(iface);
97+
ifi = resolve_interface(NULL, iface);
9898
if (ifi < 0) {
9999
if (ifi == -ENODEV && arg_ifindex_permissive) {
100100
log_debug("Interface '%s' not found, but -f specified, ignoring.", iface);
101101
return 0; /* done */
102102
}
103103

104-
return log_error_errno(ifi, "Unknown interface '%s': %m", iface);
104+
return log_error_errno(ifi, "Failed to resolve interface \"%s\": %m", iface);
105105
}
106106

107107
if (arg_ifindex > 0 && arg_ifindex != ifi)
@@ -1828,9 +1828,9 @@ static int verb_status(int argc, char **argv, void *userdata) {
18281828
STRV_FOREACH(ifname, argv + 1) {
18291829
int ifindex, q;
18301830

1831-
ifindex = parse_ifindex_or_ifname(*ifname);
1831+
ifindex = resolve_interface(NULL, *ifname);
18321832
if (ifindex < 0) {
1833-
log_warning_errno(ifindex, "Unknown interface '%s', ignoring: %m", *ifname);
1833+
log_warning_errno(ifindex, "Failed to resolve interface \"%s\", ignoring: %m", *ifname);
18341834
continue;
18351835
}
18361836

src/shared/socket-netlink.c

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,30 @@ int resolve_ifname(sd_netlink **rtnl, const char *name) {
3030
return rtnl_resolve_link_alternative_name(rtnl, name);
3131
}
3232

33+
int resolve_interface(sd_netlink **rtnl, const char *name) {
34+
int r;
35+
36+
/* Like resolve_ifname, but resolves interface numbers too. */
37+
38+
assert(name);
39+
40+
r = parse_ifindex(name);
41+
if (r > 0)
42+
return r;
43+
assert(r < 0);
44+
45+
return resolve_ifname(rtnl, name);
46+
}
47+
48+
int resolve_interface_or_warn(sd_netlink **rtnl, const char *name) {
49+
int r;
50+
51+
r = resolve_interface(rtnl, name);
52+
if (r < 0)
53+
return log_error_errno(r, "Failed to resolve interface \"%s\": %m", name);
54+
return r;
55+
}
56+
3357
int socket_address_parse(SocketAddress *a, const char *s) {
3458
_cleanup_free_ char *n = NULL;
3559
char *e;
@@ -318,7 +342,7 @@ int in_addr_ifindex_from_string_auto(const char *s, int *family, union in_addr_u
318342
if (suffix) {
319343
if (ret_ifindex) {
320344
/* If we shall return the interface index, try to parse it */
321-
ifindex = parse_ifindex_or_ifname(suffix + 1);
345+
ifindex = resolve_interface(NULL, suffix + 1);
322346
if (ifindex < 0)
323347
return ifindex;
324348
}

src/shared/socket-netlink.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
#include "socket-util.h"
99

1010
int resolve_ifname(sd_netlink **rtnl, const char *name);
11+
int resolve_interface(sd_netlink **rtnl, const char *name);
12+
int resolve_interface_or_warn(sd_netlink **rtnl, const char *name);
1113

1214
int make_socket_fd(int log_level, const char* address, int type, int flags);
1315

0 commit comments

Comments
 (0)