6a695123b0
Add a new 'netproto' variable which can be set for now to NET_TFTP or NET_NFS (default to NET_NONE) From the dhcp options if one sets the root-path option to: "ip:path", the loader will consider it is booting over NFS (meaning same behaviour as the default current behaviour) if the dhcp option "tftp server address" is set (option 150) the loader will consider it is booting over tftpfs, it will then consider the root-path options with 2 possible case 1. "path" then the IP of the tftp server will be the one passed by the option 150, and the files will be retrieved under "path" on the tftp server 2. "ip:path" then the IP of the tftp server will be the one passed in the option "overwritting the IP from the option 150. We could not "abuse" the rootpath option in the form or tftp://ip:path because this is already used for other purpose by iPXE preventing any chainload from iPXE to the FreeBSD loader. Given at each open(), the loader loops over all available filesystems and keep the "best" error, we needed to prevent tftpfs to fallback on nfs and vice versa. the tftpfs and nfs implementation in libstand now return EINVAL early if 'netproto' for that purpose. Reviewed by: tsoome Relnotes: yes Sponsored by: Gandi.net Differential Revision: https://reviews.freebsd.org/D7628
40 lines
1.2 KiB
C
40 lines
1.2 KiB
C
/* $NetBSD: globals.c,v 1.3 1995/09/18 21:19:27 pk Exp $ */
|
|
|
|
/*
|
|
* globals.c:
|
|
*
|
|
* global variables should be separate, so nothing else
|
|
* must be included extraneously.
|
|
*/
|
|
|
|
#include <sys/cdefs.h>
|
|
__FBSDID("$FreeBSD$");
|
|
|
|
#include <sys/param.h>
|
|
#include <netinet/in.h>
|
|
#include <netinet/in_systm.h>
|
|
|
|
#include "stand.h"
|
|
#include "net.h"
|
|
|
|
u_char bcea[6] = BA; /* broadcast ethernet address */
|
|
|
|
char rootpath[FNAME_SIZE] = "/"; /* root mount path */
|
|
char bootfile[FNAME_SIZE]; /* bootp says to boot this */
|
|
char hostname[FNAME_SIZE]; /* our hostname */
|
|
int hostnamelen;
|
|
char domainname[FNAME_SIZE]; /* our DNS domain */
|
|
int domainnamelen;
|
|
int netproto = NET_NONE; /* Network prototol */
|
|
char ifname[IFNAME_SIZE]; /* name of interface (e.g. "le0") */
|
|
struct in_addr myip; /* my ip address */
|
|
struct in_addr nameip; /* DNS server ip address */
|
|
struct in_addr rootip; /* root ip address */
|
|
struct in_addr swapip; /* swap ip address */
|
|
struct in_addr gateip; /* gateway ip address */
|
|
struct in_addr tftpip; /* TFTP ip address */
|
|
n_long netmask = 0xffffff00; /* subnet or net mask */
|
|
u_int intf_mtu; /* interface mtu from bootp/dhcp */
|
|
int errno; /* our old friend */
|
|
|