From: Willem de Bruijn <willemdebruijn.kernel@gmail.com>
To: Gur Stavi <gur.stavi@huawei.com>, Gur Stavi <gur.stavi@huawei.com>
Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>,
Paolo Abeni <pabeni@redhat.com>
Subject: Re: [PATCH net-next v01 1/4] af_packet: allow fanout_add when socket is not RUNNING
Date: Mon, 07 Oct 2024 18:08:08 -0400 [thread overview]
Message-ID: <67045bc8a4d4a_1635eb2947d@willemb.c.googlers.com.notmuch> (raw)
In-Reply-To: <52a2ac061498e96e69a71e49ecb961b6a17dfff7.1728303615.git.gur.stavi@huawei.com>
Gur Stavi wrote:
> PACKET socket can retain its fanout membership through link down and up
> and (obviously) leave a fanout while it is not RUNNING (link down).
Probably just semantics, but a socket cannot leave a fanout group.
__fanout_unlink does remove it from the fanout group on link down
(__unregister_prot_hook). But a subsequent link up will always add it
back.
> However, socket was forbidden from joining a fanout while it was not
> RUNNING.
Your change looks safe to me.
I'm trying to understand where this check came from. Originally it was
this at the start of fanout_add:
+ if (!po->running)
+ return -EINVAL;
Perhaps as indicator of this requirement
An AF_PACKET socket must be fully bound before it tries to add itself
to a fanout. All AF_PACKET sockets trying to join the same fanout
must all have the same bind settings.
Probably because for the first socket in the fanout group, the group
inherits the relevant bound fields from the socket:
match->prot_hook.type = po->prot_hook.type;
match->prot_hook.dev = po->prot_hook.dev;
> This patch allows PACKET socket to join fanout while not RUNNING.
>
> Signed-off-by: Gur Stavi <gur.stavi@huawei.com>
> ---
> net/packet/af_packet.c | 10 +++++-----
> 1 file changed, 5 insertions(+), 5 deletions(-)
>
> diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c
> index a705ec214254..c28eee7f6ce0 100644
> --- a/net/packet/af_packet.c
> +++ b/net/packet/af_packet.c
> @@ -1846,21 +1846,21 @@ static int fanout_add(struct sock *sk, struct fanout_args *args)
> err = -EINVAL;
>
> spin_lock(&po->bind_lock);
> - if (packet_sock_flag(po, PACKET_SOCK_RUNNING) &&
> - match->type == type &&
> + if (match->type == type &&
> match->prot_hook.type == po->prot_hook.type &&
> match->prot_hook.dev == po->prot_hook.dev) {
> err = -ENOSPC;
> if (refcount_read(&match->sk_ref) < match->max_num_members) {
> - __dev_remove_pack(&po->prot_hook);
> -
> /* Paired with packet_setsockopt(PACKET_FANOUT_DATA) */
> WRITE_ONCE(po->fanout, match);
>
> po->rollover = rollover;
> rollover = NULL;
> refcount_set(&match->sk_ref, refcount_read(&match->sk_ref) + 1);
> - __fanout_link(sk, po);
> + if (packet_sock_flag(po, PACKET_SOCK_RUNNING)) {
> + __dev_remove_pack(&po->prot_hook);
> + __fanout_link(sk, po);
> + }
> err = 0;
> }
> }
> --
> 2.45.2
>
next prev parent reply other threads:[~2024-10-07 22:08 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-07 12:40 [PATCH net-next v01 0/4] net: af_packet: allow joining a fanout when link is down Gur Stavi
2024-10-07 12:40 ` [PATCH net-next v01 1/4] af_packet: allow fanout_add when socket is not RUNNING Gur Stavi
2024-10-07 22:08 ` Willem de Bruijn [this message]
2024-10-07 12:40 ` [PATCH net-next v01 2/4] selftests: net/psock_fanout: add loopback up/down toggle facility Gur Stavi
2024-10-07 12:40 ` [PATCH net-next v01 3/4] selftests: net/psock_fanout: restore loopback up/down state on exit Gur Stavi
2024-10-07 22:15 ` Willem de Bruijn
2024-10-07 12:40 ` [PATCH net-next v01 4/4] selftests: net/psock_fanout: socket joins fanout when link is down Gur Stavi
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=67045bc8a4d4a_1635eb2947d@willemb.c.googlers.com.notmuch \
--to=willemdebruijn.kernel@gmail.com \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=gur.stavi@huawei.com \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
/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 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 NNTP newsgroup(s).