diff options
author | Toomas Soome <tsoome@me.com> | 2016-10-09 17:30:28 +0300 |
---|---|---|
committer | Richard Lowe <richlowe@richlowe.net> | 2017-08-30 14:18:41 -0400 |
commit | f9feecc12f00b97b49d542398fb3b5a452da0bbc (patch) | |
tree | 8af199520a67a45cc90e9161e09f52aa7e7e2c71 /usr/src/boot/lib/libstand/bootp.c | |
parent | a058d1cc571af5fbcfe7f1d719df1abbfdb722f3 (diff) | |
download | illumos-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.c | 13 |
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) |