aboutsummaryrefslogtreecommitdiff
path: root/slirp/bootp.c
diff options
context:
space:
mode:
Diffstat (limited to 'slirp/bootp.c')
-rw-r--r--slirp/bootp.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/slirp/bootp.c b/slirp/bootp.c
index 30cb05e956..8ae68af466 100644
--- a/slirp/bootp.c
+++ b/slirp/bootp.c
@@ -150,6 +150,7 @@ static void bootp_reply(struct bootp_t *bp)
memset(rbp, 0, sizeof(struct bootp_t));
if (dhcp_msg_type == DHCPDISCOVER) {
+ new_addr:
bc = get_new_addr(&daddr.sin_addr);
if (!bc) {
dprintf("no address left\n");
@@ -159,8 +160,9 @@ static void bootp_reply(struct bootp_t *bp)
} else {
bc = find_addr(&daddr.sin_addr, bp->bp_hwaddr);
if (!bc) {
- dprintf("no address assigned\n");
- return;
+ /* if never assigned, behaves as if it was already
+ assigned (windows fix because it remembers its address) */
+ goto new_addr;
}
}
dprintf("offered addr=%08x\n", ntohl(daddr.sin_addr.s_addr));