NFS - Change NFS root mount default from udp to tcp
authorMatthew Dillon <dillon@apollo.backplane.com>
Sat, 10 Oct 2009 00:54:06 +0000 (17:54 -0700)
committerMatthew Dillon <dillon@apollo.backplane.com>
Sat, 10 Oct 2009 00:54:06 +0000 (17:54 -0700)
We previously changed the default NFS mount type to tcp.  Adjust
the default NFS root mount type to tcp as well.  UDP mounts just
do not perform well when large numbers of RPCs are allowed to run
in parallel.

sys/platform/pc32/i386/autoconf.c
sys/platform/pc64/amd64/autoconf.c
sys/platform/vkernel/i386/autoconf.c

index 03fcd36..67b92fa 100644 (file)
@@ -472,8 +472,8 @@ match_done:
        /* set up root mount */
        nd->root_args.rsize = 8192;             /* XXX tunable? */
        nd->root_args.wsize = 8192;
-       nd->root_args.sotype = SOCK_DGRAM;
-       nd->root_args.flags = (NFSMNT_WSIZE | NFSMNT_RSIZE | NFSMNT_RESVPORT);
+       nd->root_args.sotype = SOCK_STREAM;
+       nd->root_args.flags = NFSMNT_WSIZE | NFSMNT_RSIZE | NFSMNT_RESVPORT;
        if (inaddr_to_sockaddr("boot.nfsroot.server", &nd->root_saddr)) {
                kprintf("PXE: no server\n");
                return;
index 8ddea8c..0982237 100644 (file)
@@ -473,8 +473,8 @@ match_done:
        /* set up root mount */
        nd->root_args.rsize = 8192;             /* XXX tunable? */
        nd->root_args.wsize = 8192;
-       nd->root_args.sotype = SOCK_DGRAM;
-       nd->root_args.flags = (NFSMNT_WSIZE | NFSMNT_RSIZE | NFSMNT_RESVPORT);
+       nd->root_args.sotype = SOCK_STREAM;
+       nd->root_args.flags = NFSMNT_WSIZE | NFSMNT_RSIZE | NFSMNT_RESVPORT;
        if (inaddr_to_sockaddr("boot.nfsroot.server", &nd->root_saddr)) {
                kprintf("PXE: no server\n");
                return;
index fd4ccc4..c78987b 100644 (file)
@@ -456,6 +456,7 @@ decode_nfshandle(char *ev, u_char *fh)
  * boot.netif.netmask          netmask on boot interface
  * boot.netif.gateway          default gateway (optional)
  * boot.netif.hwaddr           hardware address of boot interface
+ * boot.netif.name             name of boot interface (instead of hw addr)
  * boot.nfsroot.server         IP address of root filesystem server
  * boot.nfsroot.path           path of the root filesystem on server
  * boot.nfsroot.nfshandle      NFS handle for root filesystem on server
@@ -483,6 +484,17 @@ pxe_setup_nfsdiskless(void)
                myaddr.sin_addr.s_addr | ~ netmask.sin_addr.s_addr;
        bcopy(&netmask, &nd->myif.ifra_mask, sizeof(netmask));
 
+       if ((cp = kgetenv("boot.netif.name")) != NULL) {
+               TAILQ_FOREACH(ifp, &ifnet, if_link) {
+                       if (strcmp(cp, ifp->if_xname) == 0)
+                               break;
+               }
+               if (ifp)
+                       goto match_done;
+               kprintf("PXE: cannot find interface %s\n", cp);
+               return;
+       }
+
        if (hwaddr_to_sockaddr("boot.netif.hwaddr", &ourdl)) {
                kprintf("PXE: no hardware address\n");
                return;
@@ -519,8 +531,8 @@ match_done:
        /* set up root mount */
        nd->root_args.rsize = 8192;             /* XXX tunable? */
        nd->root_args.wsize = 8192;
-       nd->root_args.sotype = SOCK_DGRAM;
-       nd->root_args.flags = (NFSMNT_WSIZE | NFSMNT_RSIZE | NFSMNT_RESVPORT);
+       nd->root_args.sotype = SOCK_STREAM;
+       nd->root_args.flags = NFSMNT_WSIZE | NFSMNT_RSIZE | NFSMNT_RESVPORT;
        if (inaddr_to_sockaddr("boot.nfsroot.server", &nd->root_saddr)) {
                kprintf("PXE: no server\n");
                return;