svn commit: r317886 - in head: lib/libstand sys/boot/common sys/boot/i386/libi386
Baptiste Daroussin
bapt at FreeBSD.org
Sat May 6 19:24:00 UTC 2017
Author: bapt
Date: Sat May 6 19:23:58 2017
New Revision: 317886
URL: https://svnweb.freebsd.org/changeset/base/317886
Log:
distinguish NFS versus TFTP boot by rootpath
Don't use DHCP 150 option to decide which protocol use to netboot. When
root-path includes ip address - go thru NFS, if ip address not exists in
root-path - go thru TFTP from server which ip address is in next-server. But
there is one limitation - only one tftp server in network to provide loader and
everything else. Does enybody use more than only one?
Submitted by: kczekirda
Sponsored by: Oktawave
MFC after: 3 weeks
Relnote: Yes
Differential Revision: https://reviews.freebsd.org/D8740
Modified:
head/lib/libstand/bootp.c
head/lib/libstand/bootp.h
head/lib/libstand/globals.c
head/lib/libstand/net.h
head/sys/boot/common/dev_net.c
head/sys/boot/i386/libi386/pxe.c
Modified: head/lib/libstand/bootp.c
==============================================================================
--- head/lib/libstand/bootp.c Sat May 6 18:35:01 2017 (r317885)
+++ head/lib/libstand/bootp.c Sat May 6 19:23:58 2017 (r317886)
@@ -148,16 +148,15 @@ bootp(sock, flag)
bp->bp_vend[8] = 9;
bcopy("PXEClient", &bp->bp_vend[9], 9);
bp->bp_vend[18] = TAG_PARAM_REQ;
- bp->bp_vend[19] = 8;
+ bp->bp_vend[19] = 7;
bp->bp_vend[20] = TAG_ROOTPATH;
- bp->bp_vend[21] = TAG_TFTP_SERVER;
- bp->bp_vend[22] = TAG_HOSTNAME;
- bp->bp_vend[23] = TAG_SWAPSERVER;
- bp->bp_vend[24] = TAG_GATEWAY;
- bp->bp_vend[25] = TAG_SUBNET_MASK;
- bp->bp_vend[26] = TAG_INTF_MTU;
- bp->bp_vend[27] = TAG_SERVERID;
- bp->bp_vend[28] = TAG_END;
+ bp->bp_vend[21] = TAG_HOSTNAME;
+ bp->bp_vend[22] = TAG_SWAPSERVER;
+ bp->bp_vend[23] = TAG_GATEWAY;
+ bp->bp_vend[24] = TAG_SUBNET_MASK;
+ bp->bp_vend[25] = TAG_INTF_MTU;
+ bp->bp_vend[26] = TAG_SERVERID;
+ bp->bp_vend[27] = TAG_END;
} else
bp->bp_vend[7] = TAG_END;
#else
@@ -438,10 +437,6 @@ vend_rfc1048(cp, len)
bcopy(cp, &dhcp_serverip.s_addr,
sizeof(dhcp_serverip.s_addr));
}
- if (tag == TAG_TFTP_SERVER) {
- bcopy(cp, &tftpip.s_addr,
- sizeof(tftpip.s_addr));
- }
#endif
cp += size;
}
Modified: head/lib/libstand/bootp.h
==============================================================================
--- head/lib/libstand/bootp.h Sat May 6 18:35:01 2017 (r317885)
+++ head/lib/libstand/bootp.h Sat May 6 19:23:58 2017 (r317886)
@@ -108,7 +108,6 @@ struct bootp {
#define TAG_T2 ((unsigned char) 59)
#define TAG_CLASSID ((unsigned char) 60)
#define TAG_CLIENTID ((unsigned char) 61)
-#define TAG_TFTP_SERVER ((unsigned char) 150)
#endif
#define TAG_END ((unsigned char) 255)
Modified: head/lib/libstand/globals.c
==============================================================================
--- head/lib/libstand/globals.c Sat May 6 18:35:01 2017 (r317885)
+++ head/lib/libstand/globals.c Sat May 6 19:23:58 2017 (r317886)
@@ -32,7 +32,6 @@ struct in_addr nameip; /* DNS server i
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 */
Modified: head/lib/libstand/net.h
==============================================================================
--- head/lib/libstand/net.h Sat May 6 18:35:01 2017 (r317885)
+++ head/lib/libstand/net.h Sat May 6 19:23:58 2017 (r317886)
@@ -91,7 +91,6 @@ extern struct in_addr rootip;
extern struct in_addr swapip;
extern struct in_addr gateip;
extern struct in_addr nameip;
-extern struct in_addr tftpip;
extern n_long netmask;
extern u_int intf_mtu;
Modified: head/sys/boot/common/dev_net.c
==============================================================================
--- head/sys/boot/common/dev_net.c Sat May 6 18:35:01 2017 (r317885)
+++ head/sys/boot/common/dev_net.c Sat May 6 19:23:58 2017 (r317886)
@@ -312,8 +312,11 @@ net_getparams(int sock)
return (EIO);
}
exit:
- if ((rootaddr = net_parse_rootpath()) != INADDR_NONE)
+ netproto = NET_TFTP;
+ if ((rootaddr = net_parse_rootpath()) != INADDR_NONE) {
+ netproto = NET_NFS;
rootip.s_addr = rootaddr;
+ }
#ifdef NETIF_DEBUG
if (debug) {
@@ -365,13 +368,6 @@ net_parse_rootpath()
int i;
n_long addr = INADDR_NONE;
- netproto = NET_NFS;
-
- if (tftpip.s_addr != 0) {
- netproto = NET_TFTP;
- addr = tftpip.s_addr;
- }
-
for (i = 0; rootpath[i] != '\0' && i < FNAME_SIZE; i++)
if (rootpath[i] == ':')
break;
Modified: head/sys/boot/i386/libi386/pxe.c
==============================================================================
--- head/sys/boot/i386/libi386/pxe.c Sat May 6 18:35:01 2017 (r317885)
+++ head/sys/boot/i386/libi386/pxe.c Sat May 6 19:23:58 2017 (r317886)
@@ -309,13 +309,9 @@ pxe_open(struct open_file *f, ...)
if (servip.s_addr == 0)
servip = rootip;
- netproto = NET_NFS;
- if (tftpip.s_addr != 0) {
- netproto = NET_TFTP;
- rootip.s_addr = tftpip.s_addr;
- }
+ netproto = NET_TFTP;
- if (netproto == NET_NFS && !rootpath[0])
+ if (!rootpath[0])
strcpy(rootpath, PXENFSROOTPATH);
for (i = 0; rootpath[i] != '\0' && i < FNAME_SIZE; i++)
@@ -323,8 +319,10 @@ pxe_open(struct open_file *f, ...)
break;
if (i && i != FNAME_SIZE && rootpath[i] == ':') {
rootpath[i++] = '\0';
- if (inet_addr(&rootpath[0]) != INADDR_NONE)
+ if (inet_addr(&rootpath[0]) != INADDR_NONE) {
+ netproto = NET_NFS;
rootip.s_addr = inet_addr(&rootpath[0]);
+ }
bcopy(&rootpath[i], &temp[0], strlen(&rootpath[i]) + 1);
bcopy(&temp[0], &rootpath[0], strlen(&rootpath[i]) + 1);
}
More information about the svn-src-head
mailing list