From: Johannes Berg <johannes-cdvu00un1VgdHxzADdlk8Q@public.gmane.org>
To: David Miller <davem-fT/PcQaiUtIeIZ0/mPfg9Q@public.gmane.org>
Cc: linux-wireless-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
netdev-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: Re: [RFC 3/3] mac80211: support bpf monitor filter
Date: Wed, 12 Apr 2017 17:25:29 +0200 [thread overview]
Message-ID: <1492010729.2855.16.camel@sipsolutions.net> (raw)
In-Reply-To: <20170412.112212.441025205054195351.davem-fT/PcQaiUtIeIZ0/mPfg9Q@public.gmane.org>
On Wed, 2017-04-12 at 11:22 -0400, David Miller wrote:
> From: Johannes Berg <johannes-cdvu00un1VgdHxzADdlk8Q@public.gmane.org>
> Date: Wed, 12 Apr 2017 16:29:07 +0200
>
> > On Wed, 2017-04-12 at 13:07 +0200, Johannes Berg wrote:
> >>
> >> struct ieee80211_if_mntr {
> >> u32 flags;
> >>
> > [...]
> > + bool deliver;
> >
> > That's ... broken for multi-queue RX. I haven't really found a good
> > other way to do it. The best way will likely be to copy the SKB the
> > first time it's needed, build the radiotap header, and then keep a
> > reference to it to be able to clone it later if it's needed again.
>
> If you don't recurse into the receive path for different devices
> before you are done with this boolean, simply make a global per-cpu
> boolean and use that.
No, that won't work. We don't recurse, but this is a per-interface
bool, as we can have multiple monitor interfaces (possibly with
different filters).
The problem comes from the fact that I did
for_each_interface()
iface.deliver = run_bpf_program();
if (nobody_wanted_it)
return;
skb = build_monitor_skb()
for_each_interface()
if (iface.monitor)
deliver(skb);
What I should be doing is something like this:
for_each_interface() {
if (run_bpf_program()) {
if (!skb)
skb = build_monitor_skb();
deliver(skb);
}
}
where deliver() does skb_clone() internally or so.
johannes
next prev parent reply other threads:[~2017-04-12 15:25 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-04-12 11:07 [RFC 1/3] bpf/wireless: add wifimon program type Johannes Berg
2017-04-12 11:07 ` [RFC 2/3] cfg80211: add API to attach monitor filter program Johannes Berg
2017-04-12 11:07 ` [RFC 3/3] mac80211: support bpf monitor filter Johannes Berg
[not found] ` <20170412110726.9689-3-johannes-cdvu00un1VgdHxzADdlk8Q@public.gmane.org>
2017-04-12 14:29 ` Johannes Berg
[not found] ` <1492007347.2855.12.camel-cdvu00un1VgdHxzADdlk8Q@public.gmane.org>
2017-04-12 15:22 ` David Miller
[not found] ` <20170412.112212.441025205054195351.davem-fT/PcQaiUtIeIZ0/mPfg9Q@public.gmane.org>
2017-04-12 15:25 ` Johannes Berg [this message]
2017-04-13 6:00 ` Johannes Berg
[not found] ` <20170412110726.9689-1-johannes-cdvu00un1VgdHxzADdlk8Q@public.gmane.org>
2017-04-12 14:27 ` [RFC 1/3] bpf/wireless: add wifimon program type Johannes Berg
[not found] ` <1492007254.2855.10.camel-cdvu00un1VgdHxzADdlk8Q@public.gmane.org>
2017-04-12 15:19 ` David Miller
2017-04-12 15:30 ` Johannes Berg
[not found] ` <1492011040.2855.18.camel-cdvu00un1VgdHxzADdlk8Q@public.gmane.org>
2017-04-14 18:51 ` Alexei Starovoitov
2017-04-18 9:55 ` Johannes Berg
2017-04-18 10:58 ` Daniel Borkmann
[not found] ` <58F5F148.1090700-FeC+5ew28dpmcu3hnIyYJQ@public.gmane.org>
2017-04-18 11:28 ` Johannes Berg
2017-04-18 11:35 ` Johannes Berg
2017-04-12 19:47 ` Marcel Holtmann
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=1492010729.2855.16.camel@sipsolutions.net \
--to=johannes-cdvu00un1vgdhxzaddlk8q@public.gmane.org \
--cc=davem-fT/PcQaiUtIeIZ0/mPfg9Q@public.gmane.org \
--cc=linux-wireless-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=netdev-u79uwXL29TY76Z2rM5mHXA@public.gmane.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 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).