On Tue, Nov 15, 2022 at 8:17 AM Toke Høiland-Jørgensen <toke@xxxxxxxxxx> wrote: > > Stanislav Fomichev <sdf@xxxxxxxxxx> writes: > > > The goal is to enable end-to-end testing of the metadata > > for AF_XDP. Current rx_timestamp kfunc returns current > > time which should be enough to exercise this new functionality. > > > > Cc: John Fastabend <john.fastabend@xxxxxxxxx> > > Cc: David Ahern <dsahern@xxxxxxxxx> > > Cc: Martin KaFai Lau <martin.lau@xxxxxxxxx> > > Cc: Jakub Kicinski <kuba@xxxxxxxxxx> > > Cc: Willem de Bruijn <willemb@xxxxxxxxxx> > > Cc: Jesper Dangaard Brouer <brouer@xxxxxxxxxx> > > Cc: Anatoly Burakov <anatoly.burakov@xxxxxxxxx> > > Cc: Alexander Lobakin <alexandr.lobakin@xxxxxxxxx> > > Cc: Magnus Karlsson <magnus.karlsson@xxxxxxxxx> > > Cc: Maryam Tahhan <mtahhan@xxxxxxxxxx> > > Cc: xdp-hints@xxxxxxxxxxxxxxx > > Cc: netdev@xxxxxxxxxxxxxxx > > Signed-off-by: Stanislav Fomichev <sdf@xxxxxxxxxx> > > --- > > drivers/net/veth.c | 14 ++++++++++++++ > > 1 file changed, 14 insertions(+) > > > > diff --git a/drivers/net/veth.c b/drivers/net/veth.c > > index 2a4592780141..c626580a2294 100644 > > --- a/drivers/net/veth.c > > +++ b/drivers/net/veth.c > > @@ -25,6 +25,7 @@ > > #include <linux/filter.h> > > #include <linux/ptr_ring.h> > > #include <linux/bpf_trace.h> > > +#include <linux/bpf_patch.h> > > #include <linux/net_tstamp.h> > > > > #define DRV_NAME "veth" > > @@ -1659,6 +1660,18 @@ static int veth_xdp(struct net_device *dev, struct netdev_bpf *xdp) > > } > > } > > > > +static void veth_unroll_kfunc(const struct bpf_prog *prog, u32 func_id, > > + struct bpf_patch *patch) > > +{ > > + if (func_id == xdp_metadata_kfunc_id(XDP_METADATA_KFUNC_RX_TIMESTAMP_SUPPORTED)) { > > + /* return true; */ > > + bpf_patch_append(patch, BPF_MOV64_IMM(BPF_REG_0, 1)); > > + } else if (func_id == xdp_metadata_kfunc_id(XDP_METADATA_KFUNC_RX_TIMESTAMP)) { > > + /* return ktime_get_mono_fast_ns(); */ > > + bpf_patch_append(patch, BPF_EMIT_CALL(ktime_get_mono_fast_ns)); > > + } > > +} > > So these look reasonable enough, but would be good to see some examples > of kfunc implementations that don't just BPF_CALL to a kernel function > (with those helper wrappers we were discussing before). Let's maybe add them if/when needed as we add more metadata support? xdp_metadata_export_to_skb has an example, and rfc 1/2 have more examples, so it shouldn't be a problem to resurrect them back at some point?