aboutsummaryrefslogtreecommitdiff
path: root/src/socket.c
diff options
context:
space:
mode:
authorSamuel Thibault <samuel.thibault@ens-lyon.org>2019-10-13 20:27:19 +0200
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2019-10-13 20:27:26 +0200
commit4657a267ebfc30ceca45f82a281f405a09870b4e (patch)
tree23ddb5d119fd5a3db090d2379ec90e7300657bc7 /src/socket.c
parentad36c04a3ef961a2dbb6dc78dd5322318a7f10b6 (diff)
downloadslirp-4657a267ebfc30ceca45f82a281f405a09870b4e.zip
slirp-4657a267ebfc30ceca45f82a281f405a09870b4e.tar.gz
slirp-4657a267ebfc30ceca45f82a281f405a09870b4e.tar.bz2
Make host receive broadcast packets
This is needed for using an external DHCP server Fixes #9
Diffstat (limited to 'src/socket.c')
-rw-r--r--src/socket.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/socket.c b/src/socket.c
index d96d8c4..f9ef0d5 100644
--- a/src/socket.c
+++ b/src/socket.c
@@ -844,6 +844,9 @@ int sotranslate_out(struct socket *so, struct sockaddr_storage *addr)
} else {
sin->sin_addr = loopback_addr;
}
+ } else if (!slirp->disable_host_loopback && so->so_faddr.s_addr == 0xffffffff) {
+ /* Receive broadcast as well */
+ sin->sin_addr = loopback_addr;
}
break;
case AF_INET6:
@@ -863,6 +866,9 @@ int sotranslate_out(struct socket *so, struct sockaddr_storage *addr)
} else {
sin6->sin6_addr = in6addr_loopback;
}
+ } else if (!slirp->disable_host_loopback
+ && in6_equal(&so->so_faddr6, &(struct in6_addr) ALLNODES_MULTICAST)) {
+ sin6->sin6_addr = in6addr_loopback;
}
break;