summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2017-06-14 14:14:56 +0200
committerThomas Haller <thaller@redhat.com>2017-06-14 14:20:44 +0200
commit96b436bd725227fd07d28f9b3989285f3dceda8b (patch)
tree36260ad36f077b4d55bd95afda21affda4e8b97f
parente02f5454fd92488d456594c6f520512cdf1d009a (diff)
downloadNetworkManager-th/sd-dhcp-domain-search-list-bgo783785.tar.gz
dhcp/systemd: add support for DHCPv4 domain search list (option 119)th/sd-dhcp-domain-search-list-bgo783785
-rw-r--r--src/dhcp/nm-dhcp-systemd.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/src/dhcp/nm-dhcp-systemd.c b/src/dhcp/nm-dhcp-systemd.c
index 6fb09907f0..7d868626d4 100644
--- a/src/dhcp/nm-dhcp-systemd.c
+++ b/src/dhcp/nm-dhcp-systemd.c
@@ -79,7 +79,6 @@ G_DEFINE_TYPE (NMDhcpSystemd, nm_dhcp_systemd, NM_TYPE_DHCP_CLIENT)
#define DHCP_OPTION_NIS_DOMAIN 40
#define DHCP_OPTION_NIS_SERVERS 41
-#define DHCP_OPTION_DOMAIN_SEARCH 119
#define DHCP_OPTION_MS_ROUTES 249
#define DHCP_OPTION_WPAD 252
@@ -118,7 +117,7 @@ static const ReqOption dhcp4_requests[] = {
{ DHCP_OPTION_NIS_SERVERS, REQPREFIX "nis_servers", TRUE },
{ SD_DHCP_OPTION_NTP_SERVER, REQPREFIX "ntp_servers", TRUE },
{ SD_DHCP_OPTION_SERVER_IDENTIFIER, REQPREFIX "dhcp_server_identifier", TRUE },
- { DHCP_OPTION_DOMAIN_SEARCH, REQPREFIX "domain_search", TRUE },
+ { SD_DHCP_OPTION_DOMAIN_SEARCH_LIST, REQPREFIX "domain_search", TRUE },
{ SD_DHCP_OPTION_CLASSLESS_STATIC_ROUTE, REQPREFIX "rfc3442_classless_static_routes", TRUE },
{ DHCP_OPTION_MS_ROUTES, REQPREFIX "ms_classless_static_routes", TRUE },
{ DHCP_OPTION_WPAD, REQPREFIX "wpad", TRUE },
@@ -234,6 +233,7 @@ lease_to_ip4_config (const char *iface,
NMPlatformIP4Address address;
nm_auto_free_gstring GString *str = NULL;
gs_free sd_dhcp_route **routes = NULL;
+ const char *const*search_domains = NULL;
guint16 mtu;
int r, num;
guint64 end_time;
@@ -294,6 +294,18 @@ lease_to_ip4_config (const char *iface,
add_option (options, dhcp4_requests, SD_DHCP_OPTION_DOMAIN_NAME_SERVER, str->str);
}
+ /* Search domains */
+ num = sd_dhcp_lease_get_search_domains (lease, (char ***) &search_domains);
+ if (num > 0) {
+ nm_gstring_prepare (&str);
+ for (i = 0; i < num; i++) {
+ nm_ip4_config_add_search (ip4_config, search_domains[i]);
+ g_string_append_printf (str, "%s%s", str->len ? " " : "", search_domains[i]);
+ LOG_LEASE (LOGD_DHCP6, "domain search list '%s'", search_domains[i]);
+ }
+ add_option (options, dhcp4_requests, SD_DHCP_OPTION_DOMAIN_SEARCH_LIST, str->str);
+ }
+
/* Domain Name */
r = sd_dhcp_lease_get_domainname (lease, &s);
if (r == 0) {