Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F105704736
D9847.id26089.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
2 KB
Referenced Files
None
Subscribers
None
D9847.id26089.diff
View Options
Index: head/lib/libstand/bootp.h
===================================================================
--- head/lib/libstand/bootp.h
+++ head/lib/libstand/bootp.h
@@ -22,6 +22,8 @@
* $FreeBSD$
*/
+#ifndef _BOOTP_H_
+#define _BOOTP_H_
struct bootp {
unsigned char bp_op; /* packet opcode type */
@@ -145,3 +147,7 @@
/* v_flags values */
#define VF_SMASK 1 /* Subnet mask field contains valid data */
+
+int dhcp_try_rfc1048(u_char *cp, u_int len);
+
+#endif /* _BOOTP_H_ */
Index: head/lib/libstand/bootp.c
===================================================================
--- head/lib/libstand/bootp.c
+++ head/lib/libstand/bootp.c
@@ -344,6 +344,17 @@
return (-1);
}
+int
+dhcp_try_rfc1048(u_char *cp, u_int len)
+{
+
+ expected_dhcpmsgtype = DHCPACK;
+ if (bcmp(vm_rfc1048, cp, sizeof(vm_rfc1048)) == 0) {
+ return (vend_rfc1048(cp, len));
+ }
+ return (-1);
+}
+
static int
vend_rfc1048(cp, len)
u_char *cp;
Index: head/sys/boot/i386/libi386/pxe.c
===================================================================
--- head/sys/boot/i386/libi386/pxe.c
+++ head/sys/boot/i386/libi386/pxe.c
@@ -101,6 +101,7 @@
extern u_int16_t __pxenvseg;
extern u_int16_t __pxenvoff;
extern void __pxenventry(void);
+extern struct in_addr servip;
struct netif_dif pxe_ifs[] = {
/* dif_unit dif_nsel dif_stats dif_private */
@@ -276,17 +277,38 @@
}
if (pxe_debug)
printf("pxe_open: netif_open() succeeded\n");
+
+ if (socktodesc(pxe_sock) == NULL) {
+ printf("pxe_open: bad socket %d\n", pxe_sock);
+ return (ENXIO);
+ }
+
}
if (rootip.s_addr == 0) {
/*
- * Do a bootp/dhcp request to find out where our
+ * Try to extract the RFC1048 data from PXE.
+ * If fail do a bootp/dhcp request to find out where our
* NFS/TFTP server is. Even if we dont get back
* the proper information, fall back to the server
* which brought us to life and a default rootpath.
*/
- bootp(pxe_sock, BOOTP_PXE);
+
+ if (dhcp_try_rfc1048(bootplayer.vendor.d, BOOTP_DHCPVEND) < 0) {
+ if (pxe_debug)
+ printf("pxe_open: no RFC1048 data in PXE Cache\n");
+ bootp(pxe_sock, BOOTP_PXE);
+ } else if (pxe_debug) {
+ printf("pxe_open: loaded RFC1048 data from PXE Cache\n");
+ }
+
if (rootip.s_addr == 0)
rootip.s_addr = bootplayer.sip;
+ if (gateip.s_addr == 0)
+ gateip.s_addr = bootplayer.gip;
+ if (myip.s_addr == 0)
+ myip.s_addr = bootplayer.yip;
+ if (servip.s_addr == 0)
+ servip = rootip;
netproto = NET_NFS;
if (tftpip.s_addr != 0) {
@@ -323,6 +345,9 @@
printf("pxe_open: server addr: %s\n", inet_ntoa(rootip));
printf("pxe_open: server path: %s\n", rootpath);
printf("pxe_open: gateway ip: %s\n", inet_ntoa(gateip));
+ printf("pxe_open: my ip: %s\n", inet_ntoa(myip));
+ printf("pxe_open: netmask: %s\n", intoa(netmask));
+ printf("pxe_open: servip: %s\n", inet_ntoa(servip));
if (netproto == NET_TFTP) {
setenv("boot.tftproot.server", inet_ntoa(rootip), 1);
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Fri, Dec 20, 11:10 AM (1 h, 10 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
15529719
Default Alt Text
D9847.id26089.diff (2 KB)
Attached To
Mode
D9847: Try to extract the RFC1048 data from PXE
Attached
Detach File
Event Timeline
Log In to Comment