summaryrefslogtreecommitdiff
path: root/usr/src/boot/lib/libstand/bootp.c
diff options
context:
space:
mode:
authorToomas Soome <tsoome@me.com>2016-10-09 17:30:28 +0300
committerRichard Lowe <richlowe@richlowe.net>2017-08-30 14:18:41 -0400
commitf9feecc12f00b97b49d542398fb3b5a452da0bbc (patch)
tree8af199520a67a45cc90e9161e09f52aa7e7e2c71 /usr/src/boot/lib/libstand/bootp.c
parenta058d1cc571af5fbcfe7f1d719df1abbfdb722f3 (diff)
downloadillumos-joyent-f9feecc12f00b97b49d542398fb3b5a452da0bbc.tar.gz
8139 loader: efi multiboot2 update
Reviewed by: Robert Mustacchi <rm@joyent.com> Approved by: Richard Lowe <richlowe@richlowe.net>
Diffstat (limited to 'usr/src/boot/lib/libstand/bootp.c')
-rw-r--r--usr/src/boot/lib/libstand/bootp.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/usr/src/boot/lib/libstand/bootp.c b/usr/src/boot/lib/libstand/bootp.c
index 98ecb2750b..117229753c 100644
--- a/usr/src/boot/lib/libstand/bootp.c
+++ b/usr/src/boot/lib/libstand/bootp.c
@@ -88,6 +88,7 @@ static void setenv_(u_char *cp, u_char *ep, struct dhcp_opt *opts);
static char expected_dhcpmsgtype = -1, dhcp_ok;
struct in_addr dhcp_serverip;
#endif
+struct bootp *bootp_response;
/* Fetch required bootp infomation */
void
@@ -320,6 +321,18 @@ bootprecv(struct iodesc *d, void *pkt, size_t len, time_t tleft)
if (bcmp(vm_rfc1048, bp->bp_vend, sizeof(vm_rfc1048)) == 0) {
if(vend_rfc1048(bp->bp_vend, sizeof(bp->bp_vend)) != 0)
goto bad;
+
+ /* Save copy of bootp reply or DHCP ACK message */
+ if (bp->bp_op == BOOTREPLY &&
+ ((dhcp_ok == 1 && expected_dhcpmsgtype == DHCPACK) ||
+ dhcp_ok == 0)) {
+ free(bootp_response);
+ bootp_response = malloc(sizeof (*bootp_response));
+ if (bootp_response != NULL) {
+ bcopy(bp, bootp_response,
+ sizeof (*bootp_response));
+ }
+ }
}
#ifdef BOOTP_VEND_CMU
else if (bcmp(vm_cmu, bp->bp_vend, sizeof(vm_cmu)) == 0)