From owner-freebsd-net@FreeBSD.ORG Sun Jun 1 12:01:45 2014 Return-Path: Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id B4F9BDB7; Sun, 1 Jun 2014 12:01:45 +0000 (UTC) Received: from esa-jnhn.mail.uoguelph.ca (esa-jnhn.mail.uoguelph.ca [131.104.91.44]) by mx1.freebsd.org (Postfix) with ESMTP id 52BD92650; Sun, 1 Jun 2014 12:01:45 +0000 (UTC) X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AqkEAHUEi1ODaFve/2dsb2JhbABYgyYzWIJsuCyGaFEBgR50giUBAQEDAQEBASArIAsFFhgRGQIpAQkYAQ0GCAcEARwCAogZCA2xLaQxF41nCRACARs0B4I0DzISgTkElxyEIpFvg1QhNIE+ X-IronPort-AV: E=Sophos;i="4.98,951,1392181200"; d="scan'208";a="125510873" Received: from muskoka.cs.uoguelph.ca (HELO zcs3.mail.uoguelph.ca) ([131.104.91.222]) by esa-jnhn.mail.uoguelph.ca with ESMTP; 01 Jun 2014 08:01:42 -0400 Received: from zcs3.mail.uoguelph.ca (localhost.localdomain [127.0.0.1]) by zcs3.mail.uoguelph.ca (Postfix) with ESMTP id E12BEB41A3; Sun, 1 Jun 2014 08:01:42 -0400 (EDT) Date: Sun, 1 Jun 2014 08:01:42 -0400 (EDT) From: Rick Macklem To: John Howie Message-ID: <1468927196.9638531.1401624102908.JavaMail.root@uoguelph.ca> In-Reply-To: Subject: Re: Patches for BOOTP/DHCP code to support Windows Server DHCP MIME-Version: 1.0 X-Originating-IP: [172.17.91.202] X-Mailer: Zimbra 7.2.6_GA_2926 (ZimbraWebClient - FF3.0 (Win)/7.2.6_GA_2926) Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Content-Filtered-By: Mailman/MimeDel 2.1.18 Cc: freebsd-net@freebsd.org, freebsd-arm@freebsd.org, freebsd-questions@freebsd.org X-BeenThere: freebsd-net@freebsd.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Networking and TCP/IP with FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 01 Jun 2014 12:01:45 -0000 John Howie wrote: > Hi all, >=20 > I apologize for the cross posting of this email, but I believe it > will be > of interest to people across all three groups. Please feel free to > forward > to additional groups if you feel they would benefit. >=20 > I have seen a few posts on and off over the years about Windows > Server > DHCP not working with FreeBSD. Specifically, the Windows Server DHCP > would > not return the boot host name/IP address and the root path. The > typical > response to =C2=B3why won=C2=B9t it work" has typically been that there i= s a > flaw in > Windows Server DHCP code. I did a little digging and found that the > problem actually lies in code in FreeBSD. >=20 > Section 3.5 of RFC 2131 (the DHCP RFC) states that =C2=B3...Second, in it= s > initial DHCPDISCOVER or DHCPREQUEST message, a client may provide the > server with a list of specific parameters the client is interested > in=C5=A0=C2=B2 > and =C2=B3...The client can inform the server which configuration > parameters > the client is interested in by including the 'parameter request list' > option. The data portion of this option explicitly lists the options > requested by tag number=C5=A0=C2=B2. A DHCP Server is not required to ret= urn > any > parameter that a client does not ask for. It appears that the > ISC-DHCP > server, which is recommended by most, will return configured options > regardless of whether or not the client asks for them. >=20 > There are two places in the FreeBSD codebase that DHCP is used to > boot the > system over a network. The first is in the boot loader, which uses > code in > lib/libstand. The second is in the NFS code, in sys/nfs. The code is > sys/nfs is not always used if the boot loader sets up the environment > for > the NFS code, either by passing parameters to the kernel (as PXEBOOT > appears to do), or information is configured in the boot loader > configuration files, e.g. /boot/loader.rc. >=20 > I have attached two unified diff files which I ask people to test, > before > I submit them for inclusion into the codebase as fixes. The first, > bootp.c.diff fixes the code in lib/libstand/bootp.c to request the > boot > host (option 12, aka TAG_HOSTNAME) and the NFS root path (option 17, > aka > TAG_ROOTPATH). This fix has been tested with PXEBOOT on an amd64 box > and > ubldr on an ARM/RaspberryPI system. The second, bootp_subr.c.diff, > fixes > code in sys/nfs/bootp_subr.c to request the same options and also to > fix > bugs that erroneously reported the IP address of the BOOTP/DHCP > server. > The code assumed that the BOOTP/DHCP server was also the boot host. > Please > send me all feedback directly. >=20 > The diff files work with 10.0-RELEASE through 10.0-RELEASE-p3, but > will > likely work with 9.0 and also CURRENT and STABLE, including 11.0, as > the > code is old code that does not appear to have changed in a while. If > you > want to try it on those systems please, please make sure you have > backup > copies just in case. >=20 > If you do not have experience configuring Windows Server DHCP just > drop me > an email, and I will send you a cheat sheet to get you up and > running. >=20 > I am going to grab the latest ubldr code to see if I can get it to > work > more like PXEBOOT, that appears to pass parameters to the kernel to > avoid > the need for the NFS BOOTP/DHCP process. If you test on an ARM system > with > ubldr in RELEASE you will see a lot of unnecessary network activity > going > on, that we should be able to fix. >=20 Actually, I tend to think that using the code in sys/nfs/bootp_subr.c is preferable to using the NFS stuff in stand that pxeboot does. The only reason I know for pxeboot doing the NFS stuff and filling in the nfsv3_diskless structure is historical. (Or that's what most people use for x86, so it would be a POLA violation if it breaks, if you prefer.) (Basically, the code in sys/nfs/bootp_subr.c is easier to maintain than the stand alone NFS client pxeboot uses.) As such, I don't think this work is necessary, rick > Regards, >=20 > John >=20 > john@thehowies.com (personal) | jhowie@email.arizona.edu (academic) | > j.howie@napier.ac.uk (academic) | jhowie@cloudsecurityalliance.org > (work) >=20 >=20 >=20 >=20 > _______________________________________________ > freebsd-net@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-net > To unsubscribe, send any mail to > "freebsd-net-unsubscribe@freebsd.org"