summaryrefslogtreecommitdiffstats
path: root/net/core/xdp.c
diff options
context:
space:
mode:
authorLorenzo Bianconi <lorenzo@kernel.org>2021-01-12 19:26:13 +0100
committerAlexei Starovoitov <ast@kernel.org>2021-01-20 14:10:35 -0800
commit89f479f0eccfc879e7bc0a69f44ed4a4639dfc32 (patch)
tree77c1f24da42e76c19c1267ea2d78ba7d0439cde2 /net/core/xdp.c
parent97a0e1ea7b41c2db762c1258632f6ccc22719510 (diff)
downloadlinux-stable-89f479f0eccfc879e7bc0a69f44ed4a4639dfc32.tar.gz
linux-stable-89f479f0eccfc879e7bc0a69f44ed4a4639dfc32.tar.bz2
linux-stable-89f479f0eccfc879e7bc0a69f44ed4a4639dfc32.zip
net, xdp: Introduce xdp_build_skb_from_frame utility routine
Introduce xdp_build_skb_from_frame utility routine to build the skb from xdp_frame. Respect to __xdp_build_skb_from_frame, xdp_build_skb_from_frame will allocate the skb object. Rely on xdp_build_skb_from_frame in veth driver. Introduce missing xdp metadata support in veth_xdp_rcv_one routine. Add missing metadata support in veth_xdp_rcv_one(). Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org> Signed-off-by: Daniel Borkmann <daniel@iogearbox.net> Reviewed-by: Toshiaki Makita <toshiaki.makita1@gmail.com> Acked-by: Jesper Dangaard Brouer <brouer@redhat.com> Link: https://lore.kernel.org/bpf/94ade9e853162ae1947941965193190da97457bc.1610475660.git.lorenzo@kernel.org Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Diffstat (limited to 'net/core/xdp.c')
-rw-r--r--net/core/xdp.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/net/core/xdp.c b/net/core/xdp.c
index aeb09ed0704c..0d2630a35c3e 100644
--- a/net/core/xdp.c
+++ b/net/core/xdp.c
@@ -557,3 +557,18 @@ struct sk_buff *__xdp_build_skb_from_frame(struct xdp_frame *xdpf,
return skb;
}
EXPORT_SYMBOL_GPL(__xdp_build_skb_from_frame);
+
+struct sk_buff *xdp_build_skb_from_frame(struct xdp_frame *xdpf,
+ struct net_device *dev)
+{
+ struct sk_buff *skb;
+
+ skb = kmem_cache_alloc(skbuff_head_cache, GFP_ATOMIC);
+ if (unlikely(!skb))
+ return NULL;
+
+ memset(skb, 0, offsetof(struct sk_buff, tail));
+
+ return __xdp_build_skb_from_frame(xdpf, skb, dev);
+}
+EXPORT_SYMBOL_GPL(xdp_build_skb_from_frame);