chiark / gitweb /
networkd: split out vlan and macvlan handling
[elogind.git] / src / network / networkd-address.c
index ce015004de7e6209ca25f1cbcf2606d12dce26a9..76febc7a07853f9fa173c781858b9d72a65ddbfb 100644 (file)
@@ -231,7 +231,7 @@ int address_update(Address *address, Link *link,
 static int address_acquire(Link *link, Address *original, Address **ret) {
         union in_addr_union in_addr = {};
         struct in_addr broadcast = {};
-        Address *na = NULL;
+        _cleanup_address_free_ Address *na = NULL;
         int r;
 
         assert(link);
@@ -274,11 +274,8 @@ static int address_acquire(Link *link, Address *original, Address **ret) {
 
         if (original->label) {
                 na->label = strdup(original->label);
-
-                if (!na->label) {
-                        free(na);
+                if (!na->label)
                         return -ENOMEM;
-                }
         }
 
         na->broadcast = broadcast;
@@ -287,6 +284,8 @@ static int address_acquire(Link *link, Address *original, Address **ret) {
         LIST_PREPEND(addresses, link->pool_addresses, na);
 
         *ret = na;
+        na = NULL;
+
         return 0;
 }
 
@@ -360,6 +359,14 @@ int address_configure(Address *address, Link *link,
                 }
         }
 
+        r = sd_rtnl_message_append_cache_info(req, IFA_CACHEINFO,
+                                              &address->cinfo);
+        if (r < 0) {
+                log_error("Could not append IFA_CACHEINFO attribute: %s",
+                          strerror(-r));
+                return r;
+        }
+
         r = sd_rtnl_call_async(link->manager->rtnl, req, callback, link, 0, NULL);
         if (r < 0) {
                 log_error("Could not send rtnetlink message: %s", strerror(-r));