mbox series

[v2,00/16] IPv6 APIs overhaul

Message ID 20241001081728.301272-1-rjarry@redhat.com (mailing list archive)
Headers
Series IPv6 APIs overhaul |

Message

Robin Jarry Oct. 1, 2024, 8:17 a.m. UTC
Hi everyone,

As discussed recently [1], here is a first draft of the IPv6 APIs rework. The
API change was announced before the 24.07 release [2]. This series is intended
for 24.11.

[1] http://inbox.dpdk.org/dev/D2SR8T1H39CJ.JRQFI6JEH0OX@redhat.com/
[2] https://git.dpdk.org/dpdk/commit/?id=835d4c41e0ab58a115c2170c886ba6d3cc1b5764

I tried to keep the patches as small as possible; unfortunately some of them
are quite big and cannot be broken down if we want to preserve a bisectable
tree.

Let me know what you think.

Thanks!

Cc: Morten Brørup <mb@smartsharesystems.com>
Cc: Stephen Hemminger <stephen@networkplumber.org>
Cc: Vladimir Medvedkin <vladimir.medvedkin@intel.com>
Cc: Konstantin Ananyev <konstantin.ananyev@huawei.com>
Cc: Bruce Richardson <bruce.richardson@intel.com>

Changelog:

v2:

- added RTE_IPV6_ADDR helper macro
- added more multicast address utils
- updated 24.11 changelog
- added ipv6 header version check function

Robin Jarry (16):
  net: split raw checksum functions in separate header
  net: split ipv6 symbols in separate header
  net: add structure for ipv6 addresses
  net: use ipv6 structure for header addresses
  fib6,rib6,lpm6: use ipv6 addr struct
  net: add ipv6 address utilities
  fib6,rib6,lpm6: use ipv6 utils
  graph,node: use ipv6 addr struct and utils
  pipeline: use ipv6 addr struct
  ipsec: use ipv6 addr struct
  thash: use ipv6 addr struct
  gro: use ipv6 addr struct
  rte_flow: use ipv6 addr struct
  rib6,fib6,lpm6: remove duplicate constants
  net: add utilities for well known ipv6 address types
  ipv6: add function to check ipv6 version

 MAINTAINERS                                 |    1 +
 app/graph/ethdev.c                          |   40 +-
 app/graph/ethdev.h                          |    9 +-
 app/graph/ip6_route.c                       |   47 +-
 app/graph/meson.build                       |    2 +-
 app/graph/neigh.c                           |   22 +-
 app/graph/neigh_priv.h                      |    4 +-
 app/graph/route.h                           |    8 +-
 app/test-fib/main.c                         |   51 +-
 app/test-flow-perf/actions_gen.c            |    4 +-
 app/test-flow-perf/items_gen.c              |    4 +-
 app/test-pipeline/pipeline_hash.c           |    4 +-
 app/test-pipeline/pipeline_lpm_ipv6.c       |   10 +-
 app/test-sad/main.c                         |   24 +-
 app/test/meson.build                        |    1 +
 app/test/packet_burst_generator.c           |    5 +-
 app/test/test_cryptodev_security_ipsec.c    |    1 +
 app/test/test_fib6.c                        |   93 +-
 app/test/test_fib6_perf.c                   |    8 +-
 app/test/test_ipfrag.c                      |    4 +-
 app/test/test_ipsec_sad.c                   |   44 +-
 app/test/test_lpm6.c                        |  523 ++---
 app/test/test_lpm6_data.h                   | 2025 ++++++++++---------
 app/test/test_lpm6_perf.c                   |   10 +-
 app/test/test_net_ipv6.c                    |  219 ++
 app/test/test_reassembly_perf.c             |   20 +-
 app/test/test_rib6.c                        |   65 +-
 app/test/test_table_combined.c              |    2 +-
 app/test/test_table_tables.c                |    8 +-
 app/test/test_thash.c                       |   46 +-
 doc/guides/rel_notes/deprecation.rst        |   42 -
 doc/guides/rel_notes/release_24_11.rst      |   17 +
 drivers/common/cnxk/cnxk_security.c         |    1 +
 drivers/crypto/cnxk/cn9k_cryptodev_ops.c    |    1 +
 drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c |    1 +
 drivers/net/bnxt/bnxt_flow.c                |   12 +-
 drivers/net/bonding/rte_eth_bond_pmd.c      |    4 +-
 drivers/net/cxgbe/cxgbe_flow.c              |   18 +-
 drivers/net/dpaa2/dpaa2_flow.c              |   22 +-
 drivers/net/hinic/hinic_pmd_flow.c          |    6 +-
 drivers/net/hinic/hinic_pmd_tx.c            |    2 +-
 drivers/net/hns3/hns3_flow.c                |    8 +-
 drivers/net/i40e/i40e_flow.c                |   12 +-
 drivers/net/iavf/iavf_fdir.c                |    8 +-
 drivers/net/iavf/iavf_fsub.c                |    8 +-
 drivers/net/iavf/iavf_ipsec_crypto.c        |    6 +-
 drivers/net/ice/ice_fdir_filter.c           |   12 +-
 drivers/net/ice/ice_switch_filter.c         |   16 +-
 drivers/net/igc/igc_flow.c                  |    4 +-
 drivers/net/ixgbe/ixgbe_flow.c              |   12 +-
 drivers/net/ixgbe/ixgbe_ipsec.c             |    4 +-
 drivers/net/mlx5/hws/mlx5dr_definer.c       |   36 +-
 drivers/net/mlx5/mlx5_flow.c                |    6 +-
 drivers/net/mlx5/mlx5_flow_dv.c             |   16 +-
 drivers/net/mlx5/mlx5_flow_hw.c             |   10 +-
 drivers/net/mlx5/mlx5_flow_verbs.c          |    8 +-
 drivers/net/nfp/flower/nfp_flower_flow.c    |   36 +-
 drivers/net/nfp/nfp_net_flow.c              |   44 +-
 drivers/net/qede/qede_filter.c              |    4 +-
 drivers/net/sfc/sfc_flow.c                  |   28 +-
 drivers/net/tap/tap_flow.c                  |    8 +-
 drivers/net/txgbe/txgbe_flow.c              |   12 +-
 drivers/net/txgbe/txgbe_ipsec.c             |    4 +-
 examples/ip_fragmentation/main.c            |   24 +-
 examples/ip_pipeline/cli.c                  |   12 +-
 examples/ip_pipeline/pipeline.c             |   17 +-
 examples/ip_pipeline/thread.c               |    2 +-
 examples/ip_reassembly/main.c               |   24 +-
 examples/ipsec-secgw/flow.c                 |   12 +-
 examples/ipsec-secgw/ipsec.c                |    8 +-
 examples/ipsec-secgw/ipsec_lpm_neon.h       |    7 +-
 examples/ipsec-secgw/ipsec_worker.c         |    6 +-
 examples/ipsec-secgw/ipsec_worker.h         |    4 +-
 examples/ipsec-secgw/rt.c                   |   22 +-
 examples/ipsec-secgw/sa.c                   |    4 +-
 examples/ipsec-secgw/sad.h                  |   12 +-
 examples/l3fwd-graph/main.c                 |   30 +-
 examples/l3fwd/l3fwd_fib.c                  |   39 +-
 examples/l3fwd/l3fwd_lpm.c                  |    8 +-
 examples/l3fwd/l3fwd_route.h                |    7 +-
 examples/l3fwd/lpm_route_parse.c            |    6 +-
 lib/ethdev/rte_flow.h                       |   23 +-
 lib/fib/meson.build                         |    4 +-
 lib/fib/rte_fib6.c                          |   19 +-
 lib/fib/rte_fib6.h                          |   15 +-
 lib/fib/trie.c                              |  117 +-
 lib/fib/trie.h                              |   18 +-
 lib/fib/trie_avx512.c                       |   38 +-
 lib/fib/trie_avx512.h                       |   10 +-
 lib/gro/gro_tcp6.c                          |    8 +-
 lib/gro/gro_tcp6.h                          |    6 +-
 lib/hash/rte_thash.h                        |   29 +-
 lib/ip_frag/rte_ip_frag.h                   |    1 +
 lib/ip_frag/rte_ipv6_reassembly.c           |    4 +-
 lib/ipsec/iph.h                             |    1 +
 lib/ipsec/rte_ipsec_sad.h                   |    7 +-
 lib/lpm/meson.build                         |    1 +
 lib/lpm/rte_lpm6.c                          |  147 +-
 lib/lpm/rte_lpm6.h                          |   17 +-
 lib/net/meson.build                         |    2 +
 lib/net/rte_cksum.h                         |  180 ++
 lib/net/rte_ip.h                            |  467 +----
 lib/net/rte_ip6.h                           |  654 ++++++
 lib/net/rte_net.c                           |    1 +
 lib/net/rte_net.h                           |    1 +
 lib/node/ip6_lookup.c                       |   21 +-
 lib/node/rte_node_ip6_api.h                 |    3 +-
 lib/pipeline/rte_swx_ipsec.c                |    7 +-
 lib/pipeline/rte_table_action.c             |   45 +-
 lib/pipeline/rte_table_action.h             |    7 +-
 lib/rib/meson.build                         |    2 +-
 lib/rib/rte_rib6.c                          |  112 +-
 lib/rib/rte_rib6.h                          |   27 +-
 lib/table/rte_table_lpm_ipv6.c              |   12 +-
 lib/table/rte_table_lpm_ipv6.h              |    4 +-
 lib/vhost/virtio_net.c                      |    1 +
 116 files changed, 3246 insertions(+), 2741 deletions(-)
 create mode 100644 app/test/test_net_ipv6.c
 create mode 100644 lib/net/rte_cksum.h
 create mode 100644 lib/net/rte_ip6.h
  

Comments

Morten Brørup Oct. 6, 2024, 9:04 a.m. UTC | #1
> From: Robin Jarry [mailto:rjarry@redhat.com]
> Sent: Tuesday, 1 October 2024 10.17
> 
> Hi everyone,
> 
> As discussed recently [1], here is a first draft of the IPv6 APIs
> rework. The
> API change was announced before the 24.07 release [2]. This series is
> intended
> for 24.11.
> 
> [1] http://inbox.dpdk.org/dev/D2SR8T1H39CJ.JRQFI6JEH0OX@redhat.com/
> [2]
> https://git.dpdk.org/dpdk/commit/?id=835d4c41e0ab58a115c2170c886ba6d3cc
> 1b5764
> 
> I tried to keep the patches as small as possible; unfortunately some of
> them
> are quite big and cannot be broken down if we want to preserve a
> bisectable
> tree.
> 
> Let me know what you think.
> 
> Thanks!

Sorry about the late review. And thank you for this series!

In addition to my patch specific comments, here's some general feedback for the series.

Mixing ip6 and ipv6, and IP6 and IPV6 makes it hard to guess names.
Please use ipv6 and IPV6 everywhere, also in file names.
On the other hand... If file names use "6" postfix to indicate IP Version 6, e.g. rte_fib6.h, rte_ip6.h, then stick with that; just make sure it is consistent.
My point is: Where possible, please be consistent in naming.
NB: For API/ABI compatibility, don't clean up existing names for consistency.

I recall seeing some other patch replacing hardcoded IPv6 addresses given as zero-terminated strings (which are, in fact, 17 byte in size) with arrays containing 16 hex integers, to fix some modern compiler warning about mixed sizes. If adding new hardcoded IPv6 addresses, please use { 0x12, 0x34, 0x56, ...} instead of "\x12\x34\x56...".

-Morten
  
Konstantin Ananyev Oct. 10, 2024, 3:27 p.m. UTC | #2
> 
> As discussed recently [1], here is a first draft of the IPv6 APIs rework. The
> API change was announced before the 24.07 release [2]. This series is intended
> for 24.11.
> 
> [1] http://inbox.dpdk.org/dev/D2SR8T1H39CJ.JRQFI6JEH0OX@redhat.com/
> [2] https://git.dpdk.org/dpdk/commit/?id=835d4c41e0ab58a115c2170c886ba6d3cc1b5764
> 
> I tried to keep the patches as small as possible; unfortunately some of them
> are quite big and cannot be broken down if we want to preserve a bisectable
> tree.
> 
> Let me know what you think.
> 
> Thanks!
> 
> Cc: Morten Brørup <mb@smartsharesystems.com>
> Cc: Stephen Hemminger <stephen@networkplumber.org>
> Cc: Vladimir Medvedkin <vladimir.medvedkin@intel.com>
> Cc: Konstantin Ananyev <konstantin.ananyev@huawei.com>
> Cc: Bruce Richardson <bruce.richardson@intel.com>
> 
> Changelog:
> 
> v2:
> 
> - added RTE_IPV6_ADDR helper macro
> - added more multicast address utils
> - updated 24.11 changelog
> - added ipv6 header version check function
> 
> 

Series-Acked-by: Konstantin Ananyev <konstantin.ananyev@huawei.com>

> --
> 2.46.1
>