diff options
author | David Gibson <david@gibson.dropbear.id.au> | 2022-07-22 15:31:17 +1000 |
---|---|---|
committer | Stefano Brivio <sbrivio@redhat.com> | 2022-07-30 22:12:50 +0200 |
commit | 5e12d23acbda8871848c6221a4f14e5b7daff66f (patch) | |
tree | 7f171e09937df535be0dc2c78c097b9681ffdf68 /tcp.c | |
parent | c984ee5afdd84098fc103e110f4501d0ea196fe8 (diff) | |
download | passt-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.c | 20 |
1 files changed, 10 insertions, 10 deletions
@@ -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); |