On Tue, Jun 11, 2024 at 01:42:20PM +0200, Laurent Vivier wrote:
On 11/06/2024 07:31, David Gibson wrote:
On Wed, Jun 05, 2024 at 05:21:22PM +0200, Laurent Vivier wrote:
This commit isolates the internal data structure management used for storing data (e.g., tcp4_l2_flags_iov[], tcp6_l2_flags_iov[], tcp4_flags_ip[], tcp4_flags[], ...) from the tcp_send_flag() function. The extracted functionality is relocated to a new function named tcp_fill_flag_header().
tcp_fill_flag_header() is now a generic function that accepts parameters such as struct tcphdr and a data pointer. tcp_send_flag() utilizes this parameter to pass memory pointers from tcp4_l2_flags_iov[] and tcp6_l2_flags_iov[].
This separation sets the stage for utilizing tcp_fill_flag_header() to set the memory provided by the guest via vhost-user in future developments.
Thanks for the commit message, it makes this much clearer.
I have a number of comments below, but they're basically all cosmetic.
Signed-off-by: Laurent Vivier
--- tcp.c | 63 ++++++++++++++++++++++++++++++++++++----------------------- 1 file changed, 39 insertions(+), 24 deletions(-) diff --git a/tcp.c b/tcp.c index 06acb41e4d90..68d4afa05a36 100644 --- a/tcp.c +++ b/tcp.c @@ -1549,24 +1549,25 @@ static void tcp_update_seqack_from_tap(const struct ctx *c, } /** - * tcp_send_flag() - Send segment with flags to tap (no payload) + * tcp_fill_flag_header() - Prepare header for flags-only segment (no payload)
I don't love the name tcp_fill_flag_header(), although it's not terrible. Maybe tcp_prepare_flags() would be better?
* @c: Execution context * @conn: Connection pointer * @flags: TCP flags: if not set, send segment only if ACK is due + * @th: TCP header to update + * @data: buffer to store TCP option + * @optlen: size of the TCP option buffer
Worth noting this is an output parameter here...
* - * Return: negative error code on connection reset, 0 otherwise + * Return: < 0 error code on connection reset, + * 0 if there is no flag to send + * 1 otherwise
.. or, since optlen will always be positive on success cases, you could just return it.
We cannot return optlen here as optlen can be 0 (it is not zero only with SYN), and 0 means no flags to send. We can have flags to send with optlen equal to 0.
Oh, my mistake, sorry. We could change it to the l4len which would avoid that, but it looks like that would be more awkward in the caller. -- 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