[PATCH v2 0/3] nvme-tcp: add IPv6 traffic class support

Geliang Tang <[email protected]>
Newsgroups dev.linux.lists.mptcp,org.infradead.lists.linux-nvme,org.kernel.vger.netdev
Message-ID <[email protected]>
From: Geliang Tang <[email protected]>

This series adds IPv6 traffic class (tclass) support to the NVMe/TCP
fabrics stack, mirroring the existing IPv4 TOS configuration.

The current code path only handles IPv4: nvme-fabrics exposes a 'tos'
option, the host (nvme-tcp) applies IP_TOS to each queue socket, and
the target (nvmet-tcp) reflects the value received on the wire. This
leaves no way to control or observe the IPv6 traffic class for NVMe/TCP
connections, which is a real gap for deployments running over IPv6 or
MPTCP subflows that need a non-default tclass.

The series is split into three patches following the natural
fabrics/host/target layering:

1. nvme-fabrics: add IPv6 traffic class option
   Parse the new 'tclass' option in nvmf_parse_options(), validate
   that it is in the 0-255 range, and store it in
   struct nvmf_ctrl_options. Use -1 to mean "transport default",
   matching the existing tos handling.

2. nvme-tcp: support IPv6 traffic class
   Advertise NVMF_OPT_TCLASS in the nvme_tcp transport and, when a
   tclass was provided, set IPV6_TCLASS on each queue socket. The
   existing IP_TOS path is left untouched so IPv4 behaviour is
   unchanged.

3. nvmet-tcp: support IPv6 traffic class
   On the target side, differentiate the socket family: for AF_INET
   keep the existing TOS handling, and for AF_INET6 read the traffic
   class from the incoming socket and apply it via IPV6_TCLASS.

Follow-up changes outside of this series expose the same option
through libnvme and the nvme-cli, so the new tclass can be selected
from the user-facing command line; those patches will be sent in a
separate series.

This was tested with the selftests mptcp_nvme.sh [1], extended in
"nvme: add tclass support" to pass "--tclass" on the host side and
validate that the value is reflected on the wire by the target.

v2:
 - Export and use the ip6_sock_set_tclass() helper in both target and host
   paths, aligning with the existing ip_sock_set_tos() usage.
 - Add CONFIG_IPV6 and AF_INET6 guards to avoid build failures when IPv6
   is disabled.
 - Use rcv_flowinfo from the target socket instead of np->tclass.

v1:
 - https://patchwork.kernel.org/project/linux-nvme/cover/[email protected]/

[1]
https://patchwork.kernel.org/project/linux-nvme/cover/[email protected]/

Geliang Tang (3):
  ipv6: extract and export ip6_sock_set_tclass helpers
  nvme-tcp: support IPv6 traffic class
  nvmet-tcp: support IPv6 traffic class

 drivers/nvme/host/fabrics.c | 18 ++++++++++++++++++
 drivers/nvme/host/fabrics.h |  3 +++
 drivers/nvme/host/tcp.c     |  8 +++++++-
 drivers/nvme/target/tcp.c   |  8 ++++++++
 include/net/ipv6.h          |  3 +++
 net/ipv6/ipv6_sockglue.c    | 31 +++++++++++++++++++++++--------
 6 files changed, 62 insertions(+), 9 deletions(-)

-- 
2.53.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.