From dd581730e54b934f80d5b6a820136707dc71c664 Mon Sep 17 00:00:00 2001 From: Stefano Brivio Date: Sun, 26 Sep 2021 23:38:22 +0200 Subject: tap: Completely de-serialise input message batches Until now, messages would be passed to protocol handlers in a single batch only if they happened to be dequeued in a row. Packets interleaved between different connections would result in multiple calls to the same protocol handler for a single connection. Instead, keep track of incoming packet descriptors, arrange them in sequences, and call protocol handlers only as we completely sorted input messages in batches. Signed-off-by: Stefano Brivio --- passt.h | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) (limited to 'passt.h') diff --git a/passt.h b/passt.h index bb41e90..57b5c09 100644 --- a/passt.h +++ b/passt.h @@ -3,15 +3,21 @@ /** * struct tap_msg - Generic message descriptor for arrays of messages - * @start: Pointer to message start - * @l4_start: Pointer to L4 header - * @len: Message length, with L2 headers - * @l4_len: Message length, with L4 headers + * @pkt_buf_offset: Offset from @pkt_buf + * @len: Message length, with L2 headers */ struct tap_msg { - char *start; - char *l4h; + uint32_t pkt_buf_offset; uint16_t len; +}; + +/** + * struct tap_l4_msg - Layer-4 message descriptor for protocol handlers + * @pkt_buf_offset: Offset of message from @pkt_buf + * @l4_len: Length of Layer-4 payload, host order + */ +struct tap_l4_msg { + uint32_t pkt_buf_offset; uint16_t l4_len; }; -- cgit v1.2.3