diff options
author | David Gibson <david@gibson.dropbear.id.au> | 2024-02-28 16:39:25 +1100 |
---|---|---|
committer | Stefano Brivio <sbrivio@redhat.com> | 2024-02-29 05:40:46 +0100 |
commit | 720d777a699546f8caaed548d25d419e5f899c2f (patch) | |
tree | 3546457b1782d31052d7e70e420cac47693cb49b | |
parent | bee61dd7d064cfe1759e665f560bff52f463275e (diff) | |
download | passt-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.c | 1 |
1 files changed, 0 insertions, 1 deletions
@@ -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; |