X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=slirp%2Fbootp.c;h=b7db9fa3353093e5baa3d69d0431b4cff3046bfb;hb=80dfc87394ed10f47918299a5192f337a85333d8;hp=efd1fe777a3a774be93bb4d54941fd23e74af70b;hpb=dfa79e8acd0ffce337d78f3e1473647f1c38dc58;p=qemu.git diff --git a/slirp/bootp.c b/slirp/bootp.c index efd1fe777..b7db9fa33 100644 --- a/slirp/bootp.c +++ b/slirp/bootp.c @@ -200,7 +200,8 @@ static void bootp_reply(Slirp *slirp, const struct bootp_t *bp) daddr.sin_addr = preq_addr; memcpy(bc->macaddr, client_ethaddr, ETH_ALEN); } else { - daddr.sin_addr.s_addr = 0; + /* DHCPNAKs should be sent to broadcast */ + daddr.sin_addr.s_addr = 0xffffffff; } } else { bc = find_addr(slirp, &daddr.sin_addr, bp->bp_hwaddr); @@ -286,6 +287,18 @@ static void bootp_reply(Slirp *slirp, const struct bootp_t *bp) memcpy(q, slirp->client_hostname, val); q += val; } + + if (slirp->vdnssearch) { + size_t spaceleft = sizeof(rbp->bp_vend) - (q - rbp->bp_vend); + val = slirp->vdnssearch_len; + if (val + 1 > spaceleft) { + g_warning("DHCP packet size exceeded, " + "omitting domain-search option."); + } else { + memcpy(q, slirp->vdnssearch, val); + q += val; + } + } } else { static const char nak_msg[] = "requested address not available";