Added broadcast IP address and server name "slirp" to DHCP reply.

TODO: port more features from the Bochs 'vnet' DHCP server to Slirp.
This commit is contained in:
Volker Ruppert 2014-03-26 17:01:07 +00:00
parent ae936e086f
commit 5257e253ae

View File

@ -152,7 +152,7 @@ static void bootp_reply(Slirp *slirp, const struct bootp_t *bp)
struct mbuf *m;
struct bootp_t *rbp;
struct sockaddr_in saddr, daddr;
struct in_addr preq_addr;
struct in_addr preq_addr, bcast_addr;
int dhcp_msg_type, val;
uint8_t *q;
uint8_t client_ethaddr[ETH_ALEN];
@ -258,6 +258,8 @@ static void bootp_reply(Slirp *slirp, const struct bootp_t *bp)
snprintf((char *)rbp->bp_file, sizeof(rbp->bp_file), "%s",
slirp->bootp_filename);
strcpy((char *)rbp->bp_sname, "slirp");
*q++ = RFC2132_SRV_ID;
*q++ = 4;
memcpy(q, &saddr.sin_addr, 4);
@ -268,6 +270,12 @@ static void bootp_reply(Slirp *slirp, const struct bootp_t *bp)
memcpy(q, &slirp->vnetwork_mask, 4);
q += 4;
*q++ = RFC1533_INTBROADCAST;
*q++ = 4;
bcast_addr.s_addr = slirp->vhost_addr.s_addr | ~slirp->vnetwork_mask.s_addr;
memcpy(q, &bcast_addr, 4);
q += 4;
if (!slirp->restricted) {
*q++ = RFC1533_GATEWAY;
*q++ = 4;