* [PATCH bpf-next 1/2] bpf: support BPF_PROG_QUERY for BPF_FLOW_DISSECTOR attach_type
@ 2019-04-23 23:21 Stanislav Fomichev
2019-04-23 23:22 ` [PATCH bpf-next 2/2] bpftool: show flow_dissector attachment status Stanislav Fomichev
` (2 more replies)
0 siblings, 3 replies; 9+ messages in thread
From: Stanislav Fomichev @ 2019-04-23 23:21 UTC (permalink / raw)
To: netdev, bpf
Cc: davem, ast, daniel, jakub.kicinski, quentin.monnet, Stanislav Fomichev
target_fd is target namespace. If there is a flow dissector BPF program
attached to that namespace, its (single) id is returned.
Signed-off-by: Stanislav Fomichev <sdf@google.com>
---
include/linux/skbuff.h | 8 ++++++++
kernel/bpf/syscall.c | 2 ++
net/core/flow_dissector.c | 36 ++++++++++++++++++++++++++++++++++++
3 files changed, 46 insertions(+)
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
index 998256c2820b..9f499c0ac53b 100644
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
@@ -1258,11 +1258,19 @@ void skb_flow_dissector_init(struct flow_dissector *flow_dissector,
unsigned int key_count);
#ifdef CONFIG_NET
+int skb_flow_dissector_prog_query(const union bpf_attr *attr,
+ union bpf_attr __user *uattr);
int skb_flow_dissector_bpf_prog_attach(const union bpf_attr *attr,
struct bpf_prog *prog);
int skb_flow_dissector_bpf_prog_detach(const union bpf_attr *attr);
#else
+static int skb_flow_dissector_prog_query(const union bpf_attr *attr,
+ union bpf_attr __user *uattr)
+{
+ return -EOPNOTSUPP;
+}
+
static inline int skb_flow_dissector_bpf_prog_attach(const union bpf_attr *attr,
struct bpf_prog *prog)
{
diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c
index 92c9b8a32b50..b0de49598341 100644
--- a/kernel/bpf/syscall.c
+++ b/kernel/bpf/syscall.c
@@ -2009,6 +2009,8 @@ static int bpf_prog_query(const union bpf_attr *attr,
break;
case BPF_LIRC_MODE2:
return lirc_prog_query(attr, uattr);
+ case BPF_FLOW_DISSECTOR:
+ return skb_flow_dissector_prog_query(attr, uattr);
default:
return -EINVAL;
}
diff --git a/net/core/flow_dissector.c b/net/core/flow_dissector.c
index fac712cee9d5..d3c41cb7dbb8 100644
--- a/net/core/flow_dissector.c
+++ b/net/core/flow_dissector.c
@@ -65,6 +65,42 @@ void skb_flow_dissector_init(struct flow_dissector *flow_dissector,
}
EXPORT_SYMBOL(skb_flow_dissector_init);
+int skb_flow_dissector_prog_query(const union bpf_attr *attr,
+ union bpf_attr __user *uattr)
+{
+ __u32 __user *prog_ids = u64_to_user_ptr(attr->query.prog_ids);
+ struct bpf_prog *attached;
+ u32 cnt = 0, flags = 0;
+ struct net *net;
+
+ if (attr->query.query_flags)
+ return -EINVAL;
+
+ net = get_net_ns_by_fd(attr->query.target_fd);
+ if (IS_ERR(net))
+ return PTR_ERR(net);
+
+ rcu_read_lock();
+ attached = rcu_dereference(net->flow_dissector_prog);
+ if (attached) {
+ cnt = 1;
+ if (prog_ids &&
+ copy_to_user(prog_ids, &attached->aux->id, sizeof(u32))) {
+ rcu_read_unlock();
+ return -EFAULT;
+ }
+ }
+ rcu_read_unlock();
+
+ if (copy_to_user(&uattr->query.attach_flags, &flags, sizeof(flags)))
+ return -EFAULT;
+
+ if (copy_to_user(&uattr->query.prog_cnt, &cnt, sizeof(cnt)))
+ return -EFAULT;
+
+ return 0;
+}
+
int skb_flow_dissector_bpf_prog_attach(const union bpf_attr *attr,
struct bpf_prog *prog)
{
--
2.21.0.593.g511ec345e18-goog
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH bpf-next 2/2] bpftool: show flow_dissector attachment status
2019-04-23 23:21 [PATCH bpf-next 1/2] bpf: support BPF_PROG_QUERY for BPF_FLOW_DISSECTOR attach_type Stanislav Fomichev
@ 2019-04-23 23:22 ` Stanislav Fomichev
2019-04-23 23:32 ` Jakub Kicinski
2019-04-24 8:12 ` Quentin Monnet
2019-04-23 23:28 ` [PATCH bpf-next 1/2] bpf: support BPF_PROG_QUERY for BPF_FLOW_DISSECTOR attach_type Jakub Kicinski
2019-04-24 18:48 ` kbuild test robot
2 siblings, 2 replies; 9+ messages in thread
From: Stanislav Fomichev @ 2019-04-23 23:22 UTC (permalink / raw)
To: netdev, bpf
Cc: davem, ast, daniel, jakub.kicinski, quentin.monnet, Stanislav Fomichev
Right now there is no way to query whether BPF flow_dissector program
is attached to a network namespace or not. In previous commit, I added
support for querying that info, show it when doing `bpftool net`:
$ bpftool prog loadall ./bpf_flow.o \
/sys/fs/bpf/flow type flow_dissector \
pinmaps /sys/fs/bpf/flow
$ bpftool prog
3: flow_dissector name _dissect tag 8c9e917b513dd5cc gpl
loaded_at 2019-04-23T16:14:48-0700 uid 0
xlated 656B jited 461B memlock 4096B map_ids 1,2
btf_id 1
...
$ bpftool net -j
[{"xdp":[],"tc":[],"flow_dissector":[]}]
$ bpftool prog attach pinned \
/sys/fs/bpf/flow/flow_dissector flow_dissector
$ bpftool net -j
[{"xdp":[],"tc":[],"flow_dissector":["id":3]}]
Doesn't show up in a different net namespace:
$ ip netns add test
$ ip netns exec test bpftool net -j
[{"xdp":[],"tc":[],"flow_dissector":[]}]
Non-json output:
$ bpftool net
xdp:
tc:
flow_dissector:
id 3
Signed-off-by: Stanislav Fomichev <sdf@google.com>
---
tools/bpf/bpftool/net.c | 52 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 52 insertions(+)
diff --git a/tools/bpf/bpftool/net.c b/tools/bpf/bpftool/net.c
index db0e7de49d49..afe0903201e2 100644
--- a/tools/bpf/bpftool/net.c
+++ b/tools/bpf/bpftool/net.c
@@ -3,6 +3,7 @@
#define _GNU_SOURCE
#include <errno.h>
+#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
@@ -12,6 +13,8 @@
#include <linux/rtnetlink.h>
#include <linux/tc_act/tc_bpf.h>
#include <sys/socket.h>
+#include <sys/stat.h>
+#include <sys/types.h>
#include <bpf.h>
#include <nlattr.h>
@@ -48,6 +51,10 @@ struct bpf_filter_t {
int ifindex;
};
+struct bpf_attach_info {
+ __u32 flow_dissector_id;
+};
+
static int dump_link_nlmsg(void *cookie, void *msg, struct nlattr **tb)
{
struct bpf_netdev_t *netinfo = cookie;
@@ -180,8 +187,43 @@ static int show_dev_tc_bpf(int sock, unsigned int nl_pid,
return 0;
}
+static int query_flow_dissector(struct bpf_attach_info *attach_info)
+{
+ __u32 prog_ids[1] = {0};
+ __u32 prog_cnt = ARRAY_SIZE(prog_ids);
+ __u32 attach_flags;
+ int fd;
+ int err;
+
+ fd = open("/proc/self/ns/net", O_RDONLY);
+ if (fd < 0) {
+ p_err("can't open /proc/self/ns/net: %d",
+ strerror(errno));
+ return -1;
+ }
+ err = bpf_prog_query(fd, BPF_FLOW_DISSECTOR, 0,
+ &attach_flags, prog_ids, &prog_cnt);
+ close(fd);
+ if (err) {
+ if (errno == EINVAL) {
+ /* Older kernel's don't support querying
+ * flow dissector programs.
+ */
+ return 0;
+ }
+ p_err("can't query prog: %s", strerror(errno));
+ return -1;
+ }
+
+ if (prog_cnt == 1)
+ attach_info->flow_dissector_id = prog_ids[0];
+
+ return 0;
+}
+
static int do_show(int argc, char **argv)
{
+ struct bpf_attach_info attach_info = {};
int i, sock, ret, filter_idx = -1;
struct bpf_netdev_t dev_array;
unsigned int nl_pid;
@@ -199,6 +241,10 @@ static int do_show(int argc, char **argv)
usage();
}
+ ret = query_flow_dissector(&attach_info);
+ if (ret)
+ return -1;
+
sock = libbpf_netlink_open(&nl_pid);
if (sock < 0) {
fprintf(stderr, "failed to open netlink sock\n");
@@ -227,6 +273,12 @@ static int do_show(int argc, char **argv)
}
NET_END_ARRAY("\n");
}
+
+ NET_START_ARRAY("flow_dissector", "%s:\n");
+ if (attach_info.flow_dissector_id > 0)
+ NET_DUMP_UINT("id", "id %u", attach_info.flow_dissector_id);
+ NET_END_ARRAY("\n");
+
NET_END_OBJECT;
if (json_output)
jsonw_end_array(json_wtr);
--
2.21.0.593.g511ec345e18-goog
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH bpf-next 1/2] bpf: support BPF_PROG_QUERY for BPF_FLOW_DISSECTOR attach_type
2019-04-23 23:21 [PATCH bpf-next 1/2] bpf: support BPF_PROG_QUERY for BPF_FLOW_DISSECTOR attach_type Stanislav Fomichev
2019-04-23 23:22 ` [PATCH bpf-next 2/2] bpftool: show flow_dissector attachment status Stanislav Fomichev
@ 2019-04-23 23:28 ` Jakub Kicinski
2019-04-24 0:12 ` Stanislav Fomichev
2019-04-24 18:48 ` kbuild test robot
2 siblings, 1 reply; 9+ messages in thread
From: Jakub Kicinski @ 2019-04-23 23:28 UTC (permalink / raw)
To: Stanislav Fomichev; +Cc: netdev, bpf, davem, ast, daniel, quentin.monnet
On Tue, 23 Apr 2019 16:21:59 -0700, Stanislav Fomichev wrote:
> + rcu_read_lock();
> + attached = rcu_dereference(net->flow_dissector_prog);
> + if (attached) {
> + cnt = 1;
> + if (prog_ids &&
> + copy_to_user(prog_ids, &attached->aux->id, sizeof(u32))) {
Not sure you can do copy_to_user inside an RCU section, doesn't it
sleep?
> + rcu_read_unlock();
> + return -EFAULT;
> + }
> + }
> + rcu_read_unlock();
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH bpf-next 2/2] bpftool: show flow_dissector attachment status
2019-04-23 23:22 ` [PATCH bpf-next 2/2] bpftool: show flow_dissector attachment status Stanislav Fomichev
@ 2019-04-23 23:32 ` Jakub Kicinski
2019-04-24 0:13 ` Stanislav Fomichev
2019-04-24 8:12 ` Quentin Monnet
1 sibling, 1 reply; 9+ messages in thread
From: Jakub Kicinski @ 2019-04-23 23:32 UTC (permalink / raw)
To: Stanislav Fomichev; +Cc: netdev, bpf, davem, ast, daniel, quentin.monnet
On Tue, 23 Apr 2019 16:22:00 -0700, Stanislav Fomichev wrote:
> +static int query_flow_dissector(struct bpf_attach_info *attach_info)
> +{
> + __u32 prog_ids[1] = {0};
> + __u32 prog_cnt = ARRAY_SIZE(prog_ids);
> + __u32 attach_flags;
> + int fd;
> + int err;
reverse christmas tree, please :)
Move the init into the code if necessary.
> + fd = open("/proc/self/ns/net", O_RDONLY);
> + if (fd < 0) {
> + p_err("can't open /proc/self/ns/net: %d",
> + strerror(errno));
> + return -1;
> + }
> + err = bpf_prog_query(fd, BPF_FLOW_DISSECTOR, 0,
> + &attach_flags, prog_ids, &prog_cnt);
> + close(fd);
> + if (err) {
> + if (errno == EINVAL) {
> + /* Older kernel's don't support querying
> + * flow dissector programs.
> + */
> + return 0;
> + }
> + p_err("can't query prog: %s", strerror(errno));
> + return -1;
> + }
> +
> + if (prog_cnt == 1)
> + attach_info->flow_dissector_id = prog_ids[0];
So the count can only be 0 or 1? Hm.
> + return 0;
> +}
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH bpf-next 1/2] bpf: support BPF_PROG_QUERY for BPF_FLOW_DISSECTOR attach_type
2019-04-23 23:28 ` [PATCH bpf-next 1/2] bpf: support BPF_PROG_QUERY for BPF_FLOW_DISSECTOR attach_type Jakub Kicinski
@ 2019-04-24 0:12 ` Stanislav Fomichev
0 siblings, 0 replies; 9+ messages in thread
From: Stanislav Fomichev @ 2019-04-24 0:12 UTC (permalink / raw)
To: Jakub Kicinski
Cc: Stanislav Fomichev, netdev, bpf, davem, ast, daniel, quentin.monnet
On 04/23, Jakub Kicinski wrote:
> On Tue, 23 Apr 2019 16:21:59 -0700, Stanislav Fomichev wrote:
> > + rcu_read_lock();
> > + attached = rcu_dereference(net->flow_dissector_prog);
> > + if (attached) {
> > + cnt = 1;
> > + if (prog_ids &&
> > + copy_to_user(prog_ids, &attached->aux->id, sizeof(u32))) {
>
> Not sure you can do copy_to_user inside an RCU section, doesn't it
> sleep?
Good point, I need to copy that aux->id somewhere and exit rcu section.
> > + rcu_read_unlock();
> > + return -EFAULT;
> > + }
> > + }
> > + rcu_read_unlock();
>
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH bpf-next 2/2] bpftool: show flow_dissector attachment status
2019-04-23 23:32 ` Jakub Kicinski
@ 2019-04-24 0:13 ` Stanislav Fomichev
0 siblings, 0 replies; 9+ messages in thread
From: Stanislav Fomichev @ 2019-04-24 0:13 UTC (permalink / raw)
To: Jakub Kicinski
Cc: Stanislav Fomichev, netdev, bpf, davem, ast, daniel, quentin.monnet
On 04/23, Jakub Kicinski wrote:
> On Tue, 23 Apr 2019 16:22:00 -0700, Stanislav Fomichev wrote:
> > +static int query_flow_dissector(struct bpf_attach_info *attach_info)
> > +{
> > + __u32 prog_ids[1] = {0};
> > + __u32 prog_cnt = ARRAY_SIZE(prog_ids);
> > + __u32 attach_flags;
> > + int fd;
> > + int err;
>
> reverse christmas tree, please :)
>
> Move the init into the code if necessary.
Ack, initialization didn't let me do that. But I think I can drop it, I
don't look prog_cnt in the syscall, maybe I should :-/
> > + fd = open("/proc/self/ns/net", O_RDONLY);
> > + if (fd < 0) {
> > + p_err("can't open /proc/self/ns/net: %d",
> > + strerror(errno));
> > + return -1;
> > + }
> > + err = bpf_prog_query(fd, BPF_FLOW_DISSECTOR, 0,
> > + &attach_flags, prog_ids, &prog_cnt);
> > + close(fd);
> > + if (err) {
> > + if (errno == EINVAL) {
> > + /* Older kernel's don't support querying
> > + * flow dissector programs.
> > + */
> > + return 0;
> > + }
> > + p_err("can't query prog: %s", strerror(errno));
> > + return -1;
> > + }
> > +
> > + if (prog_cnt == 1)
> > + attach_info->flow_dissector_id = prog_ids[0];
>
> So the count can only be 0 or 1? Hm.
Yes, its either attached or not; there is nothing like prog_array.
> > + return 0;
> > +}
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH bpf-next 2/2] bpftool: show flow_dissector attachment status
2019-04-23 23:22 ` [PATCH bpf-next 2/2] bpftool: show flow_dissector attachment status Stanislav Fomichev
2019-04-23 23:32 ` Jakub Kicinski
@ 2019-04-24 8:12 ` Quentin Monnet
2019-04-24 15:42 ` Stanislav Fomichev
1 sibling, 1 reply; 9+ messages in thread
From: Quentin Monnet @ 2019-04-24 8:12 UTC (permalink / raw)
To: Stanislav Fomichev, netdev, bpf; +Cc: davem, ast, daniel, jakub.kicinski
2019-04-23 16:22 UTC-0700 ~ Stanislav Fomichev <sdf@google.com>
> Right now there is no way to query whether BPF flow_dissector program
> is attached to a network namespace or not. In previous commit, I added
> support for querying that info, show it when doing `bpftool net`:
>
> $ bpftool prog loadall ./bpf_flow.o \
> /sys/fs/bpf/flow type flow_dissector \
> pinmaps /sys/fs/bpf/flow
> $ bpftool prog
> 3: flow_dissector name _dissect tag 8c9e917b513dd5cc gpl
> loaded_at 2019-04-23T16:14:48-0700 uid 0
> xlated 656B jited 461B memlock 4096B map_ids 1,2
> btf_id 1
> ...
>
> $ bpftool net -j
> [{"xdp":[],"tc":[],"flow_dissector":[]}]
>
> $ bpftool prog attach pinned \
> /sys/fs/bpf/flow/flow_dissector flow_dissector
> $ bpftool net -j
> [{"xdp":[],"tc":[],"flow_dissector":["id":3]}]
>
> Doesn't show up in a different net namespace:
> $ ip netns add test
> $ ip netns exec test bpftool net -j
> [{"xdp":[],"tc":[],"flow_dissector":[]}]
>
> Non-json output:
> $ bpftool net
> xdp:
>
> tc:
>
> flow_dissector:
> id 3
>
> Signed-off-by: Stanislav Fomichev <sdf@google.com>
> ---
> tools/bpf/bpftool/net.c | 52 +++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 52 insertions(+)
>
> diff --git a/tools/bpf/bpftool/net.c b/tools/bpf/bpftool/net.c
> index db0e7de49d49..afe0903201e2 100644
> --- a/tools/bpf/bpftool/net.c
> +++ b/tools/bpf/bpftool/net.c
> @@ -48,6 +51,10 @@ struct bpf_filter_t {
> int ifindex;
> };
>
> +struct bpf_attach_info {
> + __u32 flow_dissector_id;
> +};
> +
> static int dump_link_nlmsg(void *cookie, void *msg, struct nlattr **tb)
> {
> struct bpf_netdev_t *netinfo = cookie;
> @@ -180,8 +187,43 @@ static int show_dev_tc_bpf(int sock, unsigned int nl_pid,
> return 0;
> }
>
> +static int query_flow_dissector(struct bpf_attach_info *attach_info)
> +{
> + __u32 prog_ids[1] = {0};
> + __u32 prog_cnt = ARRAY_SIZE(prog_ids);
> + __u32 attach_flags;
> + int fd;
> + int err;
> +
> + fd = open("/proc/self/ns/net", O_RDONLY);
> + if (fd < 0) {
> + p_err("can't open /proc/self/ns/net: %d",
> + strerror(errno));
> + return -1;
> + }
> + err = bpf_prog_query(fd, BPF_FLOW_DISSECTOR, 0,
> + &attach_flags, prog_ids, &prog_cnt);
> + close(fd);
> + if (err) {
> + if (errno == EINVAL) {
> + /* Older kernel's don't support querying
> + * flow dissector programs.
> + */
> + return 0;
Hi Stanislav,
If we handle the "error" gracefully here, should we maybe reset errno to
0 before returning? Batch mode, for example, stops processing commands
when it sees that errno is set, but we probably want it to continue in
the current case (commit 39c9f10639a3 addressed something similar for
"bpftool cgroup tree").
> + }
> + p_err("can't query prog: %s", strerror(errno));
> + return -1;
> + }
> +
> + if (prog_cnt == 1)
> + attach_info->flow_dissector_id = prog_ids[0];
> +
> + return 0;
> +}
> +
> static int do_show(int argc, char **argv)
> {
> + struct bpf_attach_info attach_info = {};
> int i, sock, ret, filter_idx = -1;
> struct bpf_netdev_t dev_array;
> unsigned int nl_pid;
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH bpf-next 2/2] bpftool: show flow_dissector attachment status
2019-04-24 8:12 ` Quentin Monnet
@ 2019-04-24 15:42 ` Stanislav Fomichev
0 siblings, 0 replies; 9+ messages in thread
From: Stanislav Fomichev @ 2019-04-24 15:42 UTC (permalink / raw)
To: Quentin Monnet
Cc: Stanislav Fomichev, netdev, bpf, davem, ast, daniel, jakub.kicinski
On 04/24, Quentin Monnet wrote:
> 2019-04-23 16:22 UTC-0700 ~ Stanislav Fomichev <sdf@google.com>
> > Right now there is no way to query whether BPF flow_dissector program
> > is attached to a network namespace or not. In previous commit, I added
> > support for querying that info, show it when doing `bpftool net`:
> >
> > $ bpftool prog loadall ./bpf_flow.o \
> > /sys/fs/bpf/flow type flow_dissector \
> > pinmaps /sys/fs/bpf/flow
> > $ bpftool prog
> > 3: flow_dissector name _dissect tag 8c9e917b513dd5cc gpl
> > loaded_at 2019-04-23T16:14:48-0700 uid 0
> > xlated 656B jited 461B memlock 4096B map_ids 1,2
> > btf_id 1
> > ...
> >
> > $ bpftool net -j
> > [{"xdp":[],"tc":[],"flow_dissector":[]}]
> >
> > $ bpftool prog attach pinned \
> > /sys/fs/bpf/flow/flow_dissector flow_dissector
> > $ bpftool net -j
> > [{"xdp":[],"tc":[],"flow_dissector":["id":3]}]
> >
> > Doesn't show up in a different net namespace:
> > $ ip netns add test
> > $ ip netns exec test bpftool net -j
> > [{"xdp":[],"tc":[],"flow_dissector":[]}]
> >
> > Non-json output:
> > $ bpftool net
> > xdp:
> >
> > tc:
> >
> > flow_dissector:
> > id 3
> >
> > Signed-off-by: Stanislav Fomichev <sdf@google.com>
> > ---
> > tools/bpf/bpftool/net.c | 52 +++++++++++++++++++++++++++++++++++++++++
> > 1 file changed, 52 insertions(+)
> >
> > diff --git a/tools/bpf/bpftool/net.c b/tools/bpf/bpftool/net.c
> > index db0e7de49d49..afe0903201e2 100644
> > --- a/tools/bpf/bpftool/net.c
> > +++ b/tools/bpf/bpftool/net.c
>
> > @@ -48,6 +51,10 @@ struct bpf_filter_t {
> > int ifindex;
> > };
> > +struct bpf_attach_info {
> > + __u32 flow_dissector_id;
> > +};
> > +
> > static int dump_link_nlmsg(void *cookie, void *msg, struct nlattr **tb)
> > {
> > struct bpf_netdev_t *netinfo = cookie;
> > @@ -180,8 +187,43 @@ static int show_dev_tc_bpf(int sock, unsigned int nl_pid,
> > return 0;
> > }
> > +static int query_flow_dissector(struct bpf_attach_info *attach_info)
> > +{
> > + __u32 prog_ids[1] = {0};
> > + __u32 prog_cnt = ARRAY_SIZE(prog_ids);
> > + __u32 attach_flags;
> > + int fd;
> > + int err;
> > +
> > + fd = open("/proc/self/ns/net", O_RDONLY);
> > + if (fd < 0) {
> > + p_err("can't open /proc/self/ns/net: %d",
> > + strerror(errno));
> > + return -1;
> > + }
> > + err = bpf_prog_query(fd, BPF_FLOW_DISSECTOR, 0,
> > + &attach_flags, prog_ids, &prog_cnt);
> > + close(fd);
> > + if (err) {
> > + if (errno == EINVAL) {
> > + /* Older kernel's don't support querying
> > + * flow dissector programs.
> > + */
> > + return 0;
>
> Hi Stanislav,
>
> If we handle the "error" gracefully here, should we maybe reset errno to 0
> before returning? Batch mode, for example, stops processing commands when it
> sees that errno is set, but we probably want it to continue in the current
> case (commit 39c9f10639a3 addressed something similar for "bpftool cgroup
> tree").
Oh, I didn't know that. Sure, will do!
> > + }
> > + p_err("can't query prog: %s", strerror(errno));
> > + return -1;
> > + }
> > +
> > + if (prog_cnt == 1)
> > + attach_info->flow_dissector_id = prog_ids[0];
> > +
> > + return 0;
> > +}
> > +
> > static int do_show(int argc, char **argv)
> > {
> > + struct bpf_attach_info attach_info = {};
> > int i, sock, ret, filter_idx = -1;
> > struct bpf_netdev_t dev_array;
> > unsigned int nl_pid;
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH bpf-next 1/2] bpf: support BPF_PROG_QUERY for BPF_FLOW_DISSECTOR attach_type
2019-04-23 23:21 [PATCH bpf-next 1/2] bpf: support BPF_PROG_QUERY for BPF_FLOW_DISSECTOR attach_type Stanislav Fomichev
2019-04-23 23:22 ` [PATCH bpf-next 2/2] bpftool: show flow_dissector attachment status Stanislav Fomichev
2019-04-23 23:28 ` [PATCH bpf-next 1/2] bpf: support BPF_PROG_QUERY for BPF_FLOW_DISSECTOR attach_type Jakub Kicinski
@ 2019-04-24 18:48 ` kbuild test robot
2 siblings, 0 replies; 9+ messages in thread
From: kbuild test robot @ 2019-04-24 18:48 UTC (permalink / raw)
To: Stanislav Fomichev
Cc: kbuild-all, netdev, bpf, davem, ast, daniel, jakub.kicinski,
quentin.monnet, Stanislav Fomichev
[-- Attachment #1: Type: text/plain, Size: 2396 bytes --]
Hi Stanislav,
Thank you for the patch! Yet something to improve:
[auto build test ERROR on bpf-next/master]
url: https://github.com/0day-ci/linux/commits/Stanislav-Fomichev/bpf-support-BPF_PROG_QUERY-for-BPF_FLOW_DISSECTOR-attach_type/20190424-235216
base: https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git master
config: sparc64-allnoconfig (attached as .config)
compiler: sparc64-linux-gnu-gcc (Debian 7.2.0-11) 7.2.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# save the attached .config to linux build tree
GCC_VERSION=7.2.0 make.cross ARCH=sparc64
If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp@intel.com>
All errors (new ones prefixed by >>):
In file included from include/net/net_namespace.h:37:0,
from include/linux/inet.h:46,
from include/linux/sunrpc/msg_prot.h:204,
from include/linux/sunrpc/auth.h:16,
from include/linux/nfs_fs.h:31,
from arch/sparc//kernel/sys_sparc32.c:25:
>> include/linux/skbuff.h:1268:12: error: 'skb_flow_dissector_prog_query' defined but not used [-Werror=unused-function]
static int skb_flow_dissector_prog_query(const union bpf_attr *attr,
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors
vim +/skb_flow_dissector_prog_query +1268 include/linux/skbuff.h
1255
1256 void skb_flow_dissector_init(struct flow_dissector *flow_dissector,
1257 const struct flow_dissector_key *key,
1258 unsigned int key_count);
1259
1260 #ifdef CONFIG_NET
1261 int skb_flow_dissector_prog_query(const union bpf_attr *attr,
1262 union bpf_attr __user *uattr);
1263 int skb_flow_dissector_bpf_prog_attach(const union bpf_attr *attr,
1264 struct bpf_prog *prog);
1265
1266 int skb_flow_dissector_bpf_prog_detach(const union bpf_attr *attr);
1267 #else
> 1268 static int skb_flow_dissector_prog_query(const union bpf_attr *attr,
1269 union bpf_attr __user *uattr)
1270 {
1271 return -EOPNOTSUPP;
1272 }
1273
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 5232 bytes --]
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2019-04-24 18:49 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-04-23 23:21 [PATCH bpf-next 1/2] bpf: support BPF_PROG_QUERY for BPF_FLOW_DISSECTOR attach_type Stanislav Fomichev
2019-04-23 23:22 ` [PATCH bpf-next 2/2] bpftool: show flow_dissector attachment status Stanislav Fomichev
2019-04-23 23:32 ` Jakub Kicinski
2019-04-24 0:13 ` Stanislav Fomichev
2019-04-24 8:12 ` Quentin Monnet
2019-04-24 15:42 ` Stanislav Fomichev
2019-04-23 23:28 ` [PATCH bpf-next 1/2] bpf: support BPF_PROG_QUERY for BPF_FLOW_DISSECTOR attach_type Jakub Kicinski
2019-04-24 0:12 ` Stanislav Fomichev
2019-04-24 18:48 ` kbuild test robot
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).