aboutgitcodebugslistschat
path: root/tap.h
diff options
context:
space:
mode:
authorDavid Gibson <david@gibson.dropbear.id.au>2024-05-01 18:31:05 +1000
committerStefano Brivio <sbrivio@redhat.com>2024-05-02 16:13:38 +0200
commit3f9bd867b58513da50d79e039fb88c7fd332408e (patch)
tree3fe0a6892f1a8e4a5f7c1f540cbd5c5a4289f4ab /tap.h
parentfcd930885658c2149551c7dbfb2479c179c7990f (diff)
downloadpasst-3f9bd867b58513da50d79e039fb88c7fd332408e.tar
passt-3f9bd867b58513da50d79e039fb88c7fd332408e.tar.gz
passt-3f9bd867b58513da50d79e039fb88c7fd332408e.tar.bz2
passt-3f9bd867b58513da50d79e039fb88c7fd332408e.tar.lz
passt-3f9bd867b58513da50d79e039fb88c7fd332408e.tar.xz
passt-3f9bd867b58513da50d79e039fb88c7fd332408e.tar.zst
passt-3f9bd867b58513da50d79e039fb88c7fd332408e.zip
udp: Split tap-bound UDP packets into multiple buffers using io vector
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 <david@gibson.dropbear.id.au> Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
Diffstat (limited to 'tap.h')
-rw-r--r--tap.h38
1 files changed, 0 insertions, 38 deletions
diff --git a/tap.h b/tap.h
index 9216d5a..d146d2f 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
- * @l2len: 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 l2len)
-{
- if (c->mode == MODE_PASST)
- taph->vnet_len = htonl(l2len);
- return l2len + 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,