diff --git a/src/network/networkctl.c b/src/network/networkctl.c index 61fa0ed5566..fefcbfe8295 100644 --- a/src/network/networkctl.c +++ b/src/network/networkctl.c @@ -93,11 +93,10 @@ JsonFormatFlags arg_json_format_flags = JSON_FORMAT_OFF; STATIC_DESTRUCTOR_REGISTER(arg_drop_in, freep); -static int check_netns_match(void) { - struct stat st; - uint64_t id; - JsonVariant *reply = NULL; +static int varlink_connect_networkd(Varlink **ret_varlink) { _cleanup_(varlink_unrefp) Varlink *vl = NULL; + JsonVariant *reply; + uint64_t id; int r; r = varlink_connect_address(&vl, "/run/systemd/netif/io.systemd.Network"); @@ -117,18 +116,21 @@ static int check_netns_match(void) { if (r < 0) return r; - if (id == 0) { + if (id == 0) log_debug("systemd-networkd.service not running in a network namespace (?), skipping netns check."); - return 0; + else { + struct stat st; + + if (stat("/proc/self/ns/net", &st) < 0) + return log_error_errno(errno, "Failed to determine our own network namespace ID: %m"); + + if (id != st.st_ino) + return log_error_errno(SYNTHETIC_ERRNO(EREMOTE), + "networkctl must be invoked in same network namespace as systemd-networkd.service."); } - if (stat("/proc/self/ns/net", &st) < 0) - return log_error_errno(errno, "Failed to determine our own network namespace ID: %m"); - - if (id != st.st_ino) - return log_error_errno(SYNTHETIC_ERRNO(EREMOTE), - "networkctl must be invoked in same network namespace as systemd-networkd.service."); - + if (ret_varlink) + *ret_varlink = TAKE_PTR(vl); return 0; } @@ -162,7 +164,7 @@ int acquire_bus(sd_bus **ret) { return log_error_errno(r, "Failed to connect to system bus: %m"); if (networkd_is_running()) { - r = check_netns_match(); + r = varlink_connect_networkd(/* ret_varlink = */ NULL); if (r < 0) return r; } else