Date: Wed, 4 Oct 2000 02:00:26 -0700 (PDT) From: B.Candler@pobox.com To: freebsd-gnats-submit@FreeBSD.org Subject: i386/21743: pxeboot ignores NFS server IP address in root-path; libstand tweak Message-ID: <20001004090026.3D42737B66C@hub.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 21743
>Category: i386
>Synopsis: pxeboot ignores NFS server IP address in root-path; libstand tweak
>Confidential: no
>Severity: serious
>Priority: low
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Wed Oct 04 02:10:01 PDT 2000
>Closed-Date:
>Last-Modified:
>Originator: Brian Candler
>Release: 4.1.1
>Organization:
>Environment:
>Description:
pxeboot ignores the IP address component of the root-path, i.e.
options root-path "10.0.0.1:/remoteroot";
^^^^^^^^
and instead uses the DHCP server's IP address and tries to mount that.
Hence it is impossible to have one machine as DHCP/TFTP server and a
different machine as NFS server.
The kernel itself, with 'options BOOTP' and 'options BOOTP_NFSROOT', _does_
honour the NFS server IP address - so it's only a problem with pxeboot.
>How-To-Repeat:
Set up DHCP and TFTP server on 10.0.0.200 with
next-server 10.0.0.200;
filename "pxeboot";
option root-path "10.0.0.1:/os/freebsd-4.1";
Start up a DHCP/PXE machine. It reports:
pxe_open: server addr: 10.0.0.200 <<< This should be 10.0.0.1
pxe_open: server path: /os/freebsd-4.1
pxe_open: gateway ip: 0.0.0.0
>Fix:
--- sys/boot/i386/libi386/pxe.c.orig Sun Sep 10 02:52:18 2000
+++ sys/boot/i386/libi386/pxe.c Wed Oct 4 09:13:06 2000
@@ -292,6 +292,8 @@
if(rootpath[i] == ':')
break;
if(i && i != FNAME_SIZE) {
+ rootpath[i] = '\0';
+ rootip.s_addr = inet_addr(&rootpath[0]);
i++;
bcopy(&rootpath[i], &temp[0], strlen(&rootpath[i])+1);
bcopy(&temp[0], &rootpath[0], strlen(&rootpath[i])+1);
However this turns up another problem; there are two versions of
inet_addr, one in libstand/net.o and the other in libstand/inet_addr.o
(the problem being that inet_addr.o comes from libc/inet_addr.c and
references other libc things, so the link fails)
The solution is to remove libstand's reliance on libc, which I guess
is a hangover from olden times:
--- lib/libstand/Makefile.orig Wed Oct 4 10:42:22 2000
+++ lib/libstand/Makefile Wed Oct 4 10:44:16 2000
@@ -86,10 +86,6 @@
${.ALLSRC} > ${.TARGET}
.endif
-# network support from libc
-.PATH: ${.CURDIR}/../libc/net
-SRCS+= inet_ntoa.c inet_addr.c
-
# _setjmp/_longjmp
.PATH: ${.CURDIR}/${MACHINE_ARCH}
SRCS+= _setjmp.S
@@ -107,7 +103,7 @@
fstat.c close.c lseek.c open.c read.c write.c readdir.c
# network routines
-SRCS+= arp.c ether.c in_cksum.c net.c udp.c netif.c rpc.c
+SRCS+= arp.c ether.c inet_ntoa.c in_cksum.c net.c udp.c netif.c rpc.c
# network info services:
SRCS+= bootp.c rarp.c bootparam.c
However, note that I haven't done a buildworld to check that this
doesn't affect anything else which uses libstand.
>Release-Note:
>Audit-Trail:
>Unformatted:
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20001004090026.3D42737B66C>
