aboutsummaryrefslogtreecommitdiffstats
path: root/net/core/dev.c
diff options
context:
space:
mode:
authorMaciej Fijalkowski <maciejromanfijalkowski@gmail.com>2019-02-01 16:42:27 -0500
committerDaniel Borkmann <daniel@iogearbox.net>2019-02-01 17:37:51 -0500
commit01dde20ce04b3a18f1e91d6d1ee0ef484d20bbf2 (patch)
treed7ea9a4da4e887d66dc62250786073aab47d40ac /net/core/dev.c
parent6a5457618f62147aeac706d26ff28e0e57a324e3 (diff)
xdp: Provide extack messages when prog attachment failed
In order to provide more meaningful messages to user when the process of loading xdp program onto network interface failed, let's add extack messages within dev_change_xdp_fd. Suggested-by: Jakub Kicinski <jakub.kicinski@netronome.com> Signed-off-by: Maciej Fijalkowski <maciej.fijalkowski@intel.com> Acked-by: Jesper Dangaard Brouer <brouer@redhat.com> Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Diffstat (limited to 'net/core/dev.c')
-rw-r--r--net/core/dev.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/net/core/dev.c b/net/core/dev.c
index 8e276e0192a1..bfa4be42afff 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -7983,8 +7983,10 @@ int dev_change_xdp_fd(struct net_device *dev, struct netlink_ext_ack *extack,
7983 query = flags & XDP_FLAGS_HW_MODE ? XDP_QUERY_PROG_HW : XDP_QUERY_PROG; 7983 query = flags & XDP_FLAGS_HW_MODE ? XDP_QUERY_PROG_HW : XDP_QUERY_PROG;
7984 7984
7985 bpf_op = bpf_chk = ops->ndo_bpf; 7985 bpf_op = bpf_chk = ops->ndo_bpf;
7986 if (!bpf_op && (flags & (XDP_FLAGS_DRV_MODE | XDP_FLAGS_HW_MODE))) 7986 if (!bpf_op && (flags & (XDP_FLAGS_DRV_MODE | XDP_FLAGS_HW_MODE))) {
7987 NL_SET_ERR_MSG(extack, "underlying driver does not support XDP in native mode");
7987 return -EOPNOTSUPP; 7988 return -EOPNOTSUPP;
7989 }
7988 if (!bpf_op || (flags & XDP_FLAGS_SKB_MODE)) 7990 if (!bpf_op || (flags & XDP_FLAGS_SKB_MODE))
7989 bpf_op = generic_xdp_install; 7991 bpf_op = generic_xdp_install;
7990 if (bpf_op == bpf_chk) 7992 if (bpf_op == bpf_chk)
@@ -7992,11 +7994,15 @@ int dev_change_xdp_fd(struct net_device *dev, struct netlink_ext_ack *extack,
7992 7994
7993 if (fd >= 0) { 7995 if (fd >= 0) {
7994 if (__dev_xdp_query(dev, bpf_chk, XDP_QUERY_PROG) || 7996 if (__dev_xdp_query(dev, bpf_chk, XDP_QUERY_PROG) ||
7995 __dev_xdp_query(dev, bpf_chk, XDP_QUERY_PROG_HW)) 7997 __dev_xdp_query(dev, bpf_chk, XDP_QUERY_PROG_HW)) {
7998 NL_SET_ERR_MSG(extack, "native and generic XDP can't be active at the same time");
7996 return -EEXIST; 7999 return -EEXIST;
8000 }
7997 if ((flags & XDP_FLAGS_UPDATE_IF_NOEXIST) && 8001 if ((flags & XDP_FLAGS_UPDATE_IF_NOEXIST) &&
7998 __dev_xdp_query(dev, bpf_op, query)) 8002 __dev_xdp_query(dev, bpf_op, query)) {
8003 NL_SET_ERR_MSG(extack, "XDP program already attached");
7999 return -EBUSY; 8004 return -EBUSY;
8005 }
8000 8006
8001 prog = bpf_prog_get_type_dev(fd, BPF_PROG_TYPE_XDP, 8007 prog = bpf_prog_get_type_dev(fd, BPF_PROG_TYPE_XDP,
8002 bpf_op == ops->ndo_bpf); 8008 bpf_op == ops->ndo_bpf);