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");
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 (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 (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;
}
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