summaryrefslogtreecommitdiffstats
path: root/slirp/socket.c
diff options
context:
space:
mode:
authorGuillaume Subiron <maethor@subiron.org>2015-12-19 22:25:01 +0100
committerTimothy Pearson <tpearson@raptorengineering.com>2019-11-29 19:31:26 -0600
commit7d18427c6fff49780df689c26cbfc42e1423d2bd (patch)
tree7a6cacf30db08eb38a274b985989f312c48f1cd7 /slirp/socket.c
parentfa495b8c4e3d773db07b37a06ee04382d31282cc (diff)
downloadhqemu-7d18427c6fff49780df689c26cbfc42e1423d2bd.zip
hqemu-7d18427c6fff49780df689c26cbfc42e1423d2bd.tar.gz
slirp: Add sockaddr_equal, make solookup family-agnostic
This patch makes solookup() compatible with varying address families, by using a new sockaddr_equal() function that compares two sockaddr_storage. This prepares for IPv6 support. Signed-off-by: Guillaume Subiron <maethor@subiron.org> Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org> Reviewed-by: Thomas Huth <thuth@redhat.com> Signed-off-by: Jason Wang <jasowang@redhat.com>
Diffstat (limited to 'slirp/socket.c')
-rw-r--r--slirp/socket.c21
1 files changed, 6 insertions, 15 deletions
diff --git a/slirp/socket.c b/slirp/socket.c
index 8f73e90..f7e5968 100644
--- a/slirp/socket.c
+++ b/slirp/socket.c
@@ -15,29 +15,20 @@
static void sofcantrcvmore(struct socket *so);
static void sofcantsendmore(struct socket *so);
-struct socket *
-solookup(struct socket **last, struct socket *head,
- struct in_addr laddr, u_int lport,
- struct in_addr faddr, u_int fport)
+struct socket *solookup(struct socket **last, struct socket *head,
+ struct sockaddr_storage *lhost, struct sockaddr_storage *fhost)
{
struct socket *so = *last;
/* Optimisation */
- if (so != head &&
- so->so_lport == lport &&
- so->so_laddr.s_addr == laddr.s_addr &&
- (!faddr.s_addr ||
- (so->so_faddr.s_addr == faddr.s_addr &&
- so->so_fport == fport))) {
+ if (so != head && sockaddr_equal(&(so->lhost.ss), lhost)
+ && (!fhost || sockaddr_equal(&so->fhost.ss, fhost))) {
return so;
}
for (so = head->so_next; so != head; so = so->so_next) {
- if (so->so_lport == lport &&
- so->so_laddr.s_addr == laddr.s_addr &&
- (!faddr.s_addr ||
- (so->so_faddr.s_addr == faddr.s_addr &&
- so->so_fport == fport))) {
+ if (sockaddr_equal(&(so->lhost.ss), lhost)
+ && (!fhost || sockaddr_equal(&so->fhost.ss, fhost))) {
*last = so;
return so;
}
OpenPOWER on IntegriCloud