Hi,

I'm using the DHCPServer option within systemd-networkd along with
hostapd to provide a basic wireless access point on an embedded
system.  When my client systems connect, they make a DHCP request that
includes a parameter request for a Domain Name Server (option
6)---standard fare I think.  The DHCPAck/DHCPOffer from
systemd-network doesn't provide a response to this part of the request
so the client needs to manually configure a DNS server.  I created a
rudimentary patch (attached) that uses the access point IP as the DNS
server---seems to work okay for my particular use case though I
recognize this is *far* from generic.

Is there 1. a different/better way of doing this and, 2. if not, is
such a feature desirable for systemd-networkd/what might a good
implementation look like?

Thanks for any inights!
--Ash
From f4dcd668d56a9b47087929d59e2005ed4f1bbaa2 Mon Sep 17 00:00:00 2001
From: Ash Charles <ashchar...@gmail.com>
Date: Tue, 24 Mar 2015 16:56:51 -0700
Subject: [PATCH] DHCPServer: provide local dns server

Signed-off-by: Ash Charles <ashchar...@gmail.com>
---
 src/libsystemd-network/sd-dhcp-server.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/src/libsystemd-network/sd-dhcp-server.c b/src/libsystemd-network/sd-dhcp-server.c
index ab68322..e9cb813 100644
--- a/src/libsystemd-network/sd-dhcp-server.c
+++ b/src/libsystemd-network/sd-dhcp-server.c
@@ -434,6 +434,11 @@ static int server_send_offer(sd_dhcp_server *server, DHCPRequest *req,
         if (r < 0)
                 return r;
 
+        r = dhcp_option_append(&packet->dhcp, req->max_optlen, &offset, 0,
+                               DHCP_OPTION_DOMAIN_NAME_SERVER, 4, &server->address);
+        if (r < 0)
+                return r;
+
         r = dhcp_server_send_packet(server, req, packet, DHCP_OFFER, offset);
         if (r < 0)
                 return r;
@@ -471,6 +476,11 @@ static int server_send_ack(sd_dhcp_server *server, DHCPRequest *req,
         if (r < 0)
                 return r;
 
+        r = dhcp_option_append(&packet->dhcp, req->max_optlen, &offset, 0,
+                               DHCP_OPTION_DOMAIN_NAME_SERVER, 4, &server->address);
+        if (r < 0)
+                return r;
+
         r = dhcp_server_send_packet(server, req, packet, DHCP_ACK, offset);
         if (r < 0)
                 return r;
-- 
2.1.0

_______________________________________________
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel

Reply via email to