This is the TCP counterpart to the UDP multi-iov series. It converts the TCP vhost-user receive path from direct pointer arithmetic (via vu_eth(), vu_ip(), etc.) to the iov_tail abstraction, removing the assumption that all headers reside in a single contiguous buffer. With this series applied, the TCP path correctly handles virtio-net drivers that provide multiple buffers per virtqueue element (e.g. iPXE provides the vnet header in the first buffer and the frame payload in a second one), matching the support already present in the UDP path. Based-on: 20260323143151.538673-1-lvivier@redhat.com Laurent Vivier (7): tcp: pass ipv4h checksum, not a pointer to the checksum tcp: use iov_tail to access headers in tcp_fill_headers() tcp_vu: Use iov_tail helpers to build headers in tcp_vu_prepare() tcp_vu: Support multibuffer frames in tcp_vu_sock_recv() tcp: Use iov_tail to access headers in tcp_prepare_flags() iov: introduce iov_memcopy() tcp_vu: Use iov_tail helpers to build headers in tcp_vu_send_flag() iov.c | 45 +++++++ iov.h | 2 + tcp.c | 180 ++++++++++++++----------- tcp_buf.c | 34 ++--- tcp_internal.h | 9 +- tcp_vu.c | 354 ++++++++++++++++++++++++++++--------------------- vu_common.h | 20 --- 7 files changed, 368 insertions(+), 276 deletions(-) -- 2.53.0