From nobody Mon Apr 13 17:36:11 2026 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4fvZMc2SKnz6ZT2p for ; Mon, 13 Apr 2026 17:36:28 +0000 (UTC) (envelope-from asomers@gmail.com) Received: from mail-ed1-f48.google.com (mail-ed1-f48.google.com [209.85.208.48]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "WR4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4fvZMb3bmpz3PDK for ; Mon, 13 Apr 2026 17:36:27 +0000 (UTC) (envelope-from asomers@gmail.com) Authentication-Results: mx1.freebsd.org; none Received: by mail-ed1-f48.google.com with SMTP id 4fb4d7f45d1cf-671c4d08dc2so265319a12.3 for ; Mon, 13 Apr 2026 10:36:27 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1776101786; cv=none; d=google.com; s=arc-20240605; b=VK1y82fla6hY+LuQWVH3km1op4SlC6lZSfwQZFBrfmS6/KJiOqgx0Q05tUPNNBu2Lv EqO86LpMCsUtUA48K8US5IVMHnP0BIb2AshsLrx1wumqHQ391kepy8ZPtZcuWdt9wQGr Z8VYeiYd3j3G8NsDsyd/bwjJEFFt0rty7pavoFXSxuBCFFFdMc/DL/5Ik0WgY+fyjhmE sPHVHWGDJmeKgeh5rGrgFc6llZVpmK/D64Q1QBRfRmNh0YHtozpJ5bheiU7D93w7l9a2 TcRZli4WAy5GXiah39UKDY6XBtsTlcgL4ZpjoOPqjrj3+VYuk2TBWbvvI4O5Myk16aTE TpFw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version; bh=lzuWUjcyzos8Cfp8OyWG+exlnd52GeMtiOF+zOoSQ8c=; fh=TkXurbKcPm/66tD1gOxm0yQ9E4co5OX/L+JyJ41/nis=; b=BYF0YR+ZSCYsaY7lg3MkA1QW8jnaf3MHKl0wJd6vW8z8xr5Ee7W1+CQRPP/QaKN62e DwYndLG9rRtE8soEqnMSphO5WASDcKsk0D5oXMJs40p0oxJB0jx9BxfQiIjAuVUxLwzR +CkunlqelAlpagqA0H8Y2YEjO4d51ElS3bCJHnC4tSBw19qXk5kXCD3Jxf/SdAcNlvYG Gc+mTIfL1fDv5+0aJa0SfuRBZbF1ILdieGvqWdxCG/XvmNkI/FwumpsbrLnaX7oPWXrp gvlQvBPK9oABsraTrJReRzYcBy0muyGRXbdrRX7V7GVi0UNR/9mKiNvDy1zMfKIdFvv6 RnOA==; darn=freebsd.org ARC-Authentication-Results: i=1; mx.google.com; arc=none X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776101786; x=1776706586; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=lzuWUjcyzos8Cfp8OyWG+exlnd52GeMtiOF+zOoSQ8c=; b=FuxjWonYBbxWFZw3WPuftj/3H58gUBRRSDnEerpdNtQVZC0UCbyK5XYTz5HI4HGwSW /TvdQL5Js9L9DrcnjLygZmYnktK6TnzCbUqeFwUt6H36+JzyhcG/Ip3FK2iottqh63oy Qi+UKzKQ8PSLuwZvdPMAIYj9R9MPZKSnk7h1H74ujdO3lwLEDx8Hp4H8bxUZekEcYEC7 ojbpCkhwZ2QK/Z+7WPJ/P06SPPDK0cpO1eZR7JI525q+5NEeSU/4h+vnGktMkkuqLBW4 PiJPCVy0YdTlYuPyWwfFyJykBo19jRhSyS5n6ESrr71Xnp5zS9IjwHL+ruT4nXFiDpmT dwGg== X-Forwarded-Encrypted: i=1; AFNElJ9seEmcV1llONgN8Xn2X4aRDZjNNQJN/BXLlzKAPOVPkcLt0LiI9m3T9yteRmKYe7dTZkiYLH41Uf47LxYAEe0UaltbQg==@freebsd.org X-Gm-Message-State: AOJu0Yxs2BZNIvxivP3l0O32RF08N7ni+p9yjzRK13haLAbIFUm05nAn D/BNxT5f0QV+tE9N1WIv6M212sbip8cx1DLlpHRC0NW+4QjwK7jYRxjwIGBTElDjgnLHgo9qcdj oc6hMkUX2HdM/Id3IhLAy+BMxvNlYra4= X-Gm-Gg: AeBDiesAGWXy8iVn/kdWUPL7Z7zIVnPSZGzEX5IWU5Hrmd2B7S/V1j4NrjKXZ007VDF rOzML3VYHTIxSMfcTXfUeIkrHzxjNZVbeGME2tfjujFtHoO0J+Pju+/KatFj6sfNu/UWKihssAe 7kl5Yz9NXIlsm3vZRZF9a/L2SzYBCtar66Xdt7BCwr64aKdUAe0hZ1onucwpVLSR0gfI3Cq8SVO KTtMTuCFOMZ/l+Eh5kVvoNDpVh3AU4LbHIR2lCbv0CVygQigAVu/dXRr62txMLXaCcNo3XQUCPy r9Dp69U9OplP3rw1yG6jTDCpGrxZCfeBonOXx5jsugLV4xjbG6GQqLQufo8BM0+hii4g X-Received: by 2002:a05:6402:440b:b0:66e:bad4:3f52 with SMTP id 4fb4d7f45d1cf-67077641317mr7013847a12.2.1776101785738; Mon, 13 Apr 2026 10:36:25 -0700 (PDT) List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org MIME-Version: 1.0 References: <202508062010.576KA2Mk062184@gitrepo.freebsd.org> In-Reply-To: From: Alan Somers Date: Mon, 13 Apr 2026 11:36:11 -0600 X-Gm-Features: AQROBzBUsdn3ZnjiHOI1ffcNBqDX_x1SIynFSNHQkrD0vHC5sgjwqWWh0DQJtUs Message-ID: Subject: Re: git: 66b5296f1b29 - main - ctld: Add support for NVMe over Fabrics To: John Baldwin Cc: src-committers@freebsd.org, dev-commits-src-all@freebsd.org, dev-commits-src-main@freebsd.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:15169, ipnet:209.85.128.0/17, country:US] X-Rspamd-Queue-Id: 4fvZMb3bmpz3PDK X-Spamd-Bar: ---- On Mon, Apr 13, 2026 at 10:56=E2=80=AFAM John Baldwin wro= te: > > On 4/13/26 11:51, Alan Somers wrote: > > On Wed, Aug 6, 2025 at 2:10=E2=80=AFPM John Baldwin w= rote: > >> > >> The branch main has been updated by jhb: > >> > >> URL: https://cgit.FreeBSD.org/src/commit/?id=3D66b5296f1b29083634e2875= ff08c32e7b6b866a8 > >> > >> commit 66b5296f1b29083634e2875ff08c32e7b6b866a8 > >> Author: John Baldwin > >> AuthorDate: 2025-08-06 19:57:50 +0000 > >> Commit: John Baldwin > >> CommitDate: 2025-08-06 19:59:13 +0000 > >> > >> ctld: Add support for NVMe over Fabrics > >> > >> While the overall structure is similar for NVMeoF controllers and > >> iSCSI targets, there are sufficient differences that NVMe support= uses > >> an alternate configuration syntax. > >> > >> - In authentication groups, permitted NVMeoF hosts can be allowed= by > >> names (NQNs) via "host-nqn" values (similar to "initiator-name"= for > >> iSCSI). Similarly, "host-address" accepts permitted host addre= sses > >> similar to "initiator-portal" for iSCSI. > >> > >> - A new "transport-group" context enumerates transports that can = be > >> used by a group of NVMeoF controllers similar to the "portal-gr= oup" > >> context for iSCSI. In this section, the "listen" keyword accep= ts a > >> transport as well as an address to permit other types of transp= orts > >> besides TCP in the future. The "foreign", "offload", and "redi= rect" > >> keywords are also not meaningful and thus not supported. > >> > >> - A new "controller" context describes an NVMeoF I/O controller > >> similar to the "target" context for iSCSI. One key difference = here > >> is that "lun" objects are replaced by "namespace" objects. How= ever, > >> a "namespace" can reference a named global lun permitting LUNs = to be > >> shared between iSCSI targets and NVMeoF controllers. > >> > >> NB: Authentication via CHAP is not implemented for NVMeoF. > >> > >> Reviewed by: imp > >> Sponsored by: Chelsio Communications > >> Differential Revision: https://reviews.freebsd.org/D48773 > > ... > >> +struct target * > >> +conf::add_controller(const char *name) > >> +{ > >> + if (!nvmf_nqn_valid_strict(name)) { > >> + log_warnx("controller name \"%s\" is invalid for NVMe"= , name); > >> + return nullptr; > >> + } > >> + > >> + /* > >> + * Normalize the name to lowercase to match iSCSI. > >> + */ > >> + std::string t_name(name); > >> + for (char &c : t_name) > >> + c =3D tolower(c); > > ... > > > > This makes it impossible to define an uppercase or mixed case target > > name in ctld. I guess the intent was to comply with rfc3722[^1]? > > Even so, it's surprising, because such target names used to work. > > It's also inconsistent, because it's still possible to create an > > uppercase target name using ctladm directly, like this: > > > > ctladm port -c -d iscsi -O cfiscsi_portal_group_tag=3D257 -O > > cfiscsi_target=3Diqn.2018-10.myhost:TESTVOL1 > > > > Should we warn the user if they specify an uppercase target name, or > > even fail to create it? > > > > [^1]: https://datatracker.ietf.org/doc/html/rfc3722 > > Note that this function is for NVMe, not iSCSI. iSCSI targets are create= d in > conf::add_target which has similar code: > > struct target * > conf::add_target(const char *name) > { > if (!valid_iscsi_name(name, log_warnx)) > return (nullptr); > > /* > * RFC 3722 requires us to normalize the name to lowercase. > */ > std::string t_name(name); > for (char &c : t_name) > c =3D tolower(c); > > Prior to the C++ commit, this change was already in place: > > struct target * > target_new(struct conf *conf, const char *name) > { > struct target *targ; > int i, len; > > targ =3D target_find(conf, name); > if (targ !=3D NULL) { > log_warnx("duplicated target \"%s\"", name); > return (NULL); > } > if (valid_iscsi_name(name, log_warnx) =3D=3D false) { > return (NULL); > } > targ =3D new target(); > targ->t_name =3D checked_strdup(name); > > /* > * RFC 3722 requires us to normalize the name to lowercase. > */ > len =3D strlen(name); > for (i =3D 0; i < len; i++) > targ->t_name[i] =3D tolower(targ->t_name[i]); > > targ->t_conf =3D conf; > TAILQ_INSERT_TAIL(&conf->conf_targets, targ, t_next); > > return (targ); > } > > This was present in commit 009ea47eb2d21856af4529aaaca32cd67748daea > which brought in the iSCSI target, so it has always been present > in ctld. > > Also, AFAICT, the names are still accepted, they are just normalized. > > I guess one difference is that before, target_new() called target_find() > with the non-normalized name to check for duplicates, and now we check > for duplicates after normalizing the name. I'm not sure how that worked > in the past in practice as you would have had two targets with the same > name (e.g. I wonder what the ctladm portlist output looked like for this > case and if it would have listed two ports with the same name)? I suspec= t > that was more by accident and probably didn't work properly in practice > (e.g. the kernel handoff ioctl used the normalized name when invoking > CTL_ISCSI, so connections to both "names" probably were always mapped to > only one of the connections, and finding a port during login processing > probably only found the first target, and only if the initiator gave the > all-lowercase name). > > That is to say, you didn't get an error before, but it didn't work, and > now it tells you that it doesn't work AFAICT. Excuse me, I spoke a little too soon. You are correct that ctld has been converting target names to lower case before registering them in the kernel for a long time. The change is that previously, if an initiator attempted to connect to an uppercase target name, ctld would accept it. That's because port_find_in_pg used strcasecmp in stable/14. But change 4b1aac931465f39c5c26bfa1d5539a428d340f20 removed strcasecmp, replacing it by the C++ STL's find method on std::unordered_map. So we used to accept connections case-insensitively, and now we accept them case-sensitively. To restore the previous behavior, should we add tolower() on the target_name in iscsi_connection::login() ?