aboutgitcodebugslistschat
diff options
context:
space:
mode:
authorLaurent Vivier <lvivier@redhat.com>2024-08-02 18:10:35 +0200
committerStefano Brivio <sbrivio@redhat.com>2024-08-05 17:37:53 +0200
commit623ceb1f2b9051e3c6b34c99463a22a558b74674 (patch)
tree301c897be9c7fb457d893bbd85a70f70decb90ef
parenta5bbefa6fb799ba009b9704bb440e22778cd5d51 (diff)
downloadpasst-623ceb1f2b9051e3c6b34c99463a22a558b74674.tar
passt-623ceb1f2b9051e3c6b34c99463a22a558b74674.tar.gz
passt-623ceb1f2b9051e3c6b34c99463a22a558b74674.tar.bz2
passt-623ceb1f2b9051e3c6b34c99463a22a558b74674.tar.lz
passt-623ceb1f2b9051e3c6b34c99463a22a558b74674.tar.xz
passt-623ceb1f2b9051e3c6b34c99463a22a558b74674.tar.zst
passt-623ceb1f2b9051e3c6b34c99463a22a558b74674.zip
udp_flow: Remove udp_meta_t from the parameters of udp_flow_from_sock()
To be used with the vhost-user version of udp.c, we need to export the udp_flow functions. To avoid to export udp_meta_t too that is specific to the socket version of udp.c, don't pass udp_meta_t to it, but the only needed field, s_in. Signed-off-by: Laurent Vivier <lvivier@redhat.com> Reviewed-by: David Gibson <david@gibson.dropbear.id.au> Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
-rw-r--r--udp.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/udp.c b/udp.c
index a920148..f27a00b 100644
--- a/udp.c
+++ b/udp.c
@@ -432,7 +432,7 @@ cancel:
* udp_flow_from_sock() - Find or create UDP flow for "listening" socket
* @c: Execution context
* @ref: epoll reference of the receiving socket
- * @meta: Metadata buffer for the datagram
+ * @s_in: Source socket address, filled in by recvmmsg()
* @now: Timestamp
*
* #syscalls fcntl
@@ -441,7 +441,7 @@ cancel:
* FLOW_SIDX_NONE if we couldn't find or create a flow.
*/
static flow_sidx_t udp_flow_from_sock(const struct ctx *c, union epoll_ref ref,
- struct udp_meta_t *meta,
+ const union sockaddr_inany *s_in,
const struct timespec *now)
{
struct udp_flow *uflow;
@@ -450,7 +450,7 @@ static flow_sidx_t udp_flow_from_sock(const struct ctx *c, union epoll_ref ref,
ASSERT(ref.type == EPOLL_TYPE_UDP_LISTEN);
- sidx = flow_lookup_sa(c, IPPROTO_UDP, ref.udp.pif, &meta->s_in, ref.udp.port);
+ sidx = flow_lookup_sa(c, IPPROTO_UDP, ref.udp.pif, s_in, ref.udp.port);
if ((uflow = udp_at_sidx(sidx))) {
uflow->ts = now->tv_sec;
return flow_sidx_opposite(sidx);
@@ -461,11 +461,11 @@ static flow_sidx_t udp_flow_from_sock(const struct ctx *c, union epoll_ref ref,
debug("Couldn't allocate flow for UDP datagram from %s %s",
pif_name(ref.udp.pif),
- sockaddr_ntop(&meta->s_in, sastr, sizeof(sastr)));
+ sockaddr_ntop(s_in, sastr, sizeof(sastr)));
return FLOW_SIDX_NONE;
}
- flow_initiate_sa(flow, ref.udp.pif, &meta->s_in, ref.udp.port);
+ flow_initiate_sa(flow, ref.udp.pif, s_in, ref.udp.port);
return udp_flow_new(c, flow, ref.fd, now);
}
@@ -712,7 +712,7 @@ void udp_listen_sock_handler(const struct ctx *c, union epoll_ref ref,
* the array, or recalculating tosidx for a single entry, we have to
* populate it one entry *ahead* of the loop counter.
*/
- udp_meta[0].tosidx = udp_flow_from_sock(c, ref, &udp_meta[0], now);
+ udp_meta[0].tosidx = udp_flow_from_sock(c, ref, &udp_meta[0].s_in, now);
for (i = 0; i < n; ) {
flow_sidx_t batchsidx = udp_meta[i].tosidx;
uint8_t batchpif = pif_at_sidx(batchsidx);
@@ -730,7 +730,7 @@ void udp_listen_sock_handler(const struct ctx *c, union epoll_ref ref,
break;
udp_meta[i].tosidx = udp_flow_from_sock(c, ref,
- &udp_meta[i],
+ &udp_meta[i].s_in,
now);
} while (flow_sidx_eq(udp_meta[i].tosidx, batchsidx));