aboutgitcodebugslistschat
path: root/tcp.c
diff options
context:
space:
mode:
authorDavid Gibson <david@gibson.dropbear.id.au>2022-07-22 15:31:17 +1000
committerStefano Brivio <sbrivio@redhat.com>2022-07-30 22:12:50 +0200
commit5e12d23acbda8871848c6221a4f14e5b7daff66f (patch)
tree7f171e09937df535be0dc2c78c097b9681ffdf68 /tcp.c
parentc984ee5afdd84098fc103e110f4501d0ea196fe8 (diff)
downloadpasst-5e12d23acbda8871848c6221a4f14e5b7daff66f.tar
passt-5e12d23acbda8871848c6221a4f14e5b7daff66f.tar.gz
passt-5e12d23acbda8871848c6221a4f14e5b7daff66f.tar.bz2
passt-5e12d23acbda8871848c6221a4f14e5b7daff66f.tar.lz
passt-5e12d23acbda8871848c6221a4f14e5b7daff66f.tar.xz
passt-5e12d23acbda8871848c6221a4f14e5b7daff66f.tar.zst
passt-5e12d23acbda8871848c6221a4f14e5b7daff66f.zip
Separate IPv4 and IPv6 configuration
After recent changes, conf_ip() now has essentially entirely disjoint paths for IPv4 and IPv6 configuration. So, it's cleaner to split them out into different functions conf_ip4() and conf_ip6(). Splitting these out also lets us make the interface a bit nicer, having them return success or failure directly, rather than manipulating c->v4 and c->v6 to indicate success/failure of the two versions. Since these functions may also initialize the interface index for each protocol, it turns out we can then drop c->v4 and c->v6 entirely, replacing tests on those with tests on whether c->ifi4 or c->ifi6 is non-zero (since a 0 interface index is never valid). Signed-off-by: David Gibson <david@gibson.dropbear.id.au> [sbrivio: Whitespace fixes] Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
Diffstat (limited to 'tcp.c')
-rw-r--r--tcp.c20
1 files changed, 10 insertions, 10 deletions
diff --git a/tcp.c b/tcp.c
index 3b27f11..3382dfd 100644
--- a/tcp.c
+++ b/tcp.c
@@ -3252,7 +3252,7 @@ static int tcp_sock_refill(void *arg)
p6 = init_sock_pool6;
}
- for (i = 0; a->c->v4 && i < TCP_SOCK_POOL_SIZE; i++, p4++) {
+ for (i = 0; a->c->ifi4 && i < TCP_SOCK_POOL_SIZE; i++, p4++) {
if (*p4 >= 0)
break;
@@ -3267,7 +3267,7 @@ static int tcp_sock_refill(void *arg)
tcp_sock_set_bufsize(a->c, *p4);
}
- for (i = 0; a->c->v6 && i < TCP_SOCK_POOL_SIZE; i++, p6++) {
+ for (i = 0; a->c->ifi6 && i < TCP_SOCK_POOL_SIZE; i++, p6++) {
if (*p6 >= 0)
break;
@@ -3327,10 +3327,10 @@ int tcp_init(struct ctx *c)
for (i = 0; i < ARRAY_SIZE(tcp_l2_mh); i++)
tcp_l2_mh[i] = (struct mmsghdr) { .msg_hdr.msg_iovlen = 1 };
- if (c->v4)
+ if (c->ifi4)
tcp_sock4_iov_init();
- if (c->v6)
+ if (c->ifi6)
tcp_sock6_iov_init();
memset(init_sock_pool4, 0xff, sizeof(init_sock_pool4));
@@ -3431,8 +3431,8 @@ static int tcp_port_rebind(void *arg)
if (bitmap_isset(a->c->tcp.port_to_tap, port))
continue;
- if ((a->c->v4 && tcp_sock_ns[port][V4] == -1) ||
- (a->c->v6 && tcp_sock_ns[port][V6] == -1))
+ if ((a->c->ifi4 && tcp_sock_ns[port][V4] == -1) ||
+ (a->c->ifi6 && tcp_sock_ns[port][V6] == -1))
tcp_sock_init(a->c, 1, AF_UNSPEC, NULL, port);
}
} else {
@@ -3464,8 +3464,8 @@ static int tcp_port_rebind(void *arg)
if (bitmap_isset(a->c->tcp.port_to_init, port))
continue;
- if ((a->c->v4 && tcp_sock_init_ext[port][V4] == -1) ||
- (a->c->v6 && tcp_sock_init_ext[port][V6] == -1))
+ if ((a->c->ifi4 && tcp_sock_init_ext[port][V4] == -1) ||
+ (a->c->ifi6 && tcp_sock_init_ext[port][V6] == -1))
tcp_sock_init(a->c, 0, AF_UNSPEC, NULL, port);
}
}
@@ -3512,8 +3512,8 @@ void tcp_timer(struct ctx *c, const struct timespec *ts)
tcp_sock_refill(&refill_arg);
if (c->mode == MODE_PASTA) {
refill_arg.ns = 1;
- if ((c->v4 && ns_sock_pool4[TCP_SOCK_POOL_TSH] < 0) ||
- (c->v6 && ns_sock_pool6[TCP_SOCK_POOL_TSH] < 0))
+ if ((c->ifi4 && ns_sock_pool4[TCP_SOCK_POOL_TSH] < 0) ||
+ (c->ifi6 && ns_sock_pool6[TCP_SOCK_POOL_TSH] < 0))
NS_CALL(tcp_sock_refill, &refill_arg);
tcp_splice_timer(c);