public inbox for passt-dev@passt.top
 help / color / mirror / code / Atom feed
From: Stefano Brivio <sbrivio@redhat.com>
To: David Gibson <david@gibson.dropbear.id.au>
Cc: passt-dev@passt.top
Subject: Re: [PATCH v3 12/15] icmp: Populate and use host side flow information
Date: Thu, 18 Jan 2024 16:43:05 +0100	[thread overview]
Message-ID: <20240118164305.3ab441c4@elisabeth> (raw)
In-Reply-To: <Zah9VUAlfJZ7mkNQ@zatzit>

On Thu, 18 Jan 2024 12:22:29 +1100
David Gibson <david@gibson.dropbear.id.au> wrote:

> On Wed, Jan 17, 2024 at 08:59:41PM +0100, Stefano Brivio wrote:
> > On Thu, 21 Dec 2023 18:02:34 +1100
> > David Gibson <david@gibson.dropbear.id.au> wrote:
> >   
> > > Complete filling out the common flow information for "ping" flows by
> > > storing the host side information for the ping socket.  We can only
> > > retrieve this from the socket after we send the echo-request, because
> > > that's when the kernel will assign an ID.
> > > 
> > > Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
> > > ---
> > >  icmp.c | 36 +++++++++++++++++++++++++++++++++---
> > >  1 file changed, 33 insertions(+), 3 deletions(-)
> > > 
> > > diff --git a/icmp.c b/icmp.c
> > > index 53ad087..917c810 100644
> > > --- a/icmp.c
> > > +++ b/icmp.c
> > > @@ -310,11 +310,41 @@ int icmp_tap_handler(const struct ctx *c, uint8_t pif, int af,
> > >  	if (sendto(pingf->sock, pkt, plen, MSG_NOSIGNAL, &sa.sa, sl) < 0) {
> > >  		debug("%s: failed to relay request to socket: %s",
> > >  		      pname, strerror(errno));
> > > -	} else {
> > > -		debug("%s: echo request to socket, ID: %"PRIu16", seq: %"PRIu16,
> > > -		      pname, id, seq);
> > > +		if (flow)
> > > +			goto cancel;
> > > +	}
> > > +
> > > +	debug("%s: echo request to socket, ID: %"PRIu16", seq: %"PRIu16,
> > > +	      pname, id, seq);
> > > +
> > > +	if (!flow)
> > > +		/* Nothing more to do for an existing flow */
> > > +		return 1;
> > > +
> > > +	/* We need to wait until after the sendto() to fill in the SOCKSIDE
> > > +	 * information, so that we can find out the host side id the kernel
> > > +	 * assigned.  If there's no bind address specified, this will still have
> > > +	 * 0.0.0.0 or :: as the host side forwarding address.  There's not
> > > +	 * really anything we can do to fill that in, which means we can never
> > > +	 * insert the SOCKSIDE of a ping flow into the hash table.
> > > +	 */  
> > 
> > Well, if it was just because of that we could argue at some point that,
> > with wildcards or suchlike, we could insert that in the hash table as
> > well.  
> 
> If we allow wildcards, it's probably not a hash table any more, or at
> least not a normal one.  Hashing is pretty inherently tied to a single
> value lookup.

Well, unless you consider 0.0.0.0 / :: as the actual value (which makes
it a wildcard, but not in the hash table sense). I'm not suggesting we
should, though (at least for the moment being).

> > But that wouldn't make sense anyway, right? That is, unless I'm missing
> > something, we would have no use for a hash table lookup of the SOCKSIDE
> > of a ping flow anyway.  
> 
> That's correct, which is why we can get away with this.  Likewise
> SOCKSIDE of tcp flows is also never hashed.  However in some cases we
> may want to hash the host sides of flows: I think we'll want to for
> UDP, for example, because we can receive multiple flows via the same
> bound socket.  That's why I want to be very clear about when and why
> we're constructing a flowside that can't be hashed.

The comment makes this sound like a compromise on functionality, or a
problem we have (and that's what mostly caught my attention: can we
"solve" this?).

Maybe you could add something like "(not that there's any use for it)"
at the end, or similar.

-- 
Stefano


  reply	other threads:[~2024-01-18 15:43 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-12-21  7:02 [PATCH v3 00/15] RFC: Unified flow table David Gibson
2023-12-21  7:02 ` [PATCH v3 01/15] flow: Common data structures for tracking flow addresses David Gibson
2024-01-13 22:50   ` Stefano Brivio
2024-01-16  6:14     ` David Gibson
2023-12-21  7:02 ` [PATCH v3 02/15] tcp, flow: Maintain guest side flow information David Gibson
2024-01-13 22:51   ` Stefano Brivio
2024-01-16  6:23     ` David Gibson
2023-12-21  7:02 ` [PATCH v3 03/15] tcp, flow: Maintain host " David Gibson
2023-12-21  7:02 ` [PATCH v3 04/15] tcp_splice,flow: Maintain flow information for spliced connections David Gibson
2024-01-17 19:59   ` Stefano Brivio
2024-01-18  1:01     ` David Gibson
2023-12-21  7:02 ` [PATCH v3 05/15] flow, tcp, tcp_splice: Uniform debug helpers for new flows David Gibson
2024-01-17 19:59   ` Stefano Brivio
2024-01-18  1:04     ` David Gibson
2024-01-18 15:40       ` Stefano Brivio
2023-12-21  7:02 ` [PATCH v3 06/15] tcp, flow: Replace TCP specific hash function with general flow hash David Gibson
2024-01-17 19:59   ` Stefano Brivio
2024-01-18  1:15     ` David Gibson
2024-01-18 15:42       ` Stefano Brivio
2024-01-18 23:55         ` David Gibson
2023-12-21  7:02 ` [PATCH v3 07/15] flow: Add helper to determine a flow's protocol David Gibson
2023-12-21  7:02 ` [PATCH v3 08/15] flow, tcp: Generalise TCP hash table to general flow hash table David Gibson
2023-12-21  7:02 ` [PATCH v3 09/15] tcp: Re-use flow hash for initial sequence number generation David Gibson
2023-12-21  7:02 ` [PATCH v3 10/15] icmp: Store ping socket information in the flow table David Gibson
2023-12-21  7:02 ` [PATCH v3 11/15] icmp: Populate guest side information for ping flows David Gibson
2023-12-21  7:02 ` [PATCH v3 12/15] icmp: Populate and use host side flow information David Gibson
2024-01-17 19:59   ` Stefano Brivio
2024-01-18  1:22     ` David Gibson
2024-01-18 15:43       ` Stefano Brivio [this message]
2024-01-18 23:58         ` David Gibson
2023-12-21  7:02 ` [PATCH v3 13/15] icmp: Use 'flowside' epoll references for ping sockets David Gibson
2023-12-21  7:02 ` [PATCH v3 14/15] icmp: Merge EPOLL_TYPE_ICMP and EPOLL_TYPE_ICMPV6 David Gibson
2023-12-21  7:02 ` [PATCH v3 15/15] icmp: Eliminate icmp_id_map 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=20240118164305.3ab441c4@elisabeth \
    --to=sbrivio@redhat.com \
    --cc=david@gibson.dropbear.id.au \
    --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).