aboutgitcodebugslistschat
diff options
context:
space:
mode:
-rw-r--r--inany.c16
-rw-r--r--inany.h9
-rw-r--r--tcp.c4
-rw-r--r--udp.c8
4 files changed, 32 insertions, 5 deletions
diff --git a/inany.c b/inany.c
index edf0b05..c11e2aa 100644
--- a/inany.c
+++ b/inany.c
@@ -16,6 +16,22 @@
#include "siphash.h"
#include "inany.h"
+const union inany_addr inany_loopback4 = {
+ .v4mapped = {
+ .zero = { 0 },
+ .one = { 0xff, 0xff, },
+ .a4 = IN4ADDR_LOOPBACK_INIT,
+ },
+};
+
+const union inany_addr inany_any4 = {
+ .v4mapped = {
+ .zero = { 0 },
+ .one = { 0xff, 0xff, },
+ .a4 = IN4ADDR_ANY_INIT,
+ },
+};
+
/** inany_ntop - Convert an IPv[46] address to text format
* @src: IPv[46] address
* @dst: output buffer, minimum INANY_ADDRSTRLEN bytes
diff --git a/inany.h b/inany.h
index be8b8da..84e82b0 100644
--- a/inany.h
+++ b/inany.h
@@ -32,6 +32,15 @@ static_assert(sizeof(union inany_addr) == sizeof(struct in6_addr),
static_assert(_Alignof(union inany_addr) == _Alignof(uint32_t),
"union inany_addr has unexpected alignment");
+#define inany_loopback6 (*(const union inany_addr *)(&in6addr_loopback))
+extern const union inany_addr inany_loopback4;
+
+#define inany_any6 (*(const union inany_addr *)(&in6addr_any))
+extern const union inany_addr inany_any4;
+
+#define in4addr_loopback (inany_loopback4.v4mapped.a4)
+#define in4addr_any (inany_any4.v4mapped.a4)
+
/** inany_v4 - Extract IPv4 address, if present, from IPv[46] address
* @addr: IPv4 or IPv6 address
*
diff --git a/tcp.c b/tcp.c
index 7be8355..dbe787b 100644
--- a/tcp.c
+++ b/tcp.c
@@ -2949,12 +2949,12 @@ static void tcp_ns_sock_init4(const struct ctx *c, in_port_t port)
.port = port + c->tcp.fwd_out.delta[port],
.pif = PIF_SPLICE,
};
- struct in_addr loopback = IN4ADDR_LOOPBACK_INIT;
int s;
ASSERT(c->mode == MODE_PASTA);
- s = sock_l4(c, AF_INET, IPPROTO_TCP, &loopback, NULL, port, tref.u32);
+ s = sock_l4(c, AF_INET, IPPROTO_TCP, &in4addr_loopback, NULL, port,
+ tref.u32);
if (s >= 0)
tcp_sock_set_bufsize(c, s);
else
diff --git a/udp.c b/udp.c
index 5b7778e..de25eb0 100644
--- a/udp.c
+++ b/udp.c
@@ -96,6 +96,7 @@
#include <stdio.h>
#include <errno.h>
#include <limits.h>
+#include <assert.h>
#include <net/ethernet.h>
#include <net/if.h>
#include <netinet/in.h>
@@ -112,6 +113,8 @@
#include "checksum.h"
#include "util.h"
+#include "siphash.h"
+#include "inany.h"
#include "passt.h"
#include "tap.h"
#include "pcap.h"
@@ -1017,9 +1020,8 @@ int udp_sock_init(const struct ctx *c, int ns, sa_family_t af,
udp_tap_map[V4][uref.port].sock = s < 0 ? -1 : s;
udp_splice_init[V4][port].sock = s < 0 ? -1 : s;
} else {
- struct in_addr loopback = IN4ADDR_LOOPBACK_INIT;
-
- r4 = s = sock_l4(c, AF_INET, IPPROTO_UDP, &loopback,
+ r4 = s = sock_l4(c, AF_INET, IPPROTO_UDP,
+ &in4addr_loopback,
ifname, port, uref.u32);
udp_splice_ns[V4][port].sock = s < 0 ? -1 : s;
}