[systemd-commits] 2 commits - src/network TODO

Tom Gundersen tomegun at kemper.freedesktop.org
Tue Jul 1 03:55:25 PDT 2014


 TODO                           |    4 +---
 src/network/networkd-link.c    |    2 +-
 src/network/networkd-manager.c |    3 ++-
 src/network/networkd-netdev.c  |    4 +++-
 src/network/networkd-tunnel.c  |   14 +++++---------
 src/network/networkd.h         |    2 +-
 6 files changed, 13 insertions(+), 16 deletions(-)

New commits:
commit d5b3d845f013f7f332c76e83bb8e867de7d3caee
Author: Tom Gundersen <teg at jklm.no>
Date:   Tue Jul 1 12:51:08 2014 +0200

    networkd: tunnel - ensure that enslave callback is always invoked
    
    The Link statemachine relies on this, as it would otherwise wait forever. Hook up the tunnels in the
    same way as the other NetDev's.

diff --git a/src/network/networkd-netdev.c b/src/network/networkd-netdev.c
index 13338ae..a53f046 100644
--- a/src/network/networkd-netdev.c
+++ b/src/network/networkd-netdev.c
@@ -222,6 +222,7 @@ static int netdev_enter_ready(NetDev *netdev) {
         return 0;
 }
 
+/* callback for netdev's created without a backing Link */
 static int netdev_create_handler(sd_rtnl *rtnl, sd_rtnl_message *m, void *userdata) {
         NetDev *netdev = userdata;
         int r;
@@ -402,6 +403,7 @@ static int netdev_create(NetDev *netdev, Link *link, sd_rtnl_message_handler_t c
         return 0;
 }
 
+/* the callback must be called, possibly after a timeout, as otherwise the Link will hang */
 int netdev_enslave(NetDev *netdev, Link *link, sd_rtnl_message_handler_t callback) {
         int r;
 
@@ -415,7 +417,7 @@ int netdev_enslave(NetDev *netdev, Link *link, sd_rtnl_message_handler_t callbac
         case NETDEV_KIND_GRE:
         case NETDEV_KIND_SIT:
         case NETDEV_KIND_VTI:
-                return netdev_create_tunnel(link, netdev_create_handler);
+                return netdev_create_tunnel(netdev, link, callback);
         default:
                 break;
         }
diff --git a/src/network/networkd-tunnel.c b/src/network/networkd-tunnel.c
index 88146fe..cffa564 100644
--- a/src/network/networkd-tunnel.c
+++ b/src/network/networkd-tunnel.c
@@ -468,21 +468,17 @@ static int netdev_fill_vti_rtnl_message(Link *link, sd_rtnl_message *m) {
         return r;
 }
 
-int netdev_create_tunnel(Link *link, sd_rtnl_message_handler_t callback) {
+int netdev_create_tunnel(NetDev *netdev, Link *link, sd_rtnl_message_handler_t callback) {
         _cleanup_rtnl_message_unref_ sd_rtnl_message *m = NULL;
-        NetDev *netdev;
         int r;
 
-        assert(link);
-        assert(link->network);
-        assert(link->network->tunnel);
-
-        netdev = link->network->tunnel;
-
         assert(netdev);
         assert(netdev->ifname);
         assert(netdev->manager);
         assert(netdev->manager->rtnl);
+        assert(link);
+        assert(link->network);
+        assert(link->network->tunnel == netdev);
 
         r = sd_rtnl_message_new_link(netdev->manager->rtnl, &m, RTM_NEWLINK, 0);
         if (r < 0) {
@@ -517,7 +513,7 @@ int netdev_create_tunnel(Link *link, sd_rtnl_message_handler_t callback) {
                 return -ENOTSUP;
         }
 
-        r = sd_rtnl_call_async(netdev->manager->rtnl, m, callback, netdev, 0, NULL);
+        r = sd_rtnl_call_async(netdev->manager->rtnl, m, callback, link, 0, NULL);
         if (r < 0) {
                 log_error_netdev(netdev,
                                  "Could not send rtnetlink message: %s", strerror(-r));
diff --git a/src/network/networkd.h b/src/network/networkd.h
index 11268de..d1b0bb7 100644
--- a/src/network/networkd.h
+++ b/src/network/networkd.h
@@ -349,7 +349,7 @@ DEFINE_TRIVIAL_CLEANUP_FUNC(NetDev*, netdev_unref);
 int netdev_get(Manager *manager, const char *name, NetDev **ret);
 int netdev_set_ifindex(NetDev *netdev, sd_rtnl_message *newlink);
 int netdev_enslave(NetDev *netdev, Link *link, sd_rtnl_message_handler_t cb);
-int netdev_create_tunnel(Link *link, sd_rtnl_message_handler_t callback);
+int netdev_create_tunnel(NetDev *netdev, Link *link, sd_rtnl_message_handler_t callback);
 int netdev_create_veth(NetDev *netdev, sd_rtnl_message_handler_t callback);
 int netdev_create_vxlan(NetDev *netdev, Link *link, sd_rtnl_message_handler_t callback);
 

commit 1a941ac4b690cb3f4333e35f4a5036fe6fd50ff9
Author: Tom Gundersen <teg at jklm.no>
Date:   Tue Jul 1 11:27:24 2014 +0200

    networkd: link - ignore missing MAC address
    
    Currently DHCP/IPv4LL only works on ethernet devices, but no reason not to otherwise
    manage them.

diff --git a/TODO b/TODO
index 66bf6f0..375d129 100644
--- a/TODO
+++ b/TODO
@@ -615,13 +615,11 @@ Features:
    - add reduced [Link] support to .network files
    - add Scope= parsing option for [Network]
    - properly handle routerless dhcp leases
-   - set lifetime on the address acquired from dhcp
-   - patch kernel to support module alias for tunnel device (ipip/sit/gre),
-     then remove remove libkmod dependency and CAP_SYS_MODULE
    - add veth netdev support (c.f. http://shorewall.net/bridge-Shorewall-perl.html#veth)
    - add tun/tap netdev support
    - add more attribute support for SIT tunnel
    - make metric of routes configurable
+   - work with non-ethernet devices
 
 * networkd-wait-online:
    - make operstates to wait for configurable?
diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c
index 8674eee..ce9fbb5 100644
--- a/src/network/networkd-link.c
+++ b/src/network/networkd-link.c
@@ -78,7 +78,7 @@ static int link_new(Manager *manager, sd_rtnl_message *message, Link **ret) {
 
         r = sd_rtnl_message_read_ether_addr(message, IFLA_ADDRESS, &link->mac);
         if (r < 0)
-                return r;
+                log_debug_link(link, "MAC address not found for new device, continuing without");
 
         r = asprintf(&link->state_file, "/run/systemd/netif/links/%"PRIu64,
                      link->ifindex);
diff --git a/src/network/networkd-manager.c b/src/network/networkd-manager.c
index c93d598..c1d5012 100644
--- a/src/network/networkd-manager.c
+++ b/src/network/networkd-manager.c
@@ -292,7 +292,8 @@ static int manager_rtnl_process_link(sd_rtnl *rtnl, sd_rtnl_message *message, vo
                         /* link is new, so add it */
                         r = link_add(m, message, &link);
                         if (r < 0) {
-                                log_debug("could not add new link");
+                                log_debug("could not add new link: %s",
+                                           strerror(-r));
                                 return 0;
                         }
                 }



More information about the systemd-commits mailing list