All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3 1/2] netconfig: Add IPv4 domain name helper and installer
@ 2019-12-11  0:34 Tim Kourt
  2019-12-11  0:34 ` [PATCH v3 2/2] resolve: Add systemd-resolved domain name installer Tim Kourt
  2019-12-12 16:37 ` [PATCH v3 1/2] netconfig: Add IPv4 domain name helper and installer Denis Kenzior
  0 siblings, 2 replies; 4+ messages in thread
From: Tim Kourt @ 2019-12-11  0:34 UTC (permalink / raw)
  To: iwd

[-- Attachment #1: Type: text/plain, Size: 2166 bytes --]

The provided domain name helper allows to override the DHCP lease
option value with the static one from network configuration file.
---
 src/netconfig.c | 34 +++++++++++++++++++++++++++++++++-
 1 file changed, 33 insertions(+), 1 deletion(-)

diff --git a/src/netconfig.c b/src/netconfig.c
index c7e9f934..8d493496 100644
--- a/src/netconfig.c
+++ b/src/netconfig.c
@@ -278,6 +278,28 @@ static char **netconfig_ipv4_get_dns(struct netconfig *netconfig, uint8_t proto)
 	return NULL;
 }
 
+static char *netconfig_ipv4_get_domain_name(struct netconfig *netconfig,
+								uint8_t proto)
+{
+	const struct l_dhcp_lease *lease;
+	char *domain_name;
+
+	domain_name = l_settings_get_string(netconfig->active_settings,
+							"IPv4", "DomainName");
+	if (domain_name)
+		/* Allow to override the DHCP domain name with setting entry. */
+		return domain_name;
+
+	if (proto != RTPROT_DHCP)
+		return NULL;
+
+	lease = l_dhcp_client_get_lease(netconfig->dhcp_client);
+	if (!lease)
+		return NULL;
+
+	return l_dhcp_lease_get_domain_name(lease);
+}
+
 static struct netconfig_ifaddr *netconfig_ipv6_get_ifaddr(
 						struct netconfig *netconfig,
 						uint8_t proto)
@@ -727,6 +749,7 @@ static void netconfig_ipv4_ifaddr_add_cmd_cb(int error, uint16_t type,
 	struct netconfig *netconfig = user_data;
 	struct netconfig_ifaddr *ifaddr;
 	char **dns;
+	char *domain_name;
 
 	if (error && error != -EEXIST) {
 		l_error("netconfig: Failed to add IP address. "
@@ -751,12 +774,21 @@ static void netconfig_ipv4_ifaddr_add_cmd_cb(int error, uint16_t type,
 	dns = netconfig_ipv4_get_dns(netconfig, netconfig->rtm_protocol);
 	if (!dns) {
 		l_error("netconfig: Failed to obtain DNS addresses.");
-		goto done;
+		goto domain_name;
 	}
 
 	resolve_add_dns(netconfig->ifindex, ifaddr->family, dns);
 	l_strv_free(dns);
 
+domain_name:
+	domain_name = netconfig_ipv4_get_domain_name(netconfig,
+						netconfig->rtm_protocol);
+	if (!domain_name)
+		goto done;
+
+	resolve_add_domain_name(netconfig->ifindex, domain_name);
+	l_free(domain_name);
+
 done:
 	netconfig_ifaddr_destroy(ifaddr);
 }
-- 
2.13.6

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH v3 2/2] resolve: Add systemd-resolved domain name installer
  2019-12-11  0:34 [PATCH v3 1/2] netconfig: Add IPv4 domain name helper and installer Tim Kourt
@ 2019-12-11  0:34 ` Tim Kourt
  2019-12-11  6:59   ` Denis Kenzior
  2019-12-12 16:37 ` [PATCH v3 1/2] netconfig: Add IPv4 domain name helper and installer Denis Kenzior
  1 sibling, 1 reply; 4+ messages in thread
From: Tim Kourt @ 2019-12-11  0:34 UTC (permalink / raw)
  To: iwd

[-- Attachment #1: Type: text/plain, Size: 3299 bytes --]

The exposed DBus API is used to install doamin name into
sytemd-resolved.
---
 src/resolve.c | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/resolve.h |  1 +
 2 files changed, 66 insertions(+)

diff --git a/src/resolve.c b/src/resolve.c
index 387e0b3c..1d9bbe0a 100644
--- a/src/resolve.c
+++ b/src/resolve.c
@@ -42,6 +42,8 @@ struct resolve_method_ops {
 	void (*exit)(void *data);
 	void (*add_dns)(uint32_t ifindex, uint8_t type, char **dns_list,
 								void *data);
+	void (*add_domain_name)(uint32_t ifindex, const char *domain_name,
+								void *data);
 	void (*remove)(uint32_t ifindex, void *data);
 };
 
@@ -177,6 +179,57 @@ static void resolve_systemd_add_dns(uint32_t ifindex, uint8_t type,
 								state, NULL);
 }
 
+static void systemd_link_add_domains_reply(struct l_dbus_message *message,
+								void *user_data)
+{
+	const char *name;
+	const char *text;
+
+	if (!l_dbus_message_is_error(message))
+		return;
+
+	l_dbus_message_get_error(message, &name, &text);
+
+	l_error("resolve-systemd: Failed to modify the domain entries. %s: %s",
+								name, text);
+}
+
+static void resolve_systemd_add_domain_name(uint32_t ifindex,
+							const char *domain_name,
+							void *data)
+{
+	struct systemd_state *state = data;
+	struct l_dbus_message *message;
+	bool routing_domain;
+
+	l_debug("ifindex: %u", ifindex);
+
+	if (!state->is_ready) {
+		l_error("resolve-systemd: Failed to add domain name. "
+				"Is 'systemd-resolved' service running?");
+
+		return;
+	}
+
+	message =
+		l_dbus_message_new_method_call(dbus_get_bus(),
+					SYSTEMD_RESOLVED_SERVICE,
+					SYSTEMD_RESOLVED_MANAGER_PATH,
+					SYSTEMD_RESOLVED_MANAGER_INTERFACE,
+					"SetLinkDomains");
+
+	if (!message)
+		return;
+
+	routing_domain = true;
+
+	l_dbus_message_set_arguments(message, "ia(sb)", ifindex,
+						1, domain_name, routing_domain);
+
+	l_dbus_send_with_reply(dbus_get_bus(), message,
+				systemd_link_add_domains_reply, state, NULL);
+}
+
 static void resolve_systemd_remove(uint32_t ifindex, void *data)
 {
 	struct systemd_state *state = data;
@@ -249,6 +302,7 @@ static const struct resolve_method_ops resolve_method_systemd = {
 	.init = resolve_systemd_init,
 	.exit = resolve_systemd_exit,
 	.add_dns = resolve_systemd_add_dns,
+	.add_domain_name = resolve_systemd_add_domain_name,
 	.remove = resolve_systemd_remove,
 };
 
@@ -376,6 +430,17 @@ void resolve_add_dns(uint32_t ifindex, uint8_t type, char **dns_list)
 	method.ops->add_dns(ifindex, type, dns_list, method.data);
 }
 
+void resolve_add_domain_name(uint32_t ifindex, const char *domain_name)
+{
+	if (!domain_name)
+		return;
+
+	if (!method.ops || !method.ops->add_dns)
+		return;
+
+	method.ops->add_domain_name(ifindex, domain_name, method.data);
+}
+
 void resolve_remove(uint32_t ifindex)
 {
 	if (!method.ops || !method.ops->remove)
diff --git a/src/resolve.h b/src/resolve.h
index b0335868..9cca81cc 100644
--- a/src/resolve.h
+++ b/src/resolve.h
@@ -21,4 +21,5 @@
  */
 
 void resolve_add_dns(uint32_t ifindex, uint8_t type, char **dns_list);
+void resolve_add_domain_name(uint32_t ifindex, const char *domain_name);
 void resolve_remove(uint32_t ifindex);
-- 
2.13.6

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH v3 2/2] resolve: Add systemd-resolved domain name installer
  2019-12-11  0:34 ` [PATCH v3 2/2] resolve: Add systemd-resolved domain name installer Tim Kourt
@ 2019-12-11  6:59   ` Denis Kenzior
  0 siblings, 0 replies; 4+ messages in thread
From: Denis Kenzior @ 2019-12-11  6:59 UTC (permalink / raw)
  To: iwd

[-- Attachment #1: Type: text/plain, Size: 330 bytes --]

Hi Tim,

On 12/10/19 6:34 PM, Tim Kourt wrote:
> The exposed DBus API is used to install doamin name into
> sytemd-resolved.
> ---
>   src/resolve.c | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
>   src/resolve.h |  1 +
>   2 files changed, 66 insertions(+)
> 

Applied, thanks.

Regards,
-Denis

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH v3 1/2] netconfig: Add IPv4 domain name helper and installer
  2019-12-11  0:34 [PATCH v3 1/2] netconfig: Add IPv4 domain name helper and installer Tim Kourt
  2019-12-11  0:34 ` [PATCH v3 2/2] resolve: Add systemd-resolved domain name installer Tim Kourt
@ 2019-12-12 16:37 ` Denis Kenzior
  1 sibling, 0 replies; 4+ messages in thread
From: Denis Kenzior @ 2019-12-12 16:37 UTC (permalink / raw)
  To: iwd

[-- Attachment #1: Type: text/plain, Size: 353 bytes --]

Hi Tim,

On 12/10/19 6:34 PM, Tim Kourt wrote:
> The provided domain name helper allows to override the DHCP lease
> option value with the static one from network configuration file.
> ---
>   src/netconfig.c | 34 +++++++++++++++++++++++++++++++++-
>   1 file changed, 33 insertions(+), 1 deletion(-)
> 

Applied, thanks.

Regards,
-denis

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2019-12-12 16:37 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-12-11  0:34 [PATCH v3 1/2] netconfig: Add IPv4 domain name helper and installer Tim Kourt
2019-12-11  0:34 ` [PATCH v3 2/2] resolve: Add systemd-resolved domain name installer Tim Kourt
2019-12-11  6:59   ` Denis Kenzior
2019-12-12 16:37 ` [PATCH v3 1/2] netconfig: Add IPv4 domain name helper and installer Denis Kenzior

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.