mbox series

[net-next,v5,00/21] ice: add PFCP filter support

Message ID 20240201122216.2634007-1-aleksander.lobakin@intel.com (mailing list archive)
Headers show
Series ice: add PFCP filter support | expand

Message

Alexander Lobakin Feb. 1, 2024, 12:21 p.m. UTC
Add support for creating PFCP filters in switchdev mode. Add pfcp module
that allows to create a PFCP-type netdev. The netdev then can be passed to
tc when creating a filter to indicate that PFCP filter should be created.

To add a PFCP filter, a special netdev must be created and passed to tc
command:

  ip link add pfcp0 type pfcp
  tc filter add dev eth0 ingress prio 1 flower pfcp_opts \
    1:12ab/ff:fffffffffffffff0 skip_hw action mirred egress redirect \
    dev pfcp0

Changes in iproute2 [1] are required to use pfcp_opts in tc.

ICE COMMS package is required as it contains PFCP profiles.

Part of this patchset modifies IP_TUNNEL_*_OPTs, which were previously
stored in a __be16. All possible values have already been used, making
it impossible to add new ones.

* 1-3: add new bitmap_{read,write}(), which is used later in the IP
       tunnel flags code (from Alexander's ARM64 MTE series[2]);
* 4-14: some bitmap code preparations also used later in IP tunnels;
* 15-17: convert IP tunnel flags from __be16 to a bitmap;
* 18-21: add PFCP module and support for it in ice.

[1] https://lore.kernel.org/netdev/20230614091758.11180-1-marcin.szycik@linux.intel.com
[2] https://lore.kernel.org/linux-kernel/20231218124033.551770-1-glider@google.com/
---
From v4[3]:
* rebase on top of 6.8-rc1;
* collect all the dependencies together in one series (did I get it
  right? :s);
* no functional changes.

v3: https://lore.kernel.org/intel-wired-lan/20230721071532.613888-1-marcin.szycik@linux.intel.com
v2: https://lore.kernel.org/intel-wired-lan/20230607112606.15899-1-marcin.szycik@linux.intel.com
v1: https://lore.kernel.org/intel-wired-lan/20230601131929.294667-1-marcin.szycik@linux.intel.com

[3] https://lore.kernel.org/netdev/20231207164911.14330-1-marcin.szycik@linux.intel.com
---

Alexander Lobakin (14):
  bitops: add missing prototype check
  bitops: make BYTES_TO_BITS() treewide-available
  bitops: let the compiler optimize {__,}assign_bit()
  linkmode: convert linkmode_{test,set,clear,mod}_bit() to macros
  s390/cio: rename bitmap_size() -> idset_bitmap_size()
  fs/ntfs3: add prefix to bitmap_size() and use BITS_TO_U64()
  btrfs: rename bitmap_set_bits() -> btrfs_bitmap_set_bits()
  tools: move alignment-related macros to new <linux/align.h>
  bitmap: introduce generic optimized bitmap_size()
  bitmap: make bitmap_{get,set}_value8() use bitmap_{read,write}()
  lib/bitmap: add compile-time test for __assign_bit() optimization
  ip_tunnel: use a separate struct to store tunnel params in the kernel
  ip_tunnel: convert __be16 tunnel flags to bitmaps
  lib/bitmap: add tests for IP tunnel flags conversion helpers

Alexander Potapenko (2):
  lib/test_bitmap: add tests for bitmap_{read,write}()
  lib/test_bitmap: use pr_info() for non-error messages

Marcin Szycik (2):
  ice: refactor ICE_TC_FLWR_FIELD_ENC_OPTS
  ice: Add support for PFCP hardware offload in switchdev

Michal Swiatkowski (1):
  pfcp: always set pfcp metadata

Syed Nayyar Waris (1):
  lib/bitmap: add bitmap_{read,write}()

Wojciech Drewek (1):
  pfcp: add PFCP module

 drivers/net/Kconfig                           |  13 +
 drivers/net/Makefile                          |   1 +
 .../net/ethernet/intel/ice/ice_flex_type.h    |   4 +-
 .../ethernet/intel/ice/ice_protocol_type.h    |  12 +
 drivers/net/ethernet/intel/ice/ice_switch.h   |   2 +
 drivers/net/ethernet/intel/ice/ice_tc_lib.h   |   8 +-
 .../ethernet/mellanox/mlx5/core/en/tc_tun.h   |   2 +-
 .../ethernet/mellanox/mlxsw/spectrum_ipip.h   |   2 +-
 fs/ntfs3/ntfs_fs.h                            |   4 +-
 include/linux/bitmap.h                        |  93 ++++--
 include/linux/bitops.h                        |  23 +-
 include/linux/cpumask.h                       |   2 +-
 include/linux/linkmode.h                      |  27 +-
 include/linux/netdevice.h                     |   7 +-
 include/net/dst_metadata.h                    |  10 +-
 include/net/flow_dissector.h                  |   2 +-
 include/net/gre.h                             |  70 ++--
 include/net/ip6_tunnel.h                      |   4 +-
 include/net/ip_tunnels.h                      | 139 ++++++--
 include/net/pfcp.h                            |  90 ++++++
 include/net/udp_tunnel.h                      |   4 +-
 include/uapi/linux/if_tunnel.h                |  36 +++
 include/uapi/linux/pkt_cls.h                  |  14 +
 tools/include/linux/align.h                   |  12 +
 tools/include/linux/bitmap.h                  |   9 +-
 tools/include/linux/bitops.h                  |   2 +
 tools/include/linux/mm.h                      |   5 +-
 drivers/md/dm-clone-metadata.c                |   5 -
 drivers/net/bareudp.c                         |  19 +-
 drivers/net/ethernet/intel/ice/ice_ddp.c      |   9 +
 drivers/net/ethernet/intel/ice/ice_switch.c   |  85 +++++
 drivers/net/ethernet/intel/ice/ice_tc_lib.c   |  68 +++-
 .../mellanox/mlx5/core/en/tc_tun_encap.c      |   6 +-
 .../mellanox/mlx5/core/en/tc_tun_geneve.c     |  12 +-
 .../mellanox/mlx5/core/en/tc_tun_gre.c        |   8 +-
 .../mellanox/mlx5/core/en/tc_tun_vxlan.c      |   9 +-
 .../net/ethernet/mellanox/mlx5/core/en_tc.c   |  16 +-
 .../ethernet/mellanox/mlxsw/spectrum_ipip.c   |  56 ++--
 .../ethernet/mellanox/mlxsw/spectrum_span.c   |  10 +-
 .../ethernet/netronome/nfp/flower/action.c    |  27 +-
 drivers/net/geneve.c                          |  44 ++-
 drivers/net/pfcp.c                            | 302 +++++++++++++++++
 drivers/net/vxlan/vxlan_core.c                |  14 +-
 drivers/s390/cio/idset.c                      |  12 +-
 fs/btrfs/free-space-cache.c                   |   8 +-
 fs/ntfs3/bitmap.c                             |   4 +-
 fs/ntfs3/fsntfs.c                             |   2 +-
 fs/ntfs3/index.c                              |  11 +-
 fs/ntfs3/super.c                              |   2 +-
 kernel/trace/trace_probe.c                    |   2 -
 lib/math/prime_numbers.c                      |   2 -
 lib/test_bitmap.c                             | 303 ++++++++++++++++--
 net/bridge/br_vlan_tunnel.c                   |   9 +-
 net/core/filter.c                             |  26 +-
 net/core/flow_dissector.c                     |  20 +-
 net/ipv4/fou_bpf.c                            |   2 +-
 net/ipv4/gre_demux.c                          |   2 +-
 net/ipv4/ip_gre.c                             | 144 +++++----
 net/ipv4/ip_tunnel.c                          | 109 +++++--
 net/ipv4/ip_tunnel_core.c                     |  82 +++--
 net/ipv4/ip_vti.c                             |  41 ++-
 net/ipv4/ipip.c                               |  33 +-
 net/ipv4/ipmr.c                               |   2 +-
 net/ipv4/udp_tunnel_core.c                    |   5 +-
 net/ipv6/addrconf.c                           |   3 +-
 net/ipv6/ip6_gre.c                            |  85 ++---
 net/ipv6/ip6_tunnel.c                         |  14 +-
 net/ipv6/sit.c                                |  38 ++-
 net/netfilter/ipvs/ip_vs_core.c               |   6 +-
 net/netfilter/ipvs/ip_vs_xmit.c               |  20 +-
 net/netfilter/nft_tunnel.c                    |  44 +--
 net/openvswitch/flow_netlink.c                |  61 ++--
 net/psample/psample.c                         |  26 +-
 net/sched/act_tunnel_key.c                    |  36 +--
 net/sched/cls_flower.c                        | 134 +++++++-
 tools/perf/util/probe-finder.c                |   4 +-
 76 files changed, 1965 insertions(+), 614 deletions(-)
 create mode 100644 include/net/pfcp.h
 create mode 100644 tools/include/linux/align.h
 create mode 100644 drivers/net/pfcp.c

Comments

Alexander Lobakin Feb. 6, 2024, 12:46 p.m. UTC | #1
From: Alexander Lobakin <aleksander.lobakin@intel.com>
Date: Thu, 1 Feb 2024 13:21:55 +0100

> Add support for creating PFCP filters in switchdev mode. Add pfcp module
> that allows to create a PFCP-type netdev. The netdev then can be passed to
> tc when creating a filter to indicate that PFCP filter should be created.

I believe folks agreed that bitmap_{read,write}() should stay inline,
ping then?

[...]

Thanks,
Olek
Jakub Kicinski Feb. 6, 2024, 3:37 p.m. UTC | #2
On Tue, 6 Feb 2024 13:46:44 +0100 Alexander Lobakin wrote:
> > Add support for creating PFCP filters in switchdev mode. Add pfcp module
> > that allows to create a PFCP-type netdev. The netdev then can be passed to
> > tc when creating a filter to indicate that PFCP filter should be created.  
> 
> I believe folks agreed that bitmap_{read,write}() should stay inline,
> ping then?

It's probably fine, IMHO. I mean, I think we agree that the rarely used
inlines should not sit in a header included by half of the kernel (not
an exaggeration). But IMHO a better fix would be to move out whatever
cpumask.h xarray.h and other common headers depend on to a cut-down
version rather than making your helpers not inline.

So I think all we need for now is for people to ack the respective
patches? Looks like cio and ntfs and missing acks, so are some of 
the bitops core patches.
Jakub Kicinski Feb. 7, 2024, 3:05 p.m. UTC | #3
On Tue, 6 Feb 2024 13:46:44 +0100 Alexander Lobakin wrote:
> > Add support for creating PFCP filters in switchdev mode. Add pfcp module
> > that allows to create a PFCP-type netdev. The netdev then can be passed to
> > tc when creating a filter to indicate that PFCP filter should be created.  
> 
> I believe folks agreed that bitmap_{read,write}() should stay inline,
> ping then?

Well, Dave dropped this from PW, again. Can you ping people to give you
the acks and repost? What's your plan?
Alexander Lobakin Feb. 12, 2024, 11:35 a.m. UTC | #4
From: Jakub Kicinski <kuba@kernel.org>
Date: Wed, 7 Feb 2024 07:05:35 -0800

> On Tue, 6 Feb 2024 13:46:44 +0100 Alexander Lobakin wrote:
>>> Add support for creating PFCP filters in switchdev mode. Add pfcp module
>>> that allows to create a PFCP-type netdev. The netdev then can be passed to
>>> tc when creating a filter to indicate that PFCP filter should be created.  
>>
>> I believe folks agreed that bitmap_{read,write}() should stay inline,
>> ping then?
> 
> Well, Dave dropped this from PW, again. Can you ping people to give you

Why was it dropped? :D

> the acks and repost? What's your plan?

Ufff, I thought people read their emails...

Yury, Konstantin, s390 folks? Could you please give some missing acks? I
don't want to ping everyone privately :z

Thanks,
Olek
Yury Norov Feb. 28, 2024, 4:46 p.m. UTC | #5
On Mon, Feb 12, 2024 at 12:35:38PM +0100, Alexander Lobakin wrote:
> From: Jakub Kicinski <kuba@kernel.org>
> Date: Wed, 7 Feb 2024 07:05:35 -0800
> 
> > On Tue, 6 Feb 2024 13:46:44 +0100 Alexander Lobakin wrote:
> >>> Add support for creating PFCP filters in switchdev mode. Add pfcp module
> >>> that allows to create a PFCP-type netdev. The netdev then can be passed to
> >>> tc when creating a filter to indicate that PFCP filter should be created.  
> >>
> >> I believe folks agreed that bitmap_{read,write}() should stay inline,
> >> ping then?
> > 
> > Well, Dave dropped this from PW, again. Can you ping people to give you
> 
> Why was it dropped? :D
> 
> > the acks and repost? What's your plan?
> 
> Ufff, I thought people read their emails...
> 
> Yury, Konstantin, s390 folks? Could you please give some missing acks? I
> don't want to ping everyone privately :z

Hi Alexander, Jakub,

I reviewed the series again and added my SOBs for bitmap-related
patches, and Acks or RBs for the rest, where appropriate.

Regarding the patch #17, I don't think that network-related tests
should be hosted in lib/test-bitmap. This is not a critical issue,
but Alexander, can you find a better place for the code?

The rest of the series is OK for me. I think Jakub wants to pull this
as a whole in his -net branch? If so please go ahead, if not - I can
pull bitmap-related part in bitmap-for-next.

Thanks,
Yury
Niklas Schnelle April 2, 2024, 10:59 a.m. UTC | #6
On Mon, 2024-02-12 at 12:35 +0100, Alexander Lobakin wrote:
> From: Jakub Kicinski <kuba@kernel.org>
> Date: Wed, 7 Feb 2024 07:05:35 -0800
> 
> > On Tue, 6 Feb 2024 13:46:44 +0100 Alexander Lobakin wrote:
> > > > Add support for creating PFCP filters in switchdev mode. Add pfcp module
> > > > that allows to create a PFCP-type netdev. The netdev then can be passed to
> > > > tc when creating a filter to indicate that PFCP filter should be created.  
> > > 
> > > I believe folks agreed that bitmap_{read,write}() should stay inline,
> > > ping then?
> > 
> > Well, Dave dropped this from PW, again. Can you ping people to give you
> 
> Why was it dropped? :D
> 
> > the acks and repost? What's your plan?
> 
> Ufff, I thought people read their emails...
> 
> Yury, Konstantin, s390 folks? Could you please give some missing acks? I
> don't want to ping everyone privately :z
> 
> Thanks,
> Olek
> 

I do see an Acked-by from Peter Oberparleiter for the s390/cio bit, so
as far as I can tell the s390 part has all Acks necessary, no?

Thanks,
Niklas
Alexander Lobakin April 2, 2024, 11 a.m. UTC | #7
From: Niklas Schnelle <schnelle@linux.ibm.com>
Date: Tue, 02 Apr 2024 12:59:19 +0200

> On Mon, 2024-02-12 at 12:35 +0100, Alexander Lobakin wrote:
>> From: Jakub Kicinski <kuba@kernel.org>
>> Date: Wed, 7 Feb 2024 07:05:35 -0800
>>
>>> On Tue, 6 Feb 2024 13:46:44 +0100 Alexander Lobakin wrote:
>>>>> Add support for creating PFCP filters in switchdev mode. Add pfcp module
>>>>> that allows to create a PFCP-type netdev. The netdev then can be passed to
>>>>> tc when creating a filter to indicate that PFCP filter should be created.  
>>>>
>>>> I believe folks agreed that bitmap_{read,write}() should stay inline,
>>>> ping then?
>>>
>>> Well, Dave dropped this from PW, again. Can you ping people to give you
>>
>> Why was it dropped? :D
>>
>>> the acks and repost? What's your plan?
>>
>> Ufff, I thought people read their emails...
>>
>> Yury, Konstantin, s390 folks? Could you please give some missing acks? I
>> don't want to ping everyone privately :z
>>
>> Thanks,
>> Olek
>>
> 
> I do see an Acked-by from Peter Oberparleiter for the s390/cio bit, so
> as far as I can tell the s390 part has all Acks necessary, no?

The series was already taken to net-next :D

> 
> Thanks,
> Niklas

Thanks,
Olek