nvmf: deprecate automatic discovery listener

Currently we accept connections to the discovery
subsystem on any listener that has been added to
any subsystem (not just the discovery subsystem).

This is not proper behavior, especially for TCP.  TCP
defines port 8009 (not 4420) as the discovery port,
so the current behavior means that if NVM subsystems
are listening on port 4420, then the discovery
subsystem by default is listening there too.

For now, continue to allow connections, but print
a warning message when someone connects to the
discovery subsystem on a listener trid that wasn't
previously added.

Signed-off-by: Jim Harris <james.r.harris@intel.com>
Change-Id: I734bc49d1a21b2edfb675aef4b8551e2d0ccd4d7
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/11539
Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com>
Community-CI: Mellanox Build Bot
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Aleksey Marchuk <alexeymar@mellanox.com>
Reviewed-by: Shuhei Matsumoto <smatsumoto@nvidia.com>
This commit is contained in:
Jim Harris 2022-02-10 10:37:04 +00:00 committed by Tomasz Zawadzki
parent 5c80b1e5ab
commit 25bc221cee
2 changed files with 14 additions and 4 deletions

View File

@ -16,6 +16,11 @@ remove NVMe error injections.
Removed deprecated max_qpairs_per_ctrlr parameter from nvmf_create_transport RPC. Use
max_io_qpairs_per_ctrlr instead.
Deprecated the ability for hosts to connect to the discovery subsystem automatically on any
existing listener. Users should now explicitly add listeners for the discovery subsystem.
Host can still connect to the discovery subsystem as before, but a warning message will be
emitted if no listener was configured for the transport ID of the incoming connection.
### thread
Added `spdk_thread_exec_msg()` API.

View File

@ -1205,16 +1205,21 @@ spdk_nvmf_subsystem_listener_allowed(struct spdk_nvmf_subsystem *subsystem,
{
struct spdk_nvmf_subsystem_listener *listener;
if (!strcmp(subsystem->subnqn, SPDK_NVMF_DISCOVERY_NQN)) {
return true;
}
TAILQ_FOREACH(listener, &subsystem->listeners, link) {
if (spdk_nvme_transport_id_compare(listener->trid, trid) == 0) {
return true;
}
}
if (!strcmp(subsystem->subnqn, SPDK_NVMF_DISCOVERY_NQN)) {
SPDK_WARNLOG("Allowing connection to discovery subsystem on %s/%s/%s, "
"even though this listener was not added to the discovery "
"subsystem. This behavior is deprecated and will be removed "
"in a future release.\n",
spdk_nvme_transport_id_trtype_str(trid->trtype), trid->traddr, trid->trsvcid);
return true;
}
return false;
}