udp: Move management of udp[46]_localname into udp_splice_send()
Mostly, udp_sock_handler() is independent of how the datagrams it processes will be forwarded (tap or splice). However, it also updates the msg_name fields for spliced sends, which doesn't really make sense here. Move it into udp_splice_send() which is all about spliced sends. This does potentially mean we'll update the field to the same value several times, but we're going to need this in future anyway: with the extensions the flow table allows, it might not be the same value each time after all. Signed-off-by: David Gibson <david@gibson.dropbear.id.au> Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
This commit is contained in:
parent
ff57f8ddc6
commit
7e87bd98ac
1 changed files with 4 additions and 5 deletions
9
udp.c
9
udp.c
|
@ -522,9 +522,11 @@ static unsigned udp_splice_send(const struct ctx *c, size_t start, size_t n,
|
||||||
if (uref.v6) {
|
if (uref.v6) {
|
||||||
mmh_recv = udp6_l2_mh_sock;
|
mmh_recv = udp6_l2_mh_sock;
|
||||||
mmh_send = udp6_mh_splice;
|
mmh_send = udp6_mh_splice;
|
||||||
|
udp6_localname.sin6_port = htons(dst);
|
||||||
} else {
|
} else {
|
||||||
mmh_recv = udp4_l2_mh_sock;
|
mmh_recv = udp4_l2_mh_sock;
|
||||||
mmh_send = udp4_mh_splice;
|
mmh_send = udp4_mh_splice;
|
||||||
|
udp4_localname.sin_port = htons(dst);
|
||||||
}
|
}
|
||||||
|
|
||||||
do {
|
do {
|
||||||
|
@ -796,13 +798,10 @@ void udp_buf_sock_handler(const struct ctx *c, union epoll_ref ref, uint32_t eve
|
||||||
else if (ref.udp.pif == PIF_HOST)
|
else if (ref.udp.pif == PIF_HOST)
|
||||||
dstport += c->udp.fwd_in.f.delta[dstport];
|
dstport += c->udp.fwd_in.f.delta[dstport];
|
||||||
|
|
||||||
if (v6) {
|
if (v6)
|
||||||
mmh_recv = udp6_l2_mh_sock;
|
mmh_recv = udp6_l2_mh_sock;
|
||||||
udp6_localname.sin6_port = htons(dstport);
|
else
|
||||||
} else {
|
|
||||||
mmh_recv = udp4_l2_mh_sock;
|
mmh_recv = udp4_l2_mh_sock;
|
||||||
udp4_localname.sin_port = htons(dstport);
|
|
||||||
}
|
|
||||||
|
|
||||||
n = recvmmsg(ref.fd, mmh_recv, n, 0, NULL);
|
n = recvmmsg(ref.fd, mmh_recv, n, 0, NULL);
|
||||||
if (n <= 0)
|
if (n <= 0)
|
||||||
|
|
Loading…
Reference in a new issue