aboutgitcodebugslistschat
diff options
context:
space:
mode:
authorDavid Gibson <david@gibson.dropbear.id.au>2024-02-28 16:39:25 +1100
committerStefano Brivio <sbrivio@redhat.com>2024-02-29 05:40:46 +0100
commit720d777a699546f8caaed548d25d419e5f899c2f (patch)
tree3546457b1782d31052d7e70e420cac47693cb49b
parentbee61dd7d064cfe1759e665f560bff52f463275e (diff)
downloadpasst-720d777a699546f8caaed548d25d419e5f899c2f.tar
passt-720d777a699546f8caaed548d25d419e5f899c2f.tar.gz
passt-720d777a699546f8caaed548d25d419e5f899c2f.tar.bz2
passt-720d777a699546f8caaed548d25d419e5f899c2f.tar.lz
passt-720d777a699546f8caaed548d25d419e5f899c2f.tar.xz
passt-720d777a699546f8caaed548d25d419e5f899c2f.tar.zst
passt-720d777a699546f8caaed548d25d419e5f899c2f.zip
udp: Don't attempt to translate a 0.0.0.0 source address
If an incoming packet has a source address of 0.0.0.0 we translate that to the gateway address. This doesn't really make sense, because we have no way to do a reverse translation for reply packets. Certain UDP protocols do use an unspecified source address in some circumstances (e.g. DHCP). These generally either require no reply, a multicast reply, or provide a suitable reply address by other means. In none of those cases does translating it in passt/pasta make sense. The best we can really do here is just leave it as is. Signed-off-by: David Gibson <david@gibson.dropbear.id.au> Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
-rw-r--r--udp.c1
1 files changed, 0 insertions, 1 deletions
diff --git a/udp.c b/udp.c
index b19e76d..3d44f81 100644
--- a/udp.c
+++ b/udp.c
@@ -599,7 +599,6 @@ static size_t udp_update_hdr4(const struct ctx *c, int n, in_port_t dstport,
src_port == 53) {
b->iph.saddr = c->ip4.dns_match.s_addr;
} else if (IN4_IS_ADDR_LOOPBACK(&b->s_in.sin_addr) ||
- IN4_IS_ADDR_UNSPECIFIED(&b->s_in.sin_addr)||
IN4_ARE_ADDR_EQUAL(&b->s_in.sin_addr, &c->ip4.addr_seen)) {
b->iph.saddr = c->ip4.gw.s_addr;
udp_tap_map[V4][src_port].ts = now->tv_sec;