From: David Ahern <dsahern@kernel.org>
To: netdev@vger.kernel.org
Cc: prashantbhole.linux@gmail.com, jasowang@redhat.com,
davem@davemloft.net, jakub.kicinski@netronome.com,
jbrouer@redhat.com, toke@redhat.com, mst@redhat.com,
toshiaki.makita1@gmail.com, daniel@iogearbox.net,
john.fastabend@gmail.com, ast@kernel.org, kafai@fb.com,
songliubraving@fb.com, yhs@fb.com, andriin@fb.com,
dsahern@gmail.com, David Ahern <dahern@digitalocean.com>
Subject: [PATCH bpf-next 09/12] tun: set egress XDP program
Date: Wed, 22 Jan 2020 18:42:07 -0700 [thread overview]
Message-ID: <20200123014210.38412-10-dsahern@kernel.org> (raw)
In-Reply-To: <20200123014210.38412-1-dsahern@kernel.org>
From: David Ahern <dahern@digitalocean.com>
This patch adds a way to set tx path XDP program in tun driver
by handling XDP_SETUP_PROG_EGRESS and XDP_QUERY_PROG_EGRESS in
ndo_bpf handler.
Signed-off-by: David Ahern <dahern@digitalocean.com>
Signed-off-by: Prashant Bhole <prashantbhole.linux@gmail.com>
---
drivers/net/tun.c | 34 ++++++++++++++++++++++++++--------
1 file changed, 26 insertions(+), 8 deletions(-)
diff --git a/drivers/net/tun.c b/drivers/net/tun.c
index d4a0e59fcf5c..b6bac773f2a0 100644
--- a/drivers/net/tun.c
+++ b/drivers/net/tun.c
@@ -238,6 +238,7 @@ struct tun_struct {
u32 rx_batched;
struct tun_pcpu_stats __percpu *pcpu_stats;
struct bpf_prog __rcu *xdp_prog;
+ struct bpf_prog __rcu *xdp_egress_prog;
struct tun_prog __rcu *steering_prog;
struct tun_prog __rcu *filter_prog;
struct ethtool_link_ksettings link_ksettings;
@@ -1156,15 +1157,21 @@ tun_net_get_stats64(struct net_device *dev, struct rtnl_link_stats64 *stats)
}
static int tun_xdp_set(struct net_device *dev, struct bpf_prog *prog,
- struct netlink_ext_ack *extack)
+ bool egress, struct netlink_ext_ack *extack)
{
struct tun_struct *tun = netdev_priv(dev);
struct tun_file *tfile;
struct bpf_prog *old_prog;
int i;
- old_prog = rtnl_dereference(tun->xdp_prog);
- rcu_assign_pointer(tun->xdp_prog, prog);
+ if (egress) {
+ old_prog = rtnl_dereference(tun->xdp_egress_prog);
+ rcu_assign_pointer(tun->xdp_egress_prog, prog);
+ } else {
+ old_prog = rtnl_dereference(tun->xdp_prog);
+ rcu_assign_pointer(tun->xdp_prog, prog);
+ }
+
if (old_prog)
bpf_prog_put(old_prog);
@@ -1185,12 +1192,16 @@ static int tun_xdp_set(struct net_device *dev, struct bpf_prog *prog,
return 0;
}
-static u32 tun_xdp_query(struct net_device *dev)
+static u32 tun_xdp_query(struct net_device *dev, bool egress)
{
struct tun_struct *tun = netdev_priv(dev);
const struct bpf_prog *xdp_prog;
- xdp_prog = rtnl_dereference(tun->xdp_prog);
+ if (egress)
+ xdp_prog = rtnl_dereference(tun->xdp_egress_prog);
+ else
+ xdp_prog = rtnl_dereference(tun->xdp_prog);
+
if (xdp_prog)
return xdp_prog->aux->id;
@@ -1201,13 +1212,20 @@ static int tun_xdp(struct net_device *dev, struct netdev_bpf *xdp)
{
switch (xdp->command) {
case XDP_SETUP_PROG:
- return tun_xdp_set(dev, xdp->prog, xdp->extack);
+ return tun_xdp_set(dev, xdp->prog, false, xdp->extack);
+ case XDP_SETUP_PROG_EGRESS:
+ return tun_xdp_set(dev, xdp->prog, true, xdp->extack);
case XDP_QUERY_PROG:
- xdp->prog_id = tun_xdp_query(dev);
- return 0;
+ xdp->prog_id = tun_xdp_query(dev, false);
+ break;
+ case XDP_QUERY_PROG_EGRESS:
+ xdp->prog_id = tun_xdp_query(dev, true);
+ break;
default:
return -EINVAL;
}
+
+ return 0;
}
static int tun_net_change_carrier(struct net_device *dev, bool new_carrier)
--
2.21.1 (Apple Git-122.3)
next prev parent reply other threads:[~2020-01-23 1:42 UTC|newest]
Thread overview: 58+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-01-23 1:41 [PATCH bpf-next 00/12] Add support for XDP in egress path David Ahern
2020-01-23 1:41 ` [PATCH bpf-next 01/12] net: Add new XDP setup and query commands David Ahern
2020-01-23 1:42 ` [PATCH bpf-next 02/12] net: Add BPF_XDP_EGRESS as a bpf_attach_type David Ahern
2020-01-23 11:34 ` Toke Høiland-Jørgensen
2020-01-23 21:32 ` David Ahern
2020-01-24 9:49 ` Toke Høiland-Jørgensen
2020-01-24 7:33 ` Martin Lau
2020-01-23 1:42 ` [PATCH bpf-next 03/12] net: Add IFLA_XDP_EGRESS for XDP programs in the egress path David Ahern
2020-01-23 11:35 ` Toke Høiland-Jørgensen
2020-01-23 21:33 ` David Ahern
2020-01-24 15:21 ` Jakub Kicinski
2020-01-24 15:36 ` Toke Høiland-Jørgensen
2020-01-26 1:43 ` David Ahern
2020-01-26 4:54 ` Alexei Starovoitov
2020-02-02 17:59 ` David Ahern
2020-01-26 12:49 ` Jesper Dangaard Brouer
2020-01-26 16:38 ` David Ahern
2020-01-26 22:17 ` Jakub Kicinski
2020-01-28 14:13 ` Jesper Dangaard Brouer
2020-01-30 14:45 ` Jakub Kicinski
2020-02-01 16:03 ` Toke Høiland-Jørgensen
2020-02-02 17:48 ` David Ahern
2020-01-26 22:11 ` Jakub Kicinski
2020-01-27 4:03 ` David Ahern
2020-01-27 14:16 ` Jakub Kicinski
2020-01-28 3:43 ` David Ahern
2020-01-28 13:57 ` Jakub Kicinski
2020-02-01 16:24 ` Toke Høiland-Jørgensen
2020-02-01 17:08 ` Jakub Kicinski
2020-02-01 20:05 ` Toke Høiland-Jørgensen
2020-02-02 4:15 ` Jakub Kicinski
2020-02-03 19:56 ` Toke Høiland-Jørgensen
2020-02-03 20:13 ` Toke Høiland-Jørgensen
2020-02-03 22:15 ` Jesper Dangaard Brouer
2020-02-04 11:00 ` Toke Høiland-Jørgensen
2020-02-04 17:09 ` Jakub Kicinski
2020-02-05 15:30 ` Toke Høiland-Jørgensen
2020-02-02 17:45 ` David Ahern
2020-02-02 19:12 ` Jakub Kicinski
2020-02-02 17:43 ` David Ahern
2020-02-02 19:31 ` Jakub Kicinski
2020-02-02 21:51 ` David Ahern
2020-02-01 15:59 ` Toke Høiland-Jørgensen
2020-02-02 17:54 ` David Ahern
2020-02-03 20:09 ` Toke Høiland-Jørgensen
2020-01-23 1:42 ` [PATCH bpf-next 04/12] net: core: rename netif_receive_generic_xdp() to do_generic_xdp_core() David Ahern
2020-01-23 1:42 ` [PATCH bpf-next 05/12] tuntap: check tun_msg_ctl type at necessary places David Ahern
2020-01-23 1:42 ` [PATCH bpf-next 06/12] tun: move shared functions to if_tun.h David Ahern
2020-01-23 1:42 ` [PATCH bpf-next 07/12] vhost_net: user tap recvmsg api to access ptr ring David Ahern
2020-01-23 8:26 ` Michael S. Tsirkin
2020-01-23 1:42 ` [PATCH bpf-next 08/12] tuntap: remove usage of ptr ring in vhost_net David Ahern
2020-01-23 1:42 ` David Ahern [this message]
2020-01-23 1:42 ` [PATCH bpf-next 10/12] tun: run XDP program in tx path David Ahern
2020-01-23 8:23 ` Michael S. Tsirkin
2020-01-24 13:36 ` Prashant Bhole
2020-01-24 13:44 ` Prashant Bhole
2020-01-23 1:42 ` [PATCH bpf-next 11/12] libbpf: Add egress XDP support David Ahern
2020-01-23 1:42 ` [PATCH bpf-next 12/12] samples/bpf: xdp1, add " David Ahern
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=20200123014210.38412-10-dsahern@kernel.org \
--to=dsahern@kernel.org \
--cc=andriin@fb.com \
--cc=ast@kernel.org \
--cc=dahern@digitalocean.com \
--cc=daniel@iogearbox.net \
--cc=davem@davemloft.net \
--cc=dsahern@gmail.com \
--cc=jakub.kicinski@netronome.com \
--cc=jasowang@redhat.com \
--cc=jbrouer@redhat.com \
--cc=john.fastabend@gmail.com \
--cc=kafai@fb.com \
--cc=mst@redhat.com \
--cc=netdev@vger.kernel.org \
--cc=prashantbhole.linux@gmail.com \
--cc=songliubraving@fb.com \
--cc=toke@redhat.com \
--cc=toshiaki.makita1@gmail.com \
--cc=yhs@fb.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 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.