chiark / gitweb /
networkd veth: Make kind assert
[elogind.git] / src / network / networkd-veth.c
index 1a5d880ac256a85374d37d190f09144ee659424e..50a5b676b1898f8223f8bc1e9bd6b837919f92da 100644 (file)
@@ -42,6 +42,16 @@ static int netdev_fill_veth_rtnl_message(NetDev *netdev, sd_rtnl_message *m) {
                 return r;
         }
 
+        if (netdev->mac) {
+                r = sd_rtnl_message_append_ether_addr(m, IFLA_ADDRESS, netdev->mac);
+                if (r < 0) {
+                        log_error_netdev(netdev,
+                                         "Colud not append IFLA_ADDRESS attribute: %s",
+                                         strerror(-r));
+                    return r;
+                }
+        }
+
         r = sd_rtnl_message_open_container(m, IFLA_LINKINFO);
         if (r < 0) {
                 log_error_netdev(netdev,
@@ -67,7 +77,7 @@ static int netdev_fill_veth_rtnl_message(NetDev *netdev, sd_rtnl_message *m) {
                 return r;
         }
 
-        if(netdev->ifname_peer) {
+        if (netdev->ifname_peer) {
                 r = sd_rtnl_message_append_string(m, IFLA_IFNAME, netdev->ifname_peer);
                 if (r < 0) {
                         log_error("Failed to add netlink interface name: %s", strerror(-r));
@@ -75,6 +85,16 @@ static int netdev_fill_veth_rtnl_message(NetDev *netdev, sd_rtnl_message *m) {
                 }
         }
 
+        if (netdev->mac_peer) {
+                r = sd_rtnl_message_append_ether_addr(m, IFLA_ADDRESS, netdev->mac_peer);
+                if (r < 0) {
+                        log_error_netdev(netdev,
+                                         "Colud not append IFLA_ADDRESS attribute: %s",
+                                         strerror(-r));
+                    return r;
+                }
+        }
+
         r = sd_rtnl_message_close_container(m);
         if (r < 0) {
                 log_error_netdev(netdev,
@@ -102,6 +122,7 @@ int netdev_create_veth(NetDev *netdev, sd_rtnl_message_handler_t callback) {
         assert(netdev->ifname);
         assert(netdev->manager);
         assert(netdev->manager->rtnl);
+        assert(netdev->kind == NETDEV_KIND_VETH);
 
         r = sd_rtnl_message_new_link(netdev->manager->rtnl, &m, RTM_NEWLINK, 0);
         if (r < 0) {
@@ -111,9 +132,6 @@ int netdev_create_veth(NetDev *netdev, sd_rtnl_message_handler_t callback) {
                 return r;
         }
 
-        if(netdev->kind != NETDEV_KIND_VETH)
-                return -ENOTSUP;
-
         r = netdev_fill_veth_rtnl_message(netdev, m);
         if(r < 0)
                 return r;
@@ -125,6 +143,8 @@ int netdev_create_veth(NetDev *netdev, sd_rtnl_message_handler_t callback) {
                 return r;
         }
 
+        netdev_ref(netdev);
+
         log_debug_netdev(netdev, "Creating veth netdev: %s",
                          netdev_kind_to_string(netdev->kind));