Hi,

to conclude this thread, the patch below allows one to specify an nfs rootfs 
via the ROOTDEVNAME kernel option, which will be mounted when BOOTP does not 
return a root-path option.

Lars


diff --git a/sys/nfs/bootp_subr.c b/sys/nfs/bootp_subr.c
index 2c57a91..972fb12 100644
--- a/sys/nfs/bootp_subr.c
+++ b/sys/nfs/bootp_subr.c
@@ -45,6 +45,7 @@ __FBSDID("$FreeBSD$");
 
 #include "opt_bootp.h"
 #include "opt_nfs.h"
+#include "opt_rootdevname.h"
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -870,8 +871,20 @@ bootpc_call(struct bootpc_globalcontext *gctx, struct 
thread *td)
                                        rtimo = time_second +
                                                BOOTP_SETTLE_DELAY;
                                        printf(" (got root path)");
-                               } else
+                               } else {
                                        printf(" (no root path)");
+#ifdef ROOTDEVNAME
+                                       /*
+                                        * If we'll mount rootfs from
+                                        * ROOTDEVNAME, we can accept
+                                        * offers without root paths.
+                                        */
+                                       gotrootpath = 1;
+                                       rtimo = time_second +
+                                               BOOTP_SETTLE_DELAY;
+                                       printf(" (ROOTDEVNAME)");
+#endif
+                               }
                                printf("\n");
                        }
                } /* while secs */
@@ -1440,6 +1453,16 @@ bootpc_decode_reply(struct nfsv3_diskless *nd, struct 
bootpc_ifcontext *ifctx,
 
        p = bootpc_tag(&gctx->tag, &ifctx->reply, ifctx->replylen,
                       TAG_ROOT);
+#ifdef ROOTDEVNAME
+       /*
+        * If there was no root path in BOOTP, use the one in ROOTDEVNAME.
+        */
+       if (p == NULL) {
+               p = strdup(ROOTDEVNAME, M_TEMP);
+               if (strcmp(strsep(&p, ":"), "nfs") != 0)
+                       panic("ROOTDEVNAME is not an NFS mount point");
+       }
+#endif
        if (p != NULL) {
                if (gctx->setrootfs != NULL) {
                        printf("rootfs %s (ignored) ", p);

_______________________________________________
freebsd-current@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "freebsd-current-unsubscr...@freebsd.org"

Reply via email to