summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLeonardo Bras2022-08-04 09:10:43 +0200
committerDaniel P. Berrangé2022-08-05 17:18:15 +0200
commit5258a7e2c0677d16e9e1d06845f60171adf0b290 (patch)
tree4fe97248d4ebf4d2fa9de618b74301f35957b758
parentdocs: build-platforms: Clarify stance on minor releases and backports (diff)
downloadqemu-5258a7e2c0677d16e9e1d06845f60171adf0b290.tar.gz
qemu-5258a7e2c0677d16e9e1d06845f60171adf0b290.tar.xz
qemu-5258a7e2c0677d16e9e1d06845f60171adf0b290.zip
QIOChannelSocket: Add support for MSG_ZEROCOPY + IPV6
For using MSG_ZEROCOPY, there are two steps: 1 - io_writev() the packet, which enqueues the packet for sending, and 2 - io_flush(), which gets confirmation that all packets got correctly sent Currently, if MSG_ZEROCOPY is used to send packets over IPV6, no error will be reported in (1), but it will fail in the first time (2) happens. This happens because (2) currently checks for cmsg_level & cmsg_type associated with IPV4 only, before reporting any error. Add checks for cmsg_level & cmsg_type associated with IPV6, and thus enable support for MSG_ZEROCOPY + IPV6 Fixes: 2bc58ffc29 ("QIOChannelSocket: Implement io_writev zero copy flag & io_flush for CONFIG_LINUX") Signed-off-by: Leonardo Bras <leobras@redhat.com> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
-rw-r--r--io/channel-socket.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/io/channel-socket.c b/io/channel-socket.c
index 74a936cc1f..b76dca9cc1 100644
--- a/io/channel-socket.c
+++ b/io/channel-socket.c
@@ -746,8 +746,8 @@ static int qio_channel_socket_flush(QIOChannel *ioc,
}
cm = CMSG_FIRSTHDR(&msg);
- if (cm->cmsg_level != SOL_IP &&
- cm->cmsg_type != IP_RECVERR) {
+ if (cm->cmsg_level != SOL_IP && cm->cmsg_type != IP_RECVERR &&
+ cm->cmsg_level != SOL_IPV6 && cm->cmsg_type != IPV6_RECVERR) {
error_setg_errno(errp, EPROTOTYPE,
"Wrong cmsg in errqueue");
return -1;