From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-oi1-x232.google.com (mail-oi1-x232.google.com [IPv6:2607:f8b0:4864:20::232]) by mail.toke.dk (Postfix) with ESMTPS id A315AA15922 for ; Mon, 3 Jul 2023 22:15:38 +0200 (CEST) Authentication-Results: mail.toke.dk; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20221208 header.b=Hm1LUTkk Received: by mail-oi1-x232.google.com with SMTP id 5614622812f47-39ecf031271so3729613b6e.1 for ; Mon, 03 Jul 2023 13:15:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1688415336; x=1691007336; h=content-transfer-encoding:mime-version:subject:references :in-reply-to:message-id:cc:to:from:date:from:to:cc:subject:date :message-id:reply-to; bh=s1QpQGP9rvocuSnenq70u1UMswFFVxfOIHLX5ujR7Os=; b=Hm1LUTkkUP3O8GA6LbR5tH9/rOpH9HqEqSou8MDRZWdejP8Ira76tetUbuLPzYRBeU 1mk0hp7bKtayNU0wUGH/K2zJzXDKP4f6MVvplpyXrohZwCe3V9/rJt8k40LdMoOyESnA iOyCC5NPnR/OnEds6H0FD40AxlzKL4IuNGA/VUYy6QRCxeLUXdwZRzE71vO3dDqPCS/d s/zz0IblJI1NPeS5/RKILsrCsghQuUG+rKupvmcB3S+o8SKFbhy36fj4YPe8i17sG5uP //pd+8d0cIdJng1IoKy33MEhc4/KCa/Vk9WnaMPQJ1EQLLmoQd8M6rffCKZWL0ko/nXN AzZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1688415336; x=1691007336; h=content-transfer-encoding:mime-version:subject:references :in-reply-to:message-id:cc:to:from:date:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=s1QpQGP9rvocuSnenq70u1UMswFFVxfOIHLX5ujR7Os=; b=JBhML2OQf0Ij8+9t0x+f7RzDer2qEsj9omH+rr0+DPmqdgtr8R9rbYLVV3VWj7amKM vnqI04NXXk97nZXVSId9xhNSrzvWFqcEG5KyLlvFxuUhrpxnRE0XHpPUYqxocOWt558y 6iM9RMfDfUbPFKMyEVr2MVOFsKeX6C9j+VO88x4G43Va0hELofRjk+aBx2dlDl+8rPMy XQUaDzm2mz1SZTXkOpad9Z80H7uY8egaH/VfLKHePcRuSzSCBptpgy+YWWawDg6TSpHP gbjvNiEaX5RUhN67Cpfw7td3aLufaGtdNuhYRs7LupTeDhTclvzqVX5CyxgvY7djp40F AHaA== X-Gm-Message-State: AC+VfDyfwR3Df6ubXn9sCNc3EMDoZ4H07W+iTWrdRXp6bT8lY4Oy7VRm F/Lc8aS7EQo0FFLqtZgXTB8= X-Google-Smtp-Source: ACHHUZ5/X0zn73FlGhaYWI+V0OMUJlS++5inTN25v9AHyShBwBFgF5AVgcvp0IAU6UCdy7Ob4OhctA== X-Received: by 2002:a05:6808:318:b0:3a0:83cf:1d82 with SMTP id i24-20020a056808031800b003a083cf1d82mr10233954oie.22.1688415335902; Mon, 03 Jul 2023 13:15:35 -0700 (PDT) Received: from localhost ([2605:59c8:148:ba10::41f]) by smtp.gmail.com with ESMTPSA id g15-20020a17090ace8f00b002636e5c224asm6574612pju.56.2023.07.03.13.15.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 Jul 2023 13:15:35 -0700 (PDT) Date: Mon, 03 Jul 2023 13:15:34 -0700 From: John Fastabend To: Larysa Zaremba , bpf@vger.kernel.org Message-ID: <64a32c661648e_628d32085f@john.notmuch> In-Reply-To: <20230703181226.19380-10-larysa.zaremba@intel.com> References: <20230703181226.19380-1-larysa.zaremba@intel.com> <20230703181226.19380-10-larysa.zaremba@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Message-ID-Hash: YF62LMWT7CE6ZGLDFDPSWLNOPRUYDY6J X-Message-ID-Hash: YF62LMWT7CE6ZGLDFDPSWLNOPRUYDY6J X-MailFrom: john.fastabend@gmail.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: Larysa Zaremba , ast@kernel.org, daniel@iogearbox.net, andrii@kernel.org, martin.lau@linux.dev, song@kernel.org, yhs@fb.com, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@google.com, haoluo@google.com, jolsa@kernel.org, David Ahern , Jakub Kicinski , Willem de Bruijn , Jesper Dangaard Brouer , Anatoly Burakov , Alexander Lobakin , Magnus Karlsson , Maryam Tahhan , xdp-hints@xdp-project.net, netdev@vger.kernel.org X-Mailman-Version: 3.3.8 Precedence: list Subject: [xdp-hints] Re: [PATCH bpf-next v2 09/20] xdp: Add VLAN tag hint List-Id: XDP hardware hints design discussion Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: Larysa Zaremba wrote: > Implement functionality that enables drivers to expose VLAN tag > to XDP code. > > Signed-off-by: Larysa Zaremba > --- > Documentation/networking/xdp-rx-metadata.rst | 8 +++++++- > include/linux/netdevice.h | 2 ++ > include/net/xdp.h | 2 ++ > kernel/bpf/offload.c | 2 ++ > net/core/xdp.c | 20 ++++++++++++++++++++ > 5 files changed, 33 insertions(+), 1 deletion(-) > > diff --git a/Documentation/networking/xdp-rx-metadata.rst b/Documentation/networking/xdp-rx-metadata.rst > index 25ce72af81c2..ea6dd79a21d3 100644 > --- a/Documentation/networking/xdp-rx-metadata.rst > +++ b/Documentation/networking/xdp-rx-metadata.rst > @@ -18,7 +18,13 @@ Currently, the following kfuncs are supported. In the future, as more > metadata is supported, this set will grow: > > .. kernel-doc:: net/core/xdp.c > - :identifiers: bpf_xdp_metadata_rx_timestamp bpf_xdp_metadata_rx_hash > + :identifiers: bpf_xdp_metadata_rx_timestamp > + > +.. kernel-doc:: net/core/xdp.c > + :identifiers: bpf_xdp_metadata_rx_hash > + > +.. kernel-doc:: net/core/xdp.c > + :identifiers: bpf_xdp_metadata_rx_vlan_tag > > An XDP program can use these kfuncs to read the metadata into stack > variables for its own consumption. Or, to pass the metadata on to other > diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h > index b828c7a75be2..4fa4380e6d89 100644 > --- a/include/linux/netdevice.h > +++ b/include/linux/netdevice.h > @@ -1658,6 +1658,8 @@ struct xdp_metadata_ops { > int (*xmo_rx_timestamp)(const struct xdp_md *ctx, u64 *timestamp); > int (*xmo_rx_hash)(const struct xdp_md *ctx, u32 *hash, > enum xdp_rss_hash_type *rss_type); > + int (*xmo_rx_vlan_tag)(const struct xdp_md *ctx, u16 *vlan_tag, > + __be16 *vlan_proto); > }; > > /** > diff --git a/include/net/xdp.h b/include/net/xdp.h > index 6381560efae2..89c58f56ffc6 100644 > --- a/include/net/xdp.h > +++ b/include/net/xdp.h > @@ -389,6 +389,8 @@ void xdp_attachment_setup(struct xdp_attachment_info *info, > bpf_xdp_metadata_rx_timestamp) \ > XDP_METADATA_KFUNC(XDP_METADATA_KFUNC_RX_HASH, \ > bpf_xdp_metadata_rx_hash) \ > + XDP_METADATA_KFUNC(XDP_METADATA_KFUNC_RX_VLAN_TAG, \ > + bpf_xdp_metadata_rx_vlan_tag) \ > > enum { > #define XDP_METADATA_KFUNC(name, _) name, > diff --git a/kernel/bpf/offload.c b/kernel/bpf/offload.c > index 8a26cd8814c1..986e7becfd42 100644 > --- a/kernel/bpf/offload.c > +++ b/kernel/bpf/offload.c > @@ -848,6 +848,8 @@ void *bpf_dev_bound_resolve_kfunc(struct bpf_prog *prog, u32 func_id) > p = ops->xmo_rx_timestamp; > else if (func_id == bpf_xdp_metadata_kfunc_id(XDP_METADATA_KFUNC_RX_HASH)) > p = ops->xmo_rx_hash; > + else if (func_id == bpf_xdp_metadata_kfunc_id(XDP_METADATA_KFUNC_RX_VLAN_TAG)) > + p = ops->xmo_rx_vlan_tag; > out: > up_read(&bpf_devs_lock); > > diff --git a/net/core/xdp.c b/net/core/xdp.c > index 41e5ca8643ec..f6262c90e45f 100644 > --- a/net/core/xdp.c > +++ b/net/core/xdp.c > @@ -738,6 +738,26 @@ __bpf_kfunc int bpf_xdp_metadata_rx_hash(const struct xdp_md *ctx, u32 *hash, > return -EOPNOTSUPP; > } > > +/** > + * bpf_xdp_metadata_rx_vlan_tag - Get XDP packet outermost VLAN tag with protocol > + * @ctx: XDP context pointer. > + * @vlan_tag: Destination pointer for VLAN tag > + * @vlan_proto: Destination pointer for VLAN protocol identifier in network byte order. > + * > + * In case of success, vlan_tag contains VLAN tag, including 12 least significant bytes > + * containing VLAN ID, vlan_proto contains protocol identifier. Above is a bit confusing to me at least. The vlan tag would be both the 16bit TPID and 16bit TCI. What fields are to be included here? The VlanID or the full 16bit TCI meaning the PCP+DEI+VID? I think by "including 12 least significant bytes" you mean bits, but also not clear about those 4 other bits. I can likely figure it out in next patches from implementation but would be nice to clean up docs. > + * > + * Return: > + * * Returns 0 on success or ``-errno`` on error. > + * * ``-EOPNOTSUPP`` : device driver doesn't implement kfunc > + * * ``-ENODATA`` : VLAN tag was not stripped or is not available > + */ > +__bpf_kfunc int bpf_xdp_metadata_rx_vlan_tag(const struct xdp_md *ctx, u16 *vlan_tag, > + __be16 *vlan_proto) > +{ > + return -EOPNOTSUPP; > +} > + > __diag_pop(); > > BTF_SET8_START(xdp_metadata_kfunc_ids) > -- > 2.41.0 >