add xdp_build_skb_from_frame utility routine
Subsystems (4)
cover add xdp_build_skb_from_frame utility routine
Introduce __xdp_build_skb_from_frame and xdp_build_skb_from_frame routines to build the skb from a 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/xdp_build_skb_from_frame in cpumap and veth code.
Lorenzo Bianconi (2):
net: xdp: introduce __xdp_build_skb_from_frame utility routine
net: xdp: introduce xdp_build_skb_from_frame utility routine
drivers/net/veth.c | 18 +++----------- include/net/xdp.h | 5 ++++ kernel/bpf/cpumap.c | 45 +--------------------------------- net/core/xdp.c | 59 +++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 68 insertions(+), 59 deletions(-)
Signature · 1 line
2.29.2
PATCH 1/2 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. Rely on __xdp_build_skb_from_frame in cpumap code.
--- include/net/xdp.h | 3 +++ kernel/bpf/cpumap.c | 45 +-------------------------------------------- net/core/xdp.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 48 insertions(+), 44 deletions(-)
include/net/xdp.h +3 -0
@@ -145,6 +145,9 @@ void xdp_warn(const char *msg, const char *func, const int line);#define XDP_WARN (msg) xdp_warn(msg, __func__, __LINE__)struct xdp_frame *xdp_convert_zc_to_xdp_frame (struct xdp_buff *xdp); +struct sk_buff *__xdp_build_skb_from_frame (struct xdp_frame *xdpf, +struct sk_buff *skb, +struct net_device *dev);static inline void xdp_convert_frame_to_buff (struct xdp_frame *frame,struct xdp_buff *xdp)
kernel/bpf/cpumap.c +1 -44
57 lines not on this page · raw message
net/core/xdp.c +44 -0
47 lines not on this page · raw message
Signature · 1 line
2.29.2
Re: [PATCH bpf-next 1/2] net: xdp: introduce __xdp_build_skb_from_frame utility routine
Quoted 10 lines · On Wed, 16 Dec 2020 19:38:33 +0100 Lorenzo Bianconi <[email protected]> wrote:
Introduce
__xdp_build_skb_from_frameutility routine to build the skb fromxdp_frame. Rely on__xdp_build_skb_from_framein cpumap code.Signed-off-by Lorenzo Bianconi <[email protected]>--- include/net/xdp.h | 3 +++ kernel/bpf/cpumap.c | 45 +-------------------------------------------- net/core/xdp.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 48 insertions(+), 44 deletions(-)
Signature · 4 lines
Best regards, Jesper Dangaard Brouer MSc.CS, Principal Kernel Engineer at Red Hat LinkedIn: http://www.linkedin.com/in/brouer
PATCH 2/2 net: xdp: introduce xdp_build_skb_from_frame utility routine
In reply to Lorenzo BianconiIntroduce 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.
--- drivers/net/veth.c | 18 +++--------------- include/net/xdp.h | 2 ++ net/core/xdp.c | 15 +++++++++++++++ 3 files changed, 20 insertions(+), 15 deletions(-)
drivers/net/veth.c +3 -15
@@ -567,16 +567,10 @@ static struct sk_buff *veth_xdp_rcv_one(struct veth_rq *rq,struct veth_xdp_tx_bq *bq, struct veth_stats *stats) { - void *hard_start = frame->data - frame->headroom; -int len = frame->len, delta =0 ; struct xdp_frame orig_frame;struct bpf_prog *xdp_prog; -unsigned int headroom;struct sk_buff *skb; -/* bpf_xdp_adjust_head() assures BPF cannot access xdp_frame area */ - hard_start -=sizeof (struct xdp_frame ); -rcu_read_lock (); xdp_prog =rcu_dereference (rq->xdp_prog);if (likely (xdp_prog)) {
@@ -590,8 +584,8 @@ static struct sk_buff *veth_xdp_rcv_one(struct veth_rq *rq,switch (act) {case XDP_PASS : - delta = frame->data - xdp.data; - len = xdp.data_end - xdp.data; +if (xdp_update_frame_from_buff (&xdp, frame)) + goto err_xdp;break ;case XDP_TX : orig_frame = *frame;
@@ -629,18 +623,12 @@ static struct sk_buff *veth_xdp_rcv_one(struct veth_rq *rq, }rcu_read_unlock (); - headroom =sizeof (struct xdp_frame ) + frame->headroom - delta; - skb =veth_build_skb (hard_start, headroom, len, frame->frame_sz); + skb =xdp_build_skb_from_frame (frame, rq->dev);if (!skb) {xdp_return_frame (frame); stats->rx_drops++; - goto err; } -xdp_release_frame (frame); -xdp_scrub_frame (frame); - skb->protocol =eth_type_trans (skb, rq->dev); -err:return skb; err_xdp:rcu_read_unlock ();
include/net/xdp.h +2 -0
@@ -148,6 +148,8 @@ struct xdp_frame *xdp_convert_zc_to_xdp_frame(struct xdp_buff *xdp);struct sk_buff *__xdp_build_skb_from_frame (struct xdp_frame *xdpf,struct sk_buff *skb,struct net_device *dev); +struct sk_buff *xdp_build_skb_from_frame (struct xdp_frame *xdpf, +struct net_device *dev);static inline void xdp_convert_frame_to_buff (struct xdp_frame *frame,struct xdp_buff *xdp)
net/core/xdp.c +15 -0
@@ -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);
Signature · 1 line
2.29.2
Re: [PATCH bpf-next 2/2] net: xdp: introduce xdp_build_skb_from_frame utility routine
Quoted 6 lines · Lorenzo Bianconi
Introduce
xdp_build_skb_from_frameutility routine to build the skb fromxdp_frame. Respect to__xdp_build_skb_from_frame,xdp_build_skb_from_framewill allocate the skb object. Rely onxdp_build_skb_from_framein veth driver.Signed-off-by Lorenzo Bianconi <[email protected]>
Thanks.
It seems you added missing metadata support in veth_xdp_rcv_one()? It might be better to note that in the commitlog.
The code looks fine to me.
Re: [PATCH bpf-next 2/2] net: xdp: introduce xdp_build_skb_from_frame utility routine
In reply to Lorenzo BianconiQuoted 11 lines · On Wed, 16 Dec 2020 19:38:34 +0100 Lorenzo Bianconi <[email protected]> wrote:
Introduce
xdp_build_skb_from_frameutility routine to build the skb fromxdp_frame. Respect to__xdp_build_skb_from_frame,xdp_build_skb_from_framewill allocate the skb object. Rely onxdp_build_skb_from_framein veth driver.Signed-off-by Lorenzo Bianconi <[email protected]>--- drivers/net/veth.c | 18 +++--------------- include/net/xdp.h | 2 ++ net/core/xdp.c | 15 +++++++++++++++ 3 files changed, 20 insertions(+), 15 deletions(-)
Signature · 4 lines
Best regards, Jesper Dangaard Brouer MSc.CS, Principal Kernel Engineer at Red Hat LinkedIn: http://www.linkedin.com/in/brouer
Quoted 5 lines
Introduce
__xdp_build_skb_from_frameandxdp_build_skb_from_frameroutines to build the skb from axdp_frame. Respect to__xdp_build_skb_from_frame,xdp_build_skb_from_framewill allocate the skb object.
Rely on __xdp_build_skb_from_frame/xdp_build_skb_from_frame in cpumap and veth code.
Hi Daniel/Alexei,
since this series is marked as "archived" in patchwork, do I need to resubmit it?
Regards,
Lorenzo
Quoted 14 lines
Lorenzo Bianconi (2):
net: xdp: introduce__xdp_build_skb_from_frameutility routine
net: xdp: introducexdp_build_skb_from_frameutility routinedrivers/net/veth.c | 18 +++----------- include/net/xdp.h | 5 ++++ kernel/bpf/cpumap.c | 45 +--------------------------------- net/core/xdp.c | 59 +++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 68 insertions(+), 59 deletions(-)Signature · 1 line
2.29.2
Daniel Borkmann
maintainerQuoted 7 lines · Lorenzo Bianconi
Quoted 5 lines
Introduce
__xdp_build_skb_from_frameandxdp_build_skb_from_frameroutines to build the skb from axdp_frame. Respect to__xdp_build_skb_from_frame,xdp_build_skb_from_framewill allocate the skb object.
Rely on __xdp_build_skb_from_frame/xdp_build_skb_from_frame in cpumap and veth code.since this series is marked as "archived" in patchwork, do I need to resubmit it?
Yes please do, afaik there was some minor feedback from Toshiaki which was not yet addressed from your side.
Thanks,
Daniel
Quoted 11 lines · Lorenzo Bianconi
Quoted 7 lines
Quoted 5 lines
Introduce
__xdp_build_skb_from_frameandxdp_build_skb_from_frameroutines to build the skb from axdp_frame. Respect to__xdp_build_skb_from_frame,xdp_build_skb_from_framewill allocate the skb object.
Rely on __xdp_build_skb_from_frame/xdp_build_skb_from_frame in cpumap and veth code.since this series is marked as "archived" in patchwork, do I need to resubmit it?
Yes please do, afaik there was some minor feedback from Toshiaki which was not yet addressed from your side.
ack, will do.
Regards,
Lorenzo
Quoted 4 lines
Thanks,
Daniel