From mboxrd@z Thu Jan 1 00:00:00 1970 From: ludo@gnu.org (Ludovic =?utf-8?Q?Court=C3=A8s?=) Subject: Re: [GSoC] Introduction + question about dmd Date: Thu, 05 Mar 2015 11:51:03 +0100 Message-ID: <87mw3ryay0.fsf@gnu.org> References: Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:47210) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YTTMz-0008Li-PR for guix-devel@gnu.org; Thu, 05 Mar 2015 05:51:11 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YTTMw-0001XV-Bi for guix-devel@gnu.org; Thu, 05 Mar 2015 05:51:09 -0500 Received: from fencepost.gnu.org ([2001:4830:134:3::e]:57545) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YTTMw-0001XQ-8m for guix-devel@gnu.org; Thu, 05 Mar 2015 05:51:06 -0500 In-Reply-To: (Rohan Prinja's message of "Wed, 4 Mar 2015 19:38:11 +0530") List-Id: "Development of GNU Guix and the GNU System distribution." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-devel-bounces+gcggd-guix-devel=m.gmane.org@gnu.org Sender: guix-devel-bounces+gcggd-guix-devel=m.gmane.org@gnu.org To: Rohan Prinja Cc: guix-devel@gnu.org Hello! Rohan Prinja skribis: > The project I'm interested in working on for GNU GSoC this year is to > implement a DHCP client library in Guile. The end result, as I discussed > with Ludovic, would be a package installable via Guix. This would make > available a command roughly equivalent to ISC's dhclient. The library > should also implement a service that dmd can run. Specifically, the library=E2=80=99s functionality should be available in a = way that makes it easy to integrate in some event loop. > Things I've done so far - read the dmd manual, started learning Guile (I'= ve > programmed in Racket before, but not Guile), reading up on the DHCP > protocol, and started looking at ISC's implementation of dhclient (I used > the one obtained by apt-get source isc-dhcp-client). (Alternately, you can get it with =E2=80=98guix build -S isc-dhclient=E2=80= =99. ;-)) This is a good start. You might want to look at more than at the actual implementation. > @Ludovic: continuing our discussion - could you please explain what you > mean by the dmd event loop? I searched in the manual as well the dmd-0.2 > source but couldn't find any reference to it. Is this something planned to > be added to dmd? How will it look like? It=E2=80=99s something planned. Basically dmd has to react to various even= ts; currently, the only events that happen in practice are SIGCHLD, connections made by the client programs (=E2=80=98deco=E2=80=99, =E2=80=98r= eboot=E2=80=99, etc.), and commands sent on open connections by these clients. Currently, in lieu of an full-blown even loop, there=E2=80=99s just this na= ive loop in the (dmd) module: (let next-command () (match (accept sock) ((command-source . client-address) (process-connection command-source)) (_ #f)) (next-command)) That doesn=E2=80=99t scale well and isn=E2=80=99t safe though, because a cl= ient could wait forever and thus lead dmd to wait forever as well (although that=E2=80= =99s slightly beyond the adversary model we would think of.) More importantly, we would like dmd to be able to handle other kinds of events. For instance, I would like it to run a =E2=80=9CREPL server=E2=80= =9D (info "(guile) REPL Servers"); that means it will also have to check for events occurring on the REPL server socket. Other types of events could include network reconfigurations (which could be detected via a PF_NETLINK/NETLINK_ROUTE socket), device additions/removal, events related to the DHCP client process, etc. To be able to handle these events, dmd needs a usual event loop. It doesn=E2=80=99t have it yet, but that=E2=80=99s something I=E2=80=99m plann= ing to add (I say =E2=80=9CI=E2=80=9D but anyone reading this message is welcome to help ;-)). Does it clarify things a bit? Thanks, Ludo=E2=80=99.