From: David Gibson <david@gibson.dropbear.id.au>
To: Laurent Vivier <lvivier@redhat.com>
Cc: passt-dev@passt.top
Subject: Re: [PATCH v4 09/10] tcp: remove tap_hdr parameter
Date: Mon, 3 Jun 2024 14:12:51 +1000 [thread overview]
Message-ID: <Zl1CwxB0d630zLgQ@zatzit> (raw)
In-Reply-To: <20240531142344.1420034-10-lvivier@redhat.com>
[-- Attachment #1: Type: text/plain, Size: 6506 bytes --]
On Fri, May 31, 2024 at 04:23:43PM +0200, Laurent Vivier wrote:
> As tap_hdr is not used with vhost-user, remove it from tcp_fill_headers4()
> and tcp_fill_headers6()
So, this is kind of at odds with how I intended tap_hdr to work. The
idea was that it would cover any sort of specific headers we needed
for the tap backend. Currently that's either a length field (qemu
socket) or nothing (tuntap), but it could be other things if we need
them.
At the moment tap_hdr_update() fills in the vnet_len in all cases,
even MODE_PASTA, because my guess was that it's cheaper to do that
than to test the mode every time. If it matters we could make it do
nothing in both PASTA and VU modes, and that's more what I'd expect
rather than extracting it from the path here.
I don't know if VU mode has any use for some backend specific "header"
(would it make sense to put the descriptor ring entry here?).
> Signed-off-by: Laurent Vivier <lvivier@redhat.com>
> ---
> tcp.c | 8 --------
> tcp_buf.c | 18 ++++++++++++++----
> tcp_internal.h | 2 --
> 3 files changed, 14 insertions(+), 14 deletions(-)
>
> diff --git a/tcp.c b/tcp.c
> index 48d8f7c6d696..433ab1fab30f 100644
> --- a/tcp.c
> +++ b/tcp.c
> @@ -1017,7 +1017,6 @@ static void tcp_fill_header(struct tcphdr *th,
> * tcp_fill_headers4() - Fill 802.3, IPv4, TCP headers in pre-cooked buffers
> * @c: Execution context
> * @conn: Connection pointer
> - * @taph: tap backend specific header
> * @iph: Pointer to IPv4 header
> * @th: Pointer to TCP header
> * @dlen: TCP payload length
> @@ -1028,7 +1027,6 @@ static void tcp_fill_header(struct tcphdr *th,
> */
> size_t tcp_fill_headers4(const struct ctx *c,
> const struct tcp_tap_conn *conn,
> - struct tap_hdr *taph,
> struct iphdr *iph, struct tcphdr *th,
> size_t dlen, const uint16_t *check,
> uint32_t seq)
> @@ -1051,8 +1049,6 @@ size_t tcp_fill_headers4(const struct ctx *c,
>
> tcp_update_check_tcp4(iph, th);
>
> - tap_hdr_update(taph, l3len + sizeof(struct ethhdr));
> -
> return l4len;
> }
>
> @@ -1060,7 +1056,6 @@ size_t tcp_fill_headers4(const struct ctx *c,
> * tcp_fill_headers6() - Fill 802.3, IPv6, TCP headers in pre-cooked buffers
> * @c: Execution context
> * @conn: Connection pointer
> - * @taph: tap backend specific header
> * @ip6h: Pointer to IPv6 header
> * @th: Pointer to TCP header
> * @dlen: TCP payload length
> @@ -1071,7 +1066,6 @@ size_t tcp_fill_headers4(const struct ctx *c,
> */
> size_t tcp_fill_headers6(const struct ctx *c,
> const struct tcp_tap_conn *conn,
> - struct tap_hdr *taph,
> struct ipv6hdr *ip6h, struct tcphdr *th,
> size_t dlen, uint32_t seq)
> {
> @@ -1096,8 +1090,6 @@ size_t tcp_fill_headers6(const struct ctx *c,
>
> tcp_update_check_tcp6(ip6h, th);
>
> - tap_hdr_update(taph, l4len + sizeof(*ip6h) + sizeof(struct ethhdr));
> -
> return l4len;
> }
>
> diff --git a/tcp_buf.c b/tcp_buf.c
> index 630e83e9a01a..cd4549c06035 100644
> --- a/tcp_buf.c
> +++ b/tcp_buf.c
> @@ -298,10 +298,12 @@ int tcp_buf_send_flag(struct ctx *c, struct tcp_tap_conn *conn, int flags)
> if (ret <= 0)
> return ret;
>
> - l4len = tcp_fill_headers4(c, conn, iov[TCP_IOV_TAP].iov_base,
> + l4len = tcp_fill_headers4(c, conn,
> iov[TCP_IOV_IP].iov_base,
> iov[TCP_IOV_PAYLOAD].iov_base, optlen,
> NULL, conn->seq_to_tap);
> + tap_hdr_update(iov[TCP_IOV_TAP].iov_base,
> + l4len + sizeof(struct iphdr) + sizeof(struct ethhdr));
> } else {
> iov = tcp6_l2_flags_iov[tcp6_flags_used++];
>
> @@ -312,10 +314,13 @@ int tcp_buf_send_flag(struct ctx *c, struct tcp_tap_conn *conn, int flags)
> if (ret <= 0)
> return ret;
>
> - l4len = tcp_fill_headers6(c, conn, iov[TCP_IOV_TAP].iov_base,
> + l4len = tcp_fill_headers6(c, conn,
> iov[TCP_IOV_IP].iov_base,
> iov[TCP_IOV_PAYLOAD].iov_base, optlen,
> conn->seq_to_tap);
> + tap_hdr_update(iov[TCP_IOV_TAP].iov_base,
> + l4len + sizeof(struct ipv6hdr) +
> + sizeof(struct ethhdr));
> }
> iov[TCP_IOV_PAYLOAD].iov_len = l4len;
>
> @@ -373,10 +378,12 @@ void tcp_data_to_tap(const struct ctx *c, struct tcp_tap_conn *conn,
> tcp4_seq_update[tcp4_payload_used].len = dlen;
>
> iov = tcp4_l2_iov[tcp4_payload_used++];
> - l4len = tcp_fill_headers4(c, conn, iov[TCP_IOV_TAP].iov_base,
> + l4len = tcp_fill_headers4(c, conn,
> iov[TCP_IOV_IP].iov_base,
> iov[TCP_IOV_PAYLOAD].iov_base, dlen,
> check, seq);
> + tap_hdr_update(iov[TCP_IOV_TAP].iov_base,
> + l4len + sizeof(struct iphdr) + sizeof(struct ethhdr));
> iov[TCP_IOV_PAYLOAD].iov_len = l4len;
> if (tcp4_payload_used > TCP_FRAMES_MEM - 1)
> tcp_payload_flush(c);
> @@ -385,10 +392,13 @@ void tcp_data_to_tap(const struct ctx *c, struct tcp_tap_conn *conn,
> tcp6_seq_update[tcp6_payload_used].len = dlen;
>
> iov = tcp6_l2_iov[tcp6_payload_used++];
> - l4len = tcp_fill_headers6(c, conn, iov[TCP_IOV_TAP].iov_base,
> + l4len = tcp_fill_headers6(c, conn,
> iov[TCP_IOV_IP].iov_base,
> iov[TCP_IOV_PAYLOAD].iov_base, dlen,
> seq);
> + tap_hdr_update(iov[TCP_IOV_TAP].iov_base,
> + l4len + sizeof(struct ipv6hdr) +
> + sizeof(struct ethhdr));
> iov[TCP_IOV_PAYLOAD].iov_len = l4len;
> if (tcp6_payload_used > TCP_FRAMES_MEM - 1)
> tcp_payload_flush(c);
> diff --git a/tcp_internal.h b/tcp_internal.h
> index e47b64a68afd..5c7a52b8293c 100644
> --- a/tcp_internal.h
> +++ b/tcp_internal.h
> @@ -70,13 +70,11 @@ void tcp_rst_do(struct ctx *c, struct tcp_tap_conn *conn);
>
> size_t tcp_fill_headers4(const struct ctx *c,
> const struct tcp_tap_conn *conn,
> - struct tap_hdr *taph,
> struct iphdr *iph, struct tcphdr *th,
> size_t dlen, const uint16_t *check,
> uint32_t seq);
> size_t tcp_fill_headers6(const struct ctx *c,
> const struct tcp_tap_conn *conn,
> - struct tap_hdr *taph,
> struct ipv6hdr *ip6h, struct tcphdr *th,
> size_t dlen, uint32_t seq);
> int tcp_update_seqack_wnd(const struct ctx *c, struct tcp_tap_conn *conn,
--
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
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
next prev parent reply other threads:[~2024-06-03 4:13 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-05-31 14:23 [PATCH v4 00/10] Add vhost-user support to passt (part 2) Laurent Vivier
2024-05-31 14:23 ` [PATCH v4 01/10] tcp: inline tcp_l2_buf_fill_headers() Laurent Vivier
2024-05-31 14:23 ` [PATCH v4 02/10] tcp: extract buffer management from tcp_send_flag() Laurent Vivier
2024-06-01 5:43 ` David Gibson
2024-05-31 14:23 ` [PATCH v4 03/10] tcp: move buffers management functions to their own file Laurent Vivier
2024-06-03 1:27 ` David Gibson
2024-05-31 14:23 ` [PATCH v4 04/10] tap: export pool_flush()/tapX_handler()/packet_add() Laurent Vivier
2024-06-03 1:32 ` David Gibson
2024-05-31 14:23 ` [PATCH v4 05/10] udp: move udpX_l2_buf_t and udpX_l2_mh_sock out of udp_update_hdrX() Laurent Vivier
2024-06-03 2:54 ` David Gibson
2024-05-31 14:23 ` [PATCH v4 06/10] udp: rename udp_sock_handler() to udp_buf_sock_handler() Laurent Vivier
2024-06-03 4:02 ` David Gibson
2024-05-31 14:23 ` [PATCH v4 07/10] vhost-user: compare mode MODE_PASTA and not MODE_PASST Laurent Vivier
2024-06-03 4:04 ` David Gibson
2024-05-31 14:23 ` [PATCH v4 08/10] iov: remove iov_copy() Laurent Vivier
2024-06-03 4:05 ` David Gibson
2024-05-31 14:23 ` [PATCH v4 09/10] tcp: remove tap_hdr parameter Laurent Vivier
2024-06-03 4:12 ` David Gibson [this message]
2024-05-31 14:23 ` [PATCH v4 10/10] tap: use in->buf_size rather than sizeof(pkt_buf) Laurent Vivier
2024-06-03 4:20 ` David Gibson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Zl1CwxB0d630zLgQ@zatzit \
--to=david@gibson.dropbear.id.au \
--cc=lvivier@redhat.com \
--cc=passt-dev@passt.top \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://passt.top/passt
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for IMAP folder(s).