mirror of
https://passt.top/passt
synced 2025-05-22 17:25:35 +02:00
udp_vu: Factor things out of udp_vu_reply_sock_data() loop
At the start of every cycle of the loop in udp_vu_reply_sock_data() we: - ASSERT that uflow is not NULL - Check if the target pif is PIF_TAP - Initialize the v6 boolean However, all of these depend only on the flow, which doesn't change across the loop. This is probably a duplication from udp_vu_listen_sock_data(), where the flow can be different for each packet. For the reply socket case, however, factor that logic out of the loop. Signed-off-by: David Gibson <david@gibson.dropbear.id.au> Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
This commit is contained in:
parent
5a977c2f4e
commit
d924b7dfc4
1 changed files with 13 additions and 15 deletions
28
udp_vu.c
28
udp_vu.c
|
@ -281,30 +281,28 @@ void udp_vu_reply_sock_data(const struct ctx *c, union epoll_ref ref,
|
|||
{
|
||||
flow_sidx_t tosidx = flow_sidx_opposite(ref.flowside);
|
||||
const struct flowside *toside = flowside_at_sidx(tosidx);
|
||||
bool v6 = !(inany_v4(&toside->eaddr) && inany_v4(&toside->oaddr));
|
||||
struct udp_flow *uflow = udp_at_sidx(ref.flowside);
|
||||
int from_s = uflow->s[ref.flowside.sidei];
|
||||
struct vu_dev *vdev = c->vdev;
|
||||
struct vu_virtq *vq = &vdev->vq[VHOST_USER_RX_QUEUE];
|
||||
uint8_t topif = pif_at_sidx(tosidx);
|
||||
int i;
|
||||
|
||||
ASSERT(uflow);
|
||||
|
||||
if (topif != PIF_TAP) {
|
||||
uint8_t frompif = pif_at_sidx(ref.flowside);
|
||||
|
||||
flow_err(uflow,
|
||||
"No support for forwarding UDP from %s to %s",
|
||||
pif_name(frompif), pif_name(topif));
|
||||
return;
|
||||
}
|
||||
|
||||
for (i = 0; i < UDP_MAX_FRAMES; i++) {
|
||||
uint8_t topif = pif_at_sidx(tosidx);
|
||||
ssize_t dlen;
|
||||
int iov_used;
|
||||
bool v6;
|
||||
|
||||
ASSERT(uflow);
|
||||
|
||||
if (topif != PIF_TAP) {
|
||||
uint8_t frompif = pif_at_sidx(ref.flowside);
|
||||
|
||||
flow_err(uflow,
|
||||
"No support for forwarding UDP from %s to %s",
|
||||
pif_name(frompif), pif_name(topif));
|
||||
continue;
|
||||
}
|
||||
|
||||
v6 = !(inany_v4(&toside->eaddr) && inany_v4(&toside->oaddr));
|
||||
|
||||
iov_used = udp_vu_sock_recv(c, from_s, v6, &dlen);
|
||||
if (iov_used <= 0)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue