On Tue, Apr 30, 2024 at 10:15:34PM +0200, Stefano Brivio wrote: > On Tue, 30 Apr 2024 20:05:36 +1000 > David Gibson wrote: > > > When sending to the tap device, currently we assemble the headers and > > payload into a single contiguous buffer. Those are described by a single > > struct iovec, then a batch of frames is sent to the device with > > tap_send_frames(). > > > > In order to better integrate the IPv4 and IPv6 paths, we want the IP > > header in a different buffer that might not be contiguous with the > > payload. To prepare for that, split the UDP packet into an iovec of > > buffers. We use the same split that Laurent recently introduced for > > TCP for convenience. > > > > This removes the last use of tap_hdr_len_(), tap_frame_base() and > > tap_frame_len(), so remove those too. > > > > Signed-off-by: David Gibson > > --- > > tap.h | 38 ------------------------------ > > udp.c | 74 +++++++++++++++++++++++++++++++++++++++-------------------- > > 2 files changed, 49 insertions(+), 63 deletions(-) > > > > diff --git a/tap.h b/tap.h > > index 75aa3f03..754703d2 100644 > > --- a/tap.h > > +++ b/tap.h > > @@ -43,44 +43,6 @@ static inline void tap_hdr_update(struct tap_hdr *thdr, size_t l2len) > > thdr->vnet_len = htonl(l2len); > > } > > > > -static inline size_t tap_hdr_len_(const struct ctx *c) > > -{ > > - if (c->mode == MODE_PASST) > > - return sizeof(struct tap_hdr); > > - else > > - return 0; > > -} > > - > > -/** > > - * tap_frame_base() - Find start of tap frame > > - * @c: Execution context > > - * @taph: Pointer to tap specific header buffer > > - * > > - * Returns: pointer to the start of tap frame - suitable for an > > - * iov_base to be passed to tap_send_frames()) > > - */ > > -static inline void *tap_frame_base(const struct ctx *c, struct tap_hdr *taph) > > -{ > > - return (char *)(taph + 1) - tap_hdr_len_(c); > > -} > > - > > -/** > > - * tap_frame_len() - Finalize tap frame and return total length > > - * @c: Execution context > > - * @taph: Tap header to finalize > > - * @plen: L2 packet length (includes L2, excludes tap specific headers) > > - * > > - * Returns: length of the tap frame including tap specific headers - suitable > > - * for an iov_len to be passed to tap_send_frames() > > - */ > > -static inline size_t tap_frame_len(const struct ctx *c, struct tap_hdr *taph, > > - size_t plen) > > -{ > > - if (c->mode == MODE_PASST) > > - taph->vnet_len = htonl(plen); > > - return plen + tap_hdr_len_(c); > > -} > > - > > struct in_addr tap_ip4_daddr(const struct ctx *c); > > void tap_udp4_send(const struct ctx *c, struct in_addr src, in_port_t sport, > > struct in_addr dst, in_port_t dport, > > diff --git a/udp.c b/udp.c > > index 545212c5..4650b366 100644 > > --- a/udp.c > > +++ b/udp.c > > @@ -222,12 +222,28 @@ struct udp6_l2_buf_t { > > #endif > > udp6_l2_buf[UDP_MAX_FRAMES]; > > > > +/** > > + * enum udp_iov_idx - Indices for the buffers making up a single UDP frame > > + * @UDP_IOV_TAP TAP specific header > > Nits: s/TAP/tap/ and > > > + * @UDP_IOV_ETH ethernet header > > s/ethernet/Ethernet. Amended, thanks. -- David Gibson | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_ | _way_ _around_! http://www.ozlabs.org/~dgibson