All of lore.kernel.org
 help / color / mirror / Atom feed
From: Martin KaFai Lau <martin.lau@linux.dev>
To: Alan Maguire <alan.maguire@oracle.com>
Cc: bpf <bpf@vger.kernel.org>
Subject: Re: sock_ops: calling bpf_sock_ops_cb_flags_set() for already established sockets
Date: Fri, 1 Dec 2023 09:51:03 -0800	[thread overview]
Message-ID: <9841230b-e613-4e70-9844-26cd91a69136@linux.dev> (raw)
In-Reply-To: <f42f157b-6e52-dd4d-3d97-9b86c84c0b00@oracle.com>

On 12/1/23 9:01 AM, Alan Maguire wrote:
> hi folks
> 
> I've run into a few cases where users have wanted to enable additional
> tcp-bpf sock_ops events for a socket _after_ connection establishment.
> The problem is that to set the flags to enable additional events, we
> have to be in the context of a sock_ops program, and as I understand it,
> by default only events early in the socket lifetime are enabled by
> default (such as connection established/accepted). As a consequence, if
> we do not catch one of those early events, the sock_ops program will not
> run and we miss the opportunity to enable more sock_ops events. This can
> be a problem for boot-time connections like iSCSI where we are too late
> to catch connection establishment.
> 
> I can see a few possibilities:
> 
> - support setting sock_ops event flags via a socket iterator. This would
> mean that the user can always set per-socket flags on
> already-established sockets by iterating over existing sockets,
> selecting those of interest.
> - supporting setting event flags via setsockopt(). In fact we wouldn't
> need to fully support setting event flags via "real" setsockopt(); we
> could simply use a cgroup/setsockopt program and allow
> bpf_sock_ops_cb_flags_set() to run in the cgroup/setsockopt context
> (with additional checks to ensure it is indeed a tcp socket).
> 
> Do either/both of these seem reasonable, or is there a better way to
> tackle this? Thanks!

The lock_sock() is held in both cases (iterator / cgroup-setsockopt), so should 
be ok. I guess it depends on the usecase. If it does not have a hold on the 
socket fd, socket iterator may be the only way.

      reply	other threads:[~2023-12-01 17:51 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-12-01 17:01 sock_ops: calling bpf_sock_ops_cb_flags_set() for already established sockets Alan Maguire
2023-12-01 17:51 ` Martin KaFai Lau [this message]

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=9841230b-e613-4e70-9844-26cd91a69136@linux.dev \
    --to=martin.lau@linux.dev \
    --cc=alan.maguire@oracle.com \
    --cc=bpf@vger.kernel.org \
    /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.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.