This series introduces iov_tail to convey frame information between functions. This is only an API change, for the moment the memory pool is only able to store contiguous buffer, so, except for vhost-user in a special case, we only play with iovec array with only one entry. Laurent Vivier (20): arp: Don't mix incoming and outgoing buffers iov: Introduce iov_slice(), iov_tail_slice() and iov_tail_drop(). iov: Update IOV_REMOVE_HEADER() and IOV_PEEK_HEADER() tap: Use iov_tail with tap_add_packet() packet: Use iov_tail with packet_add() packet: Add packet_data() arp: Convert to iov_tail ndp: Convert to iov_tail icmp: Convert to iov_tail udp: Convert to iov_tail tcp: Convert tcp_tap_handler() to use iov_tail tcp: Convert tcp_data_from_tap() to use iov_tail dhcpv6: move offset initialization out of dhcpv6_opt() dhcpv6: Extract sending of NotOnLink status dhcpv6: Convert to iov_tail dhcpv6: Use iov_tail in dhcpv6_opt() dhcp: Convert to iov_tail ip: Use iov_tail in ipv6_l4hdr() tap: Convert tap4_handler() to iov_tail tap: Convert tap6_handler() to iov_tail arp.c | 90 ++++++++++++++------- dhcp.c | 45 ++++++----- dhcpv6.c | 222 ++++++++++++++++++++++++++++++++-------------------- icmp.c | 25 +++--- iov.c | 165 +++++++++++++++++++++++++++++++++++--- iov.h | 61 +++++++++++---- ip.c | 27 +++---- ip.h | 3 +- ndp.c | 7 +- packet.c | 84 ++++++++------------ packet.h | 21 ++--- pcap.c | 1 + tap.c | 88 ++++++++++++++------- tap.h | 3 +- tcp.c | 61 ++++++++++----- tcp_buf.c | 2 +- udp.c | 34 +++++--- vu_common.c | 26 ++---- 18 files changed, 634 insertions(+), 331 deletions(-) -- 2.49.0