From mboxrd@z Thu Jan 1 00:00:00 1970 From: ludo@gnu.org (Ludovic =?utf-8?Q?Court=C3=A8s?=) Subject: Re: [GSoC] Progress Report 1 Date: Fri, 12 Jun 2015 10:02:51 +0200 Message-ID: <87bngls6ac.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]:50146) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Z3JvV-0007Tj-4w for guix-devel@gnu.org; Fri, 12 Jun 2015 04:02:58 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Z3JvS-0001BT-GN for guix-devel@gnu.org; Fri, 12 Jun 2015 04:02:57 -0400 In-Reply-To: (Rohan Prinja's message of "Thu, 11 Jun 2015 13:24:15 +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 Hi Rohan, Rohan Prinja skribis: > Code written thus far (the source is at > http://git.savannah.gnu.org/cgit/guix/dhcp.git): > 1 Wrote classes for DHCP packets, network interfaces, DHCP options and > DHCP configuratiion instances. > 2 Wrote code to read the system's network interfaces and populate the > network-interface instances' fields (name, hwaddr, family). > 3 Refactored the above to records on the advice given by Ludo (who > pointed out that OOPS is unidiomatic and in any case not really needed > here). > 4 Wrote incomplete testing code for the the items in 1 (incomplete > because the tests did not test the serialisation of DHCP message > records into bytevectors). > 5 Began writing code to send a bytevector to a specified sockaddr, and > began the skeleton of the main client module. Neat! > Current focus: > 1 Test the code to send and receive packets > 2 Code to make and send ARP messages on the link layer, and > corresponding unit tests Have you tried sending DISCOVER packets to a real server so far? Is there something blocking that? > 2 Complete the (dhcp client) module (this includes the implementation > of the main DHCP client algorithm, and lease storage), and complete > the (dhcp *) modules' tests > 3 Read the dhcpd server source (this package: > http://git.savannah.gnu.org/cgit/guix.git/tree/gnu/packages/admin.scm#n37= 8) > to figure out how to have a server for test the client OK. > Questions: > 1 Ludo: I looked at the implementations of packed structs. DHCP > packets are in general variable-length because of the options field, > while packed structs require need to have the field lengths known > ahead of time. So do you recommended making some changes to the packed > structs implementations to accomodate the variable-length options > field (I'll have to think about how to do this) or simply refactor the > serializer/deserializer I wrote back when the code was in GOOPS to use > records? I=E2=80=99m not sure exactly. packed-struct.scm in Guile-OpenGL is not a perfect fit, for other reasons as well, so I guess it may have to be adjusted. Actually I=E2=80=99m just realizing that we also have a packed-struct thing= in (guix build syscalls), called =E2=80=98define-c-struct=E2=80=99, which can = handle endianness (see the examples there.) It does not handle variable-length fields though. Would it work for you? Are variable-length fields in the middle of the packet, or rather at the end? In the latter case, you could still use define-packed-struct for the packet header, and then handle the rest manually. In the former case, define-packed-struct probably won=E2=80=99t help. > 2 Ludo: please could you clarify exactly what the Copyright header for > a source file should look like when it uses code from another project? > For example, (dhcp interfaces) copies code from (guix build syscalls) > (a couple of variable definitions that (guix build syscalls) didn't > export). Just keep the copyright and license header as-is, adding a copyright line for yourself if/when you modify something. Regarding that module, I see that some of the tests use (guix build syscalls), so perhaps it would make sense to use that consistently everywhere? Also, we should add bindings to libc=E2=80=99s getifaddrs in (guix build syscalls) so that interfaces.c is no longer needed. Could you try that, using =E2=80=98define-c-struct=E2=80=99 to define the =E2=80=98ifaddrs=E2= =80=99 structure? Besides, I=E2=80=99ll see if I can add a minimal autotools setup to the rep= o, to facilitate things. Thanks, and happy hacking! :-) Ludo=E2=80=99.