El Jueves, 28 de Abril de 2005 15:42, Jose M Rodriguez escribió:
> Hi,
>
> I note that the long standing bug that prevents do a nfsroot mount
> after operate pxeloader in tftp mode is recent solved in -CURRENT
> pxe.c
>
> I think this can be missed for 5.4 REL, but I'll be glad to see this
> MFC as time permitting.
>

I pointing to changes in revs 1.21 and 1.22 of 
src/sys/boot/i386/libi386/pxe.c

In special, rev 1.21, from kan, 7 weeks ago.

I can't see this breaking any ABI, but making things work as documented.  
Tested on RELENG_5_4 as attached patch

--
  josemi

--- pxe.diff begins here ---
Index: pxe.c
===================================================================
RCS file: /home/cvs/freebsd/src/sys/boot/i386/libi386/pxe.c,v
retrieving revision 1.20
diff -u -r1.20 pxe.c
--- pxe.c       25 Aug 2003 23:28:31 -0000      1.20
+++ pxe.c       28 Apr 2005 17:49:35 -0000
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/boot/i386/libi386/pxe.c,v 1.20 2003/08/25 
23:28:31 obrien Exp $");
+__FBSDID("$FreeBSD: src/sys/boot/i386/libi386/pxe.c,v 1.22 2005/04/17 
21:38:22 wollman Exp $");
 
 #include <stand.h>
 #include <string.h>
@@ -308,6 +308,7 @@
                }
                setenv("boot.nfsroot.server", inet_ntoa(rootip), 1);
                setenv("boot.nfsroot.path", rootpath, 1);
+               setenv("dhcp.host-name", hostname, 1);
        }
     }
     pxe_opens++;
@@ -413,6 +414,22 @@
        /* structure truncated here */
 };
 extern struct  nfs_iodesc nfs_root_node;
+extern int      rpc_port;
+
+static void
+pxe_rpcmountcall()
+{
+       struct  iodesc *d;
+       int     error;
+
+       if (!(d = socktodesc(pxe_sock)))
+               return;
+        d->myport = htons(--rpc_port);
+        d->destip = rootip;
+       if ((error = nfs_getrootfh(d, rootpath, nfs_root_node.fh)) != 0) 
+               printf("NFS MOUNT RPC error: %d\n", error);
+       nfs_root_node.iodesc = d;
+}
 
 static void
 pxe_setnfshandle(char *rootpath)
@@ -421,6 +438,14 @@
        u_char  *fh;
        char    buf[2 * NFS_FHSIZE + 3], *cp;
 
+       /*
+        * If NFS files were never opened, we need to do mount call
+        * ourselves. Use nfs_root_node.iodesc as flag indicating
+        * previous NFS usage.
+        */
+       if (nfs_root_node.iodesc == NULL)
+               pxe_rpcmountcall();
+
        fh = &nfs_root_node.fh[0];
        buf[0] = 'X';
        cp = &buf[1];
--- pxe.diff ends here ---
_______________________________________________
freebsd-stable@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-stable
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to