Zbigniew Jędrzejewski-Szmek 62fe94
From aedca89268ed4fd6be41e55a605f011033ad1fb5 Mon Sep 17 00:00:00 2001
Zbigniew Jędrzejewski-Szmek 62fe94
From: Tom Gundersen <teg@jklm.no>
Zbigniew Jędrzejewski-Szmek 62fe94
Date: Tue, 9 Sep 2014 15:36:56 +0200
Zbigniew Jędrzejewski-Szmek 62fe94
Subject: [PATCH] udev: net_setup_link - open ethtool and rtnl connections
Zbigniew Jędrzejewski-Szmek 62fe94
 lazily
Zbigniew Jędrzejewski-Szmek 62fe94
Zbigniew Jędrzejewski-Szmek 62fe94
---
Zbigniew Jędrzejewski-Szmek 62fe94
 src/libsystemd/sd-rtnl/rtnl-util.c | 26 +++++++++++--------------
Zbigniew Jędrzejewski-Szmek 62fe94
 src/libsystemd/sd-rtnl/rtnl-util.h |  2 +-
Zbigniew Jędrzejewski-Szmek 62fe94
 src/udev/net/ethtool-util.c        | 40 ++++++++++++++++++++++++++++++--------
Zbigniew Jędrzejewski-Szmek 62fe94
 src/udev/net/ethtool-util.h        |  6 +++---
Zbigniew Jędrzejewski-Szmek 62fe94
 src/udev/net/link-config.c         | 40 ++++----------------------------------
Zbigniew Jędrzejewski-Szmek 62fe94
 5 files changed, 51 insertions(+), 63 deletions(-)
Zbigniew Jędrzejewski-Szmek 62fe94
Zbigniew Jędrzejewski-Szmek 62fe94
diff --git a/src/libsystemd/sd-rtnl/rtnl-util.c b/src/libsystemd/sd-rtnl/rtnl-util.c
Zbigniew Jędrzejewski-Szmek 62fe94
index fe0f34e125..1ec1fa8d27 100644
Zbigniew Jędrzejewski-Szmek 62fe94
--- a/src/libsystemd/sd-rtnl/rtnl-util.c
Zbigniew Jędrzejewski-Szmek 62fe94
+++ b/src/libsystemd/sd-rtnl/rtnl-util.c
Zbigniew Jędrzejewski-Szmek 62fe94
@@ -55,10 +55,9 @@ int rtnl_set_link_name(sd_rtnl **rtnl, int ifindex, const char *name) {
Zbigniew Jędrzejewski-Szmek 62fe94
         return 0;
Zbigniew Jędrzejewski-Szmek 62fe94
 }
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
-int rtnl_set_link_properties(sd_rtnl *rtnl, int ifindex, const char *alias,
Zbigniew Jędrzejewski-Szmek 62fe94
+int rtnl_set_link_properties(sd_rtnl **rtnl, int ifindex, const char *alias,
Zbigniew Jędrzejewski-Szmek 62fe94
                              const struct ether_addr *mac, unsigned mtu) {
Zbigniew Jędrzejewski-Szmek 62fe94
         _cleanup_rtnl_message_unref_ sd_rtnl_message *message = NULL;
Zbigniew Jędrzejewski-Szmek 62fe94
-        bool need_update = false;
Zbigniew Jędrzejewski-Szmek 62fe94
         int r;
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
         assert(rtnl);
Zbigniew Jędrzejewski-Szmek 62fe94
@@ -67,7 +66,13 @@ int rtnl_set_link_properties(sd_rtnl *rtnl, int ifindex, const char *alias,
Zbigniew Jędrzejewski-Szmek 62fe94
         if (!alias && !mac && mtu == 0)
Zbigniew Jędrzejewski-Szmek 62fe94
                 return 0;
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
-        r = sd_rtnl_message_new_link(rtnl, &message, RTM_SETLINK, ifindex);
Zbigniew Jędrzejewski-Szmek 62fe94
+        if (!*rtnl) {
Zbigniew Jędrzejewski-Szmek 62fe94
+                r = sd_rtnl_open(rtnl, 0);
Zbigniew Jędrzejewski-Szmek 62fe94
+                if (r < 0)
Zbigniew Jędrzejewski-Szmek 62fe94
+                        return r;
Zbigniew Jędrzejewski-Szmek 62fe94
+        }
Zbigniew Jędrzejewski-Szmek 62fe94
+
Zbigniew Jędrzejewski-Szmek 62fe94
+        r = sd_rtnl_message_new_link(*rtnl, &message, RTM_SETLINK, ifindex);
Zbigniew Jędrzejewski-Szmek 62fe94
         if (r < 0)
Zbigniew Jędrzejewski-Szmek 62fe94
                 return r;
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
@@ -75,32 +80,23 @@ int rtnl_set_link_properties(sd_rtnl *rtnl, int ifindex, const char *alias,
Zbigniew Jędrzejewski-Szmek 62fe94
                 r = sd_rtnl_message_append_string(message, IFLA_IFALIAS, alias);
Zbigniew Jędrzejewski-Szmek 62fe94
                 if (r < 0)
Zbigniew Jędrzejewski-Szmek 62fe94
                         return r;
Zbigniew Jędrzejewski-Szmek 62fe94
-
Zbigniew Jędrzejewski-Szmek 62fe94
-                need_update = true;
Zbigniew Jędrzejewski-Szmek 62fe94
-
Zbigniew Jędrzejewski-Szmek 62fe94
         }
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
         if (mac) {
Zbigniew Jędrzejewski-Szmek 62fe94
                 r = sd_rtnl_message_append_ether_addr(message, IFLA_ADDRESS, mac);
Zbigniew Jędrzejewski-Szmek 62fe94
                 if (r < 0)
Zbigniew Jędrzejewski-Szmek 62fe94
                         return r;
Zbigniew Jędrzejewski-Szmek 62fe94
-
Zbigniew Jędrzejewski-Szmek 62fe94
-                need_update = true;
Zbigniew Jędrzejewski-Szmek 62fe94
         }
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
         if (mtu > 0) {
Zbigniew Jędrzejewski-Szmek 62fe94
                 r = sd_rtnl_message_append_u32(message, IFLA_MTU, mtu);
Zbigniew Jędrzejewski-Szmek 62fe94
                 if (r < 0)
Zbigniew Jędrzejewski-Szmek 62fe94
                         return r;
Zbigniew Jędrzejewski-Szmek 62fe94
-
Zbigniew Jędrzejewski-Szmek 62fe94
-                need_update = true;
Zbigniew Jędrzejewski-Szmek 62fe94
         }
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
-        if  (need_update) {
Zbigniew Jędrzejewski-Szmek 62fe94
-                r = sd_rtnl_call(rtnl, message, 0, NULL);
Zbigniew Jędrzejewski-Szmek 62fe94
-                if (r < 0)
Zbigniew Jędrzejewski-Szmek 62fe94
-                        return r;
Zbigniew Jędrzejewski-Szmek 62fe94
-        }
Zbigniew Jędrzejewski-Szmek 62fe94
+        r = sd_rtnl_call(*rtnl, message, 0, NULL);
Zbigniew Jędrzejewski-Szmek 62fe94
+        if (r < 0)
Zbigniew Jędrzejewski-Szmek 62fe94
+                return r;
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
         return 0;
Zbigniew Jędrzejewski-Szmek 62fe94
 }
Zbigniew Jędrzejewski-Szmek 62fe94
diff --git a/src/libsystemd/sd-rtnl/rtnl-util.h b/src/libsystemd/sd-rtnl/rtnl-util.h
Zbigniew Jędrzejewski-Szmek 62fe94
index 94af3b1720..fa3592df9d 100644
Zbigniew Jędrzejewski-Szmek 62fe94
--- a/src/libsystemd/sd-rtnl/rtnl-util.h
Zbigniew Jędrzejewski-Szmek 62fe94
+++ b/src/libsystemd/sd-rtnl/rtnl-util.h
Zbigniew Jędrzejewski-Szmek 62fe94
@@ -35,7 +35,7 @@ bool rtnl_message_type_is_addr(uint16_t type);
Zbigniew Jędrzejewski-Szmek 62fe94
 bool rtnl_message_type_is_route(uint16_t type);
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
 int rtnl_set_link_name(sd_rtnl **rtnl, int ifindex, const char *name);
Zbigniew Jędrzejewski-Szmek 62fe94
-int rtnl_set_link_properties(sd_rtnl *rtnl, int ifindex, const char *alias, const struct ether_addr *mac, unsigned mtu);
Zbigniew Jędrzejewski-Szmek 62fe94
+int rtnl_set_link_properties(sd_rtnl **rtnl, int ifindex, const char *alias, const struct ether_addr *mac, unsigned mtu);
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
 int rtnl_log_parse_error(int r);
Zbigniew Jędrzejewski-Szmek 62fe94
 int rtnl_log_create_error(int r);
Zbigniew Jędrzejewski-Szmek 62fe94
diff --git a/src/udev/net/ethtool-util.c b/src/udev/net/ethtool-util.c
Zbigniew Jędrzejewski-Szmek 62fe94
index 3ec245ecab..54cb928091 100644
Zbigniew Jędrzejewski-Szmek 62fe94
--- a/src/udev/net/ethtool-util.c
Zbigniew Jędrzejewski-Szmek 62fe94
+++ b/src/udev/net/ethtool-util.c
Zbigniew Jędrzejewski-Szmek 62fe94
@@ -63,7 +63,7 @@ int ethtool_connect(int *ret) {
Zbigniew Jędrzejewski-Szmek 62fe94
         return 0;
Zbigniew Jędrzejewski-Szmek 62fe94
 }
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
-int ethtool_get_driver(int fd, const char *ifname, char **ret) {
Zbigniew Jędrzejewski-Szmek 62fe94
+int ethtool_get_driver(int *fd, const char *ifname, char **ret) {
Zbigniew Jędrzejewski-Szmek 62fe94
         struct ethtool_drvinfo ecmd = {
Zbigniew Jędrzejewski-Szmek 62fe94
                 .cmd = ETHTOOL_GDRVINFO
Zbigniew Jędrzejewski-Szmek 62fe94
         };
Zbigniew Jędrzejewski-Szmek 62fe94
@@ -73,9 +73,17 @@ int ethtool_get_driver(int fd, const char *ifname, char **ret) {
Zbigniew Jędrzejewski-Szmek 62fe94
         char *d;
Zbigniew Jędrzejewski-Szmek 62fe94
         int r;
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
+        if (*fd < 0) {
Zbigniew Jędrzejewski-Szmek 62fe94
+                r = ethtool_connect(fd);
Zbigniew Jędrzejewski-Szmek 62fe94
+                if (r < 0) {
Zbigniew Jędrzejewski-Szmek 62fe94
+                        log_warning("link_config: could not connect to ethtool: %s", strerror(-r));
Zbigniew Jędrzejewski-Szmek 62fe94
+                        return r;
Zbigniew Jędrzejewski-Szmek 62fe94
+                }
Zbigniew Jędrzejewski-Szmek 62fe94
+        }
Zbigniew Jędrzejewski-Szmek 62fe94
+
Zbigniew Jędrzejewski-Szmek 62fe94
         strscpy(ifr.ifr_name, IFNAMSIZ, ifname);
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
-        r = ioctl(fd, SIOCETHTOOL, &ifr);
Zbigniew Jędrzejewski-Szmek 62fe94
+        r = ioctl(*fd, SIOCETHTOOL, &ifr);
Zbigniew Jędrzejewski-Szmek 62fe94
         if (r < 0)
Zbigniew Jędrzejewski-Szmek 62fe94
                 return -errno;
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
@@ -87,7 +95,7 @@ int ethtool_get_driver(int fd, const char *ifname, char **ret) {
Zbigniew Jędrzejewski-Szmek 62fe94
         return 0;
Zbigniew Jędrzejewski-Szmek 62fe94
 }
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
-int ethtool_set_speed(int fd, const char *ifname, unsigned int speed, Duplex duplex)
Zbigniew Jędrzejewski-Szmek 62fe94
+int ethtool_set_speed(int *fd, const char *ifname, unsigned int speed, Duplex duplex)
Zbigniew Jędrzejewski-Szmek 62fe94
 {
Zbigniew Jędrzejewski-Szmek 62fe94
         struct ethtool_cmd ecmd = {
Zbigniew Jędrzejewski-Szmek 62fe94
                 .cmd = ETHTOOL_GSET
Zbigniew Jędrzejewski-Szmek 62fe94
@@ -101,9 +109,17 @@ int ethtool_set_speed(int fd, const char *ifname, unsigned int speed, Duplex dup
Zbigniew Jędrzejewski-Szmek 62fe94
         if (speed == 0 && duplex == _DUP_INVALID)
Zbigniew Jędrzejewski-Szmek 62fe94
                 return 0;
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
+        if (*fd < 0) {
Zbigniew Jędrzejewski-Szmek 62fe94
+                r = ethtool_connect(fd);
Zbigniew Jędrzejewski-Szmek 62fe94
+                if (r < 0) {
Zbigniew Jędrzejewski-Szmek 62fe94
+                        log_warning("link_config: could not connect to ethtool: %s", strerror(-r));
Zbigniew Jędrzejewski-Szmek 62fe94
+                        return r;
Zbigniew Jędrzejewski-Szmek 62fe94
+                }
Zbigniew Jędrzejewski-Szmek 62fe94
+        }
Zbigniew Jędrzejewski-Szmek 62fe94
+
Zbigniew Jędrzejewski-Szmek 62fe94
         strscpy(ifr.ifr_name, IFNAMSIZ, ifname);
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
-        r = ioctl(fd, SIOCETHTOOL, &ifr);
Zbigniew Jędrzejewski-Szmek 62fe94
+        r = ioctl(*fd, SIOCETHTOOL, &ifr);
Zbigniew Jędrzejewski-Szmek 62fe94
         if (r < 0)
Zbigniew Jędrzejewski-Szmek 62fe94
                 return -errno;
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
@@ -132,7 +148,7 @@ int ethtool_set_speed(int fd, const char *ifname, unsigned int speed, Duplex dup
Zbigniew Jędrzejewski-Szmek 62fe94
         if (need_update) {
Zbigniew Jędrzejewski-Szmek 62fe94
                 ecmd.cmd = ETHTOOL_SSET;
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
-                r = ioctl(fd, SIOCETHTOOL, &ifr);
Zbigniew Jędrzejewski-Szmek 62fe94
+                r = ioctl(*fd, SIOCETHTOOL, &ifr);
Zbigniew Jędrzejewski-Szmek 62fe94
                 if (r < 0)
Zbigniew Jędrzejewski-Szmek 62fe94
                         return -errno;
Zbigniew Jędrzejewski-Szmek 62fe94
         }
Zbigniew Jędrzejewski-Szmek 62fe94
@@ -140,7 +156,7 @@ int ethtool_set_speed(int fd, const char *ifname, unsigned int speed, Duplex dup
Zbigniew Jędrzejewski-Szmek 62fe94
         return 0;
Zbigniew Jędrzejewski-Szmek 62fe94
 }
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
-int ethtool_set_wol(int fd, const char *ifname, WakeOnLan wol) {
Zbigniew Jędrzejewski-Szmek 62fe94
+int ethtool_set_wol(int *fd, const char *ifname, WakeOnLan wol) {
Zbigniew Jędrzejewski-Szmek 62fe94
         struct ethtool_wolinfo ecmd = {
Zbigniew Jędrzejewski-Szmek 62fe94
                 .cmd = ETHTOOL_GWOL
Zbigniew Jędrzejewski-Szmek 62fe94
         };
Zbigniew Jędrzejewski-Szmek 62fe94
@@ -153,9 +169,17 @@ int ethtool_set_wol(int fd, const char *ifname, WakeOnLan wol) {
Zbigniew Jędrzejewski-Szmek 62fe94
         if (wol == _WOL_INVALID)
Zbigniew Jędrzejewski-Szmek 62fe94
                 return 0;
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
+        if (*fd < 0) {
Zbigniew Jędrzejewski-Szmek 62fe94
+                r = ethtool_connect(fd);
Zbigniew Jędrzejewski-Szmek 62fe94
+                if (r < 0) {
Zbigniew Jędrzejewski-Szmek 62fe94
+                        log_warning("link_config: could not connect to ethtool: %s", strerror(-r));
Zbigniew Jędrzejewski-Szmek 62fe94
+                        return r;
Zbigniew Jędrzejewski-Szmek 62fe94
+                }
Zbigniew Jędrzejewski-Szmek 62fe94
+        }
Zbigniew Jędrzejewski-Szmek 62fe94
+
Zbigniew Jędrzejewski-Szmek 62fe94
         strscpy(ifr.ifr_name, IFNAMSIZ, ifname);
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
-        r = ioctl(fd, SIOCETHTOOL, &ifr);
Zbigniew Jędrzejewski-Szmek 62fe94
+        r = ioctl(*fd, SIOCETHTOOL, &ifr);
Zbigniew Jędrzejewski-Szmek 62fe94
         if (r < 0)
Zbigniew Jędrzejewski-Szmek 62fe94
                 return -errno;
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
@@ -185,7 +209,7 @@ int ethtool_set_wol(int fd, const char *ifname, WakeOnLan wol) {
Zbigniew Jędrzejewski-Szmek 62fe94
         if (need_update) {
Zbigniew Jędrzejewski-Szmek 62fe94
                 ecmd.cmd = ETHTOOL_SWOL;
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
-                r = ioctl(fd, SIOCETHTOOL, &ifr);
Zbigniew Jędrzejewski-Szmek 62fe94
+                r = ioctl(*fd, SIOCETHTOOL, &ifr);
Zbigniew Jędrzejewski-Szmek 62fe94
                 if (r < 0)
Zbigniew Jędrzejewski-Szmek 62fe94
                         return -errno;
Zbigniew Jędrzejewski-Szmek 62fe94
         }
Zbigniew Jędrzejewski-Szmek 62fe94
diff --git a/src/udev/net/ethtool-util.h b/src/udev/net/ethtool-util.h
Zbigniew Jędrzejewski-Szmek 62fe94
index f44de5076a..690b1a65aa 100644
Zbigniew Jędrzejewski-Szmek 62fe94
--- a/src/udev/net/ethtool-util.h
Zbigniew Jędrzejewski-Szmek 62fe94
+++ b/src/udev/net/ethtool-util.h
Zbigniew Jędrzejewski-Szmek 62fe94
@@ -42,9 +42,9 @@ typedef enum WakeOnLan {
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
 int ethtool_connect(int *ret);
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
-int ethtool_get_driver(int fd, const char *ifname, char **ret);
Zbigniew Jędrzejewski-Szmek 62fe94
-int ethtool_set_speed(int fd, const char *ifname, unsigned int speed, Duplex duplex);
Zbigniew Jędrzejewski-Szmek 62fe94
-int ethtool_set_wol(int fd, const char *ifname, WakeOnLan wol);
Zbigniew Jędrzejewski-Szmek 62fe94
+int ethtool_get_driver(int *fd, const char *ifname, char **ret);
Zbigniew Jędrzejewski-Szmek 62fe94
+int ethtool_set_speed(int *fd, const char *ifname, unsigned int speed, Duplex duplex);
Zbigniew Jędrzejewski-Szmek 62fe94
+int ethtool_set_wol(int *fd, const char *ifname, WakeOnLan wol);
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
 const char *duplex_to_string(Duplex d) _const_;
Zbigniew Jędrzejewski-Szmek 62fe94
 Duplex duplex_from_string(const char *d) _pure_;
Zbigniew Jędrzejewski-Szmek 62fe94
diff --git a/src/udev/net/link-config.c b/src/udev/net/link-config.c
Zbigniew Jędrzejewski-Szmek 62fe94
index 64ff00dc0d..ee2865a863 100644
Zbigniew Jędrzejewski-Szmek 62fe94
--- a/src/udev/net/link-config.c
Zbigniew Jędrzejewski-Szmek 62fe94
+++ b/src/udev/net/link-config.c
Zbigniew Jędrzejewski-Szmek 62fe94
@@ -88,30 +88,6 @@ int link_config_ctx_new(link_config_ctx **ret) {
Zbigniew Jędrzejewski-Szmek 62fe94
         return 0;
Zbigniew Jędrzejewski-Szmek 62fe94
 }
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
-static int link_config_ctx_connect(link_config_ctx *ctx) {
Zbigniew Jędrzejewski-Szmek 62fe94
-        int r;
Zbigniew Jędrzejewski-Szmek 62fe94
-
Zbigniew Jędrzejewski-Szmek 62fe94
-        if (ctx->ethtool_fd == -1) {
Zbigniew Jędrzejewski-Szmek 62fe94
-                r = ethtool_connect(&ctx->ethtool_fd);
Zbigniew Jędrzejewski-Szmek 62fe94
-                if (r < 0) {
Zbigniew Jędrzejewski-Szmek 62fe94
-                        log_warning("link_config: could not connect to ethtool: %s",
Zbigniew Jędrzejewski-Szmek 62fe94
-                                    strerror(-r));
Zbigniew Jędrzejewski-Szmek 62fe94
-                        return r;
Zbigniew Jędrzejewski-Szmek 62fe94
-                }
Zbigniew Jędrzejewski-Szmek 62fe94
-        }
Zbigniew Jędrzejewski-Szmek 62fe94
-
Zbigniew Jędrzejewski-Szmek 62fe94
-        if (!ctx->rtnl) {
Zbigniew Jędrzejewski-Szmek 62fe94
-                r = sd_rtnl_open(&ctx->rtnl, 0);
Zbigniew Jędrzejewski-Szmek 62fe94
-                if (r < 0) {
Zbigniew Jędrzejewski-Szmek 62fe94
-                        log_warning("link_config: could not connect to rtnl: %s",
Zbigniew Jędrzejewski-Szmek 62fe94
-                                    strerror(-r));
Zbigniew Jędrzejewski-Szmek 62fe94
-                        return r;
Zbigniew Jędrzejewski-Szmek 62fe94
-                }
Zbigniew Jędrzejewski-Szmek 62fe94
-        }
Zbigniew Jędrzejewski-Szmek 62fe94
-
Zbigniew Jędrzejewski-Szmek 62fe94
-        return 0;
Zbigniew Jędrzejewski-Szmek 62fe94
-}
Zbigniew Jędrzejewski-Szmek 62fe94
-
Zbigniew Jędrzejewski-Szmek 62fe94
 static void link_configs_free(link_config_ctx *ctx) {
Zbigniew Jędrzejewski-Szmek 62fe94
         link_config *link, *link_next;
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
@@ -361,22 +337,18 @@ int link_config_apply(link_config_ctx *ctx, link_config *config,
Zbigniew Jędrzejewski-Szmek 62fe94
         assert(device);
Zbigniew Jędrzejewski-Szmek 62fe94
         assert(name);
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
-        r = link_config_ctx_connect(ctx);
Zbigniew Jędrzejewski-Szmek 62fe94
-        if (r < 0)
Zbigniew Jędrzejewski-Szmek 62fe94
-                return r;
Zbigniew Jędrzejewski-Szmek 62fe94
-
Zbigniew Jędrzejewski-Szmek 62fe94
         old_name = udev_device_get_sysname(device);
Zbigniew Jędrzejewski-Szmek 62fe94
         if (!old_name)
Zbigniew Jędrzejewski-Szmek 62fe94
                 return -EINVAL;
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
-        r = ethtool_set_speed(ctx->ethtool_fd, old_name, config->speed / 1024,
Zbigniew Jędrzejewski-Szmek 62fe94
+        r = ethtool_set_speed(&ctx->ethtool_fd, old_name, config->speed / 1024,
Zbigniew Jędrzejewski-Szmek 62fe94
                               config->duplex);
Zbigniew Jędrzejewski-Szmek 62fe94
         if (r < 0)
Zbigniew Jędrzejewski-Szmek 62fe94
                 log_warning("Could not set speed or duplex of %s to %u Mbps (%s): %s",
Zbigniew Jędrzejewski-Szmek 62fe94
                             old_name, config->speed / 1024,
Zbigniew Jędrzejewski-Szmek 62fe94
                             duplex_to_string(config->duplex), strerror(-r));
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
-        r = ethtool_set_wol(ctx->ethtool_fd, old_name, config->wol);
Zbigniew Jędrzejewski-Szmek 62fe94
+        r = ethtool_set_wol(&ctx->ethtool_fd, old_name, config->wol);
Zbigniew Jędrzejewski-Szmek 62fe94
         if (r < 0)
Zbigniew Jędrzejewski-Szmek 62fe94
                 log_warning("Could not set WakeOnLan of %s to %s: %s",
Zbigniew Jędrzejewski-Szmek 62fe94
                             old_name, wol_to_string(config->wol), strerror(-r));
Zbigniew Jędrzejewski-Szmek 62fe94
@@ -449,7 +421,7 @@ int link_config_apply(link_config_ctx *ctx, link_config *config,
Zbigniew Jędrzejewski-Szmek 62fe94
                         mac = config->mac;
Zbigniew Jędrzejewski-Szmek 62fe94
         }
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
-        r = rtnl_set_link_properties(ctx->rtnl, ifindex, config->alias, mac,
Zbigniew Jędrzejewski-Szmek 62fe94
+        r = rtnl_set_link_properties(&ctx->rtnl, ifindex, config->alias, mac,
Zbigniew Jędrzejewski-Szmek 62fe94
                                      config->mtu);
Zbigniew Jędrzejewski-Szmek 62fe94
         if (r < 0) {
Zbigniew Jędrzejewski-Szmek 62fe94
                 log_warning("Could not set Alias, MACAddress or MTU on %s: %s",
Zbigniew Jędrzejewski-Szmek 62fe94
@@ -467,15 +439,11 @@ int link_get_driver(link_config_ctx *ctx, struct udev_device *device, char **ret
Zbigniew Jędrzejewski-Szmek 62fe94
         char *driver;
Zbigniew Jędrzejewski-Szmek 62fe94
         int r;
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
-        r = link_config_ctx_connect(ctx);
Zbigniew Jędrzejewski-Szmek 62fe94
-        if (r < 0)
Zbigniew Jędrzejewski-Szmek 62fe94
-                return r;
Zbigniew Jędrzejewski-Szmek 62fe94
-
Zbigniew Jędrzejewski-Szmek 62fe94
         name = udev_device_get_sysname(device);
Zbigniew Jędrzejewski-Szmek 62fe94
         if (!name)
Zbigniew Jędrzejewski-Szmek 62fe94
                 return -EINVAL;
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
-        r = ethtool_get_driver(ctx->ethtool_fd, name, &driver);
Zbigniew Jędrzejewski-Szmek 62fe94
+        r = ethtool_get_driver(&ctx->ethtool_fd, name, &driver);
Zbigniew Jędrzejewski-Szmek 62fe94
         if (r < 0)
Zbigniew Jędrzejewski-Szmek 62fe94
                 return r;
Zbigniew Jędrzejewski-Szmek 62fe94