diff options
author | Dan Williams <dcbw@redhat.com> | 2014-11-06 10:10:43 -0600 |
---|---|---|
committer | Dan Williams <dcbw@redhat.com> | 2014-11-06 10:10:43 -0600 |
commit | c3353691502c9bfafca58679badd64af28cd7192 (patch) | |
tree | b750f3e057734643b0fad51c00de8673199900c7 | |
parent | 6a35562024aec3ab85e3ecb9b6dbaeba76e9aab3 (diff) | |
download | NetworkManager-dcbw/dhcp-systemd.tar.gz |
fixup! dhcp: add systemd-based "internal" DHCP clientdcbw/dhcp-systemd
-rw-r--r-- | src/dhcp-manager/nm-dhcp-manager.c | 2 | ||||
-rw-r--r-- | src/dhcp-manager/nm-dhcp-systemd.c | 58 |
2 files changed, 35 insertions, 25 deletions
diff --git a/src/dhcp-manager/nm-dhcp-manager.c b/src/dhcp-manager/nm-dhcp-manager.c index 8d4b1228ba..b98260d431 100644 --- a/src/dhcp-manager/nm-dhcp-manager.c +++ b/src/dhcp-manager/nm-dhcp-manager.c @@ -541,6 +541,8 @@ nm_dhcp_manager_init (NMDhcpManager *self) if (priv->client_type == NM_TYPE_DHCP_DHCLIENT) priv->get_lease_ip_configs_func = nm_dhcp_dhclient_get_lease_ip_configs; + else if (priv->client_type == NM_TYPE_DHCP_SYSTEMD) + priv->get_lease_ip_configs_func = nm_dhcp_systemd_get_lease_ip_configs; else if (priv->client_type == G_TYPE_INVALID) { nm_log_warn (LOGD_DHCP, "No usable DHCP client found (%s)! DHCP configurations will fail.", error->message); diff --git a/src/dhcp-manager/nm-dhcp-systemd.c b/src/dhcp-manager/nm-dhcp-systemd.c index 8a1fb7fe11..2af3088272 100644 --- a/src/dhcp-manager/nm-dhcp-systemd.c +++ b/src/dhcp-manager/nm-dhcp-systemd.c @@ -85,7 +85,7 @@ typedef struct { typedef struct { guint num; - const char *desc; + const char *name; gboolean include; } ReqOption; @@ -152,16 +152,16 @@ take_option (GHashTable *options, g_return_if_fail (value != NULL); - for (i = 0; requests[i].desc; i++) { + for (i = 0; requests[i].name; i++) { if (requests[i].num == option) { g_hash_table_insert (options, - (gpointer) (requests[i].desc + STRLEN (REQPREFIX)), + (gpointer) (requests[i].name + STRLEN (REQPREFIX)), value); break; } } /* Option should always be found */ - g_assert (requests[i].desc); + g_assert (requests[i].name); } static void @@ -183,18 +183,18 @@ add_requests_to_options (GHashTable *options, const ReqOption *requests) { guint i; - for (i = 0; options && requests[i].desc; i++) { + for (i = 0; options && requests[i].name; i++) { if (requests[i].include) - g_hash_table_insert (options, (gpointer) requests[i].desc, g_strdup ("1")); + g_hash_table_insert (options, (gpointer) requests[i].name, g_strdup ("1")); } } #define LOG_LEASE(domain, ...) \ - G_STMT_START { \ - if (log_lease) { \ - nm_log (LOGL_INFO, (domain), __VA_ARGS__); \ - } \ - } G_STMT_END +G_STMT_START { \ + if (log_lease) { \ + nm_log (LOGL_INFO, (domain), __VA_ARGS__); \ + } \ +} G_STMT_END static NMIP4Config * lease_to_ip4_config (sd_dhcp_lease *lease, @@ -213,7 +213,8 @@ lease_to_ip4_config (sd_dhcp_lease *lease, GString *l; struct sd_dhcp_route *routes; guint16 mtu; - int r; + int r, num; + gint64 end_time; r = sd_dhcp_lease_get_address (lease, &tmp_addr); if (r < 0) { @@ -254,10 +255,11 @@ lease_to_ip4_config (sd_dhcp_lease *lease, lifetime = 3600; /* one hour */ address.timestamp = nm_utils_get_monotonic_timestamp_s (); address.lifetime = address.preferred = lifetime; + end_time = (g_get_real_time () / G_USEC_PER_SEC) + lifetime; add_option_u32 (options, dhcp4_requests, DHCP_OPTION_IP_ADDRESS_LEASE_TIME, - (guint) MIN (time (NULL) + lifetime, G_MAXUINT32)); + (guint) CLAMP (end_time, 0, G_MAXUINT32 - 1)); address.source = NM_IP_CONFIG_SOURCE_DHCP; nm_ip4_config_add_address (ip4_config, &address); @@ -272,10 +274,10 @@ lease_to_ip4_config (sd_dhcp_lease *lease, } /* DNS Servers */ - r = sd_dhcp_lease_get_dns (lease, &addr_list); - if (r > 0) { + num = sd_dhcp_lease_get_dns (lease, &addr_list); + if (num > 0) { l = g_string_sized_new (30); - for (i = 0; i < r; i++) { + for (i = 0; i < num; i++) { if (addr_list[i].s_addr) { nm_ip4_config_add_nameserver (ip4_config, addr_list[i].s_addr); str = nm_utils_inet4_ntop (addr_list[i].s_addr, NULL); @@ -310,10 +312,11 @@ lease_to_ip4_config (sd_dhcp_lease *lease, add_option (options, dhcp4_requests, DHCP_OPTION_HOST_NAME, str); } - r = sd_dhcp_lease_get_routes (lease, &routes); - if (r > 0) { + /* Routes */ + num = sd_dhcp_lease_get_routes (lease, &routes); + if (num > 0) { l = g_string_sized_new (30); - for (i = 0; i < r; i++) { + for (i = 0; i < num; i++) { NMPlatformIP4Route route; const char *gw_str; @@ -335,6 +338,7 @@ lease_to_ip4_config (sd_dhcp_lease *lease, g_string_free (l, TRUE); } + /* MTU */ r = sd_dhcp_lease_get_mtu (lease, &mtu); if (r == 0 && mtu) { nm_ip4_config_set_mtu (ip4_config, mtu, NM_IP_CONFIG_SOURCE_DHCP); @@ -342,10 +346,11 @@ lease_to_ip4_config (sd_dhcp_lease *lease, LOG_LEASE (LOGD_DHCP4, " mtu %u", mtu); } - r = sd_dhcp_lease_get_ntp(lease, &addr_list); - if (r > 0) { + /* NTP servers */ + num = sd_dhcp_lease_get_ntp(lease, &addr_list); + if (num > 0) { l = g_string_sized_new (30); - for (i = 0; i < r; i++) { + for (i = 0; i < num; i++) { str = nm_utils_inet4_ntop (addr_list[i].s_addr, buf); g_string_append_printf (l, "%s%s", l->len ? " " : "", str); } @@ -378,7 +383,10 @@ nm_dhcp_systemd_get_lease_ip_configs (const char *iface, NMIP4Config *ip4_config; int r; - path = get_leasefile_path (iface, uuid, ipv6); + if (ipv6) + return NULL; + + path = get_leasefile_path (iface, uuid, FALSE); r = sd_dhcp_lease_load (path, &lease); if (r == 0) { ip4_config = lease_to_ip4_config (lease, NULL, 0, FALSE, NULL); @@ -576,7 +584,7 @@ ip4_start (NMDhcpClient *client, sd_dhcp_lease_unref (lease); /* Add requested options */ - for (i = 0; dhcp4_requests[i].desc; i++) { + for (i = 0; dhcp4_requests[i].name; i++) { if (dhcp4_requests[i].include) sd_dhcp_client_set_request_option (priv->client4, dhcp4_requests[i].num); } @@ -713,7 +721,7 @@ ip6_start (NMDhcpClient *client, } /* Add requested options */ - for (i = 0; dhcp6_requests[i].desc; i++) { + for (i = 0; dhcp6_requests[i].name; i++) { if (dhcp6_requests[i].include) sd_dhcp6_client_set_request_option (priv->client6, dhcp6_requests[i].num); } |