summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Gundersen <teg@jklm.no>2014-03-20 19:57:19 +0100
committerTom Gundersen <teg@jklm.no>2014-03-20 20:18:15 +0100
commiteb34d4af3fd2ddfaa4bdb591a1549d203e2d8ac8 (patch)
tree5c25c58f4e30122da20112e3de651a581d6fdb90
parentc49b33aca6fd6a66e2bc43dad4a12701b7df8472 (diff)
networkd: link - create dhcp and ipv4ll eagerly
Make sure the client objects exist for the lifetime of the Link.
-rw-r--r--src/network/networkd-link.c92
1 files changed, 44 insertions, 48 deletions
diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c
index e60ba9d61b..a7ba46692c 100644
--- a/src/network/networkd-link.c
+++ b/src/network/networkd-link.c
@@ -883,27 +883,7 @@ static int link_acquire_conf(Link *link) {
assert(link->manager->event);
if (link->network->ipv4ll) {
- if (!link->ipv4ll) {
- r = sd_ipv4ll_new(&link->ipv4ll);
- if (r < 0)
- return r;
-
- r = sd_ipv4ll_attach_event(link->ipv4ll, NULL, 0);
- if (r < 0)
- return r;
-
- r = sd_ipv4ll_set_index(link->ipv4ll, link->ifindex);
- if (r < 0)
- return r;
-
- r = sd_ipv4ll_set_mac(link->ipv4ll, &link->mac);
- if (r < 0)
- return r;
-
- r = sd_ipv4ll_set_callback(link->ipv4ll, ipv4ll_handler, link);
- if (r < 0)
- return r;
- }
+ assert(link->ipv4ll);
log_debug_link(link, "acquiring IPv4 link-local address");
@@ -913,33 +893,7 @@ static int link_acquire_conf(Link *link) {
}
if (link->network->dhcp) {
- if (!link->dhcp_client) {
- r = sd_dhcp_client_new(&link->dhcp_client);
- if (r < 0)
- return r;
-
- r = sd_dhcp_client_attach_event(link->dhcp_client, NULL, 0);
- if (r < 0)
- return r;
-
- r = sd_dhcp_client_set_index(link->dhcp_client, link->ifindex);
- if (r < 0)
- return r;
-
- r = sd_dhcp_client_set_mac(link->dhcp_client, &link->mac);
- if (r < 0)
- return r;
-
- r = sd_dhcp_client_set_callback(link->dhcp_client, dhcp_handler, link);
- if (r < 0)
- return r;
-
- if (link->network->dhcp_mtu) {
- r = sd_dhcp_client_set_request_option(link->dhcp_client, 26);
- if (r < 0)
- return r;
- }
- }
+ assert(link->dhcp_client);
log_debug_link(link, "acquiring DHCPv4 lease");
@@ -1303,6 +1257,48 @@ int link_add(Manager *m, struct udev_device *device, Link **ret) {
if (r < 0)
return r;
+ if (link->network->ipv4ll) {
+ r = sd_ipv4ll_new(&link->ipv4ll);
+ if (r < 0)
+ return r;
+
+ r = sd_ipv4ll_attach_event(link->ipv4ll, NULL, 0);
+ if (r < 0)
+ return r;
+
+ r = sd_ipv4ll_set_index(link->ipv4ll, link->ifindex);
+ if (r < 0)
+ return r;
+
+ r = sd_ipv4ll_set_callback(link->ipv4ll, ipv4ll_handler, link);
+ if (r < 0)
+ return r;
+ }
+
+ if (link->network->dhcp) {
+ r = sd_dhcp_client_new(&link->dhcp_client);
+ if (r < 0)
+ return r;
+
+ r = sd_dhcp_client_attach_event(link->dhcp_client, NULL, 0);
+ if (r < 0)
+ return r;
+
+ r = sd_dhcp_client_set_index(link->dhcp_client, link->ifindex);
+ if (r < 0)
+ return r;
+
+ r = sd_dhcp_client_set_callback(link->dhcp_client, dhcp_handler, link);
+ if (r < 0)
+ return r;
+
+ if (link->network->dhcp_mtu) {
+ r = sd_dhcp_client_set_request_option(link->dhcp_client, 26);
+ if (r < 0)
+ return r;
+ }
+ }
+
r = link_configure(link);
if (r < 0)
return r;