[PATCH v2 0/3] nvme-tcp: add IPv6 traffic class support
Geliang Tang <[email protected]> Sat, 8 Aug 2026 14:54:58 +0800
| Newsgroups | org.infradead.lists.linux-nvme,dev.linux.lists.mptcp,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