aboutgitcodebugslistschat
path: root/tcp.c
diff options
context:
space:
mode:
authorStefano Brivio <sbrivio@redhat.com>2021-08-28 03:19:25 +0200
committerStefano Brivio <sbrivio@redhat.com>2021-09-01 17:00:27 +0200
commit647a41379402cf0fae495f1be5d15d0ca8ed1e16 (patch)
tree328021386ed7887ef160dd0ad36fe37ef339e970 /tcp.c
parentf29c48db6b3d1e9e3efde1402ebd1e57dd7f802e (diff)
downloadpasst-647a41379402cf0fae495f1be5d15d0ca8ed1e16.tar
passt-647a41379402cf0fae495f1be5d15d0ca8ed1e16.tar.gz
passt-647a41379402cf0fae495f1be5d15d0ca8ed1e16.tar.bz2
passt-647a41379402cf0fae495f1be5d15d0ca8ed1e16.tar.lz
passt-647a41379402cf0fae495f1be5d15d0ca8ed1e16.tar.xz
passt-647a41379402cf0fae495f1be5d15d0ca8ed1e16.tar.zst
passt-647a41379402cf0fae495f1be5d15d0ca8ed1e16.zip
tcp, udp: Restore usage of gateway for guest to connect to local host
This went lost in a recent rework: if the guest wants to connect directly to the host, it can use the address of the default gateway. Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
Diffstat (limited to 'tcp.c')
-rw-r--r--tcp.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/tcp.c b/tcp.c
index eb83cc4..8aa9740 100644
--- a/tcp.c
+++ b/tcp.c
@@ -1387,6 +1387,11 @@ static void tcp_conn_from_tap(struct ctx *c, int af, void *addr,
if (s < 0)
return;
+ if (af == AF_INET && addr4.sin_addr.s_addr == c->gw4)
+ addr4.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
+ else if (af == AF_INET6 && !memcmp(addr, &c->gw6, sizeof(c->gw6)))
+ addr6.sin6_addr = in6addr_loopback;
+
if (af == AF_INET6 && IN6_IS_ADDR_LINKLOCAL(&addr6.sin6_addr)) {
struct sockaddr_in6 addr6_ll = {
.sin6_family = AF_INET6,