hi!

On Mon, Jun 25, 2007 at 11:50:03AM +0200, Heinrich Rebehn wrote:
> I have successfully set up a client for diskless(8) booting.
> However, this works only when booting from the first (onboard) nic.
> When i use another nic, the kernel still tries to do revarp from the 
> first nic, which fails.
> 
> sys/nfs/nfs_boot.c offers a possibility to override the default search:
> 
> /*
> * Find a network interface.
> */
> if (nfsbootdevname)
>     ifp = ifunit(nfsbootdevname);
> else <search loop>
> ...
> 
> but where/how can i set nfsbootdevname?
> 
> The boot.conf(8) manpage talks about passing options to the kernel via 
> "set howto". Could i use that?
> 

you cannot set the nfsbootdevname as a kernel option. it is filled in
by autoconf. for example, pxeboot passes the mac address of its boot
interface and autoconf looks up the matching network interface in

sys/arch/i386/i386/autoconf.c

---snip---
#if defined(NFSCLIENT)
        if (bios_bootmac) {
                extern char *nfsbootdevname;
                struct ifnet *ifp;
                
                mountroot = nfs_mountroot;

                printf("PXE boot MAC address %s, ",
                    ether_sprintf(bios_bootmac->mac));

                for (ifp = TAILQ_FIRST(&ifnet); ifp != NULL;
                    ifp = TAILQ_NEXT(ifp, if_list)) {
                        if ((ifp->if_type == IFT_ETHER ||
                            ifp->if_type == IFT_FDDI) &&
                            bcmp(bios_bootmac->mac,
                            ((struct arpcom *)ifp)->ac_enaddr,
                            ETHER_ADDR_LEN) == 0)
                                break;
                }
                if (ifp) {
                        nfsbootdevname = ifp->if_xname;
                        printf("interface %s\n", nfsbootdevname);
                } else
                        printf("no interface selected\n");
                return;
        }
#endif
---snap---

reyk

Reply via email to