Skip to content

Commit 9a4dd38

Browse files
committed
Move 'host_traddr' and 'host_iface' into fabrics configuration
Having 'host_traddr' and 'host_iface' as part of the controller structure is technically correct, but won't work for 'connect-all'. There we evaluate the contents of the discovery log page, and create new controllers based on that information. But as 'host_traddr' and 'host_iface' are Linux-only constructs, the spec (and the discovery log page) doesn't know about them, and can't provide us with that information. Signed-off-by: Hannes Reinecke <[email protected]>
1 parent 6b951c5 commit 9a4dd38

5 files changed

Lines changed: 28 additions & 21 deletions

File tree

libnvme/nvme.i

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,10 @@ static int discover_err = 0;
123123
temp.tos = -1;
124124
temp.ctrl_loss_tmo = NVMF_DEF_CTRL_LOSS_TMO;
125125
while (PyDict_Next($input, &pos, &key, &value)) {
126+
if (!PyUnicode_CompareWithASCIIString(key, "host_traddr"))
127+
temp.host_traddr = PyBytes_AsString(value);
128+
if (!PyUnicode_CompareWithASCIIString(key, "host_iface"))
129+
temp.host_iface = PyBytes_AsString(value);
126130
if (!PyUnicode_CompareWithASCIIString(key, "nr_io_queues"))
127131
temp.nr_io_queues = PyLong_AsLong(value);
128132
if (!PyUnicode_CompareWithASCIIString(key, "reconnect_delay"))
@@ -293,7 +297,6 @@ struct nvme_ctrl {
293297
%immutable transport;
294298
%immutable subsysnqn;
295299
%immutable traddr;
296-
%immutable host_traddr;
297300
%immutable trsvcid;
298301
%immutable address;
299302
%immutable firmware;
@@ -307,7 +310,6 @@ struct nvme_ctrl {
307310
char *transport;
308311
char *subsysnqn;
309312
char *traddr;
310-
char *host_traddr;
311313
char *trsvcid;
312314
char *dhchap_key;
313315
char *address;

src/nvme/fabrics.c

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,8 @@ static struct nvme_fabrics_config *merge_config(nvme_ctrl_t c,
170170
{
171171
struct nvme_fabrics_config *ctrl_cfg = nvme_ctrl_get_config(c);
172172

173+
UPDATE_CFG_OPTION(ctrl_cfg, cfg, host_traddr, NULL);
174+
UPDATE_CFG_OPTION(ctrl_cfg, cfg, host_iface, NULL);
173175
UPDATE_CFG_OPTION(ctrl_cfg, cfg, nr_io_queues, 0);
174176
UPDATE_CFG_OPTION(ctrl_cfg, cfg, nr_write_queues, 0);
175177
UPDATE_CFG_OPTION(ctrl_cfg, cfg, nr_poll_queues, 0);
@@ -438,9 +440,9 @@ static int build_options(nvme_host_t h, nvme_ctrl_t c, char **argstr)
438440
add_argument(argstr, "traddr",
439441
nvme_ctrl_get_traddr(c)) ||
440442
add_argument(argstr, "host_traddr",
441-
nvme_ctrl_get_host_traddr(c)) ||
443+
cfg->host_traddr) ||
442444
add_argument(argstr, "host_iface",
443-
nvme_ctrl_get_host_iface(c)) ||
445+
cfg->host_iface) ||
444446
add_argument(argstr, "trsvcid",
445447
nvme_ctrl_get_trsvcid(c)) ||
446448
(hostnqn && add_argument(argstr, "hostnqn", hostnqn)) ||
@@ -648,7 +650,8 @@ nvme_ctrl_t nvmf_connect_disc_entry(nvme_host_t h,
648650
nvme_msg(LOG_DEBUG, "lookup ctrl "
649651
"(transport: %s, traddr: %s, trsvcid %s)\n",
650652
transport, traddr, trsvcid);
651-
c = nvme_create_ctrl(e->subnqn, transport, traddr, NULL, NULL, trsvcid);
653+
c = nvme_create_ctrl(e->subnqn, transport, traddr,
654+
cfg->host_traddr, cfg->host_iface, trsvcid);
652655
if (!c) {
653656
nvme_msg(LOG_DEBUG, "skipping discovery entry, "
654657
"failed to allocate %s controller with traddr %s\n",

src/nvme/fabrics.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818

1919
/**
2020
* struct nvme_fabrics_config - Defines all linux nvme fabrics initiator options
21+
* @host_traddr: Host transport address
22+
* @host_iface: Host interface name
2123
* @queue_size: Number of IO queue entries
2224
* @nr_io_queues: Number of controller IO queues to establish
2325
* @reconnect_delay: Time between two consecutive reconnect attempts.
@@ -33,6 +35,8 @@
3335
* @data_digest: Generate/verify data digest (TCP)
3436
*/
3537
struct nvme_fabrics_config {
38+
char *host_traddr;
39+
char *host_iface;
3640
int queue_size;
3741
int nr_io_queues;
3842
int reconnect_delay;

src/nvme/private.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,8 +85,6 @@ struct nvme_ctrl {
8585
char *subsysnqn;
8686
char *traddr;
8787
char *trsvcid;
88-
char *host_traddr;
89-
char *host_iface;
9088
char *dhchap_key;
9189
bool discovery_ctrl;
9290
bool discovered;

src/nvme/tree.c

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -716,12 +716,12 @@ const char *nvme_ctrl_get_trsvcid(nvme_ctrl_t c)
716716

717717
const char *nvme_ctrl_get_host_traddr(nvme_ctrl_t c)
718718
{
719-
return c->host_traddr;
719+
return c->cfg.host_traddr;
720720
}
721721

722722
const char *nvme_ctrl_get_host_iface(nvme_ctrl_t c)
723723
{
724-
return c->host_iface;
724+
return c->cfg.host_iface;
725725
}
726726

727727
struct nvme_fabrics_config *nvme_ctrl_get_config(nvme_ctrl_t c)
@@ -866,8 +866,8 @@ static void __nvme_free_ctrl(nvme_ctrl_t c)
866866
FREE_CTRL_ATTR(c->transport);
867867
FREE_CTRL_ATTR(c->subsysnqn);
868868
FREE_CTRL_ATTR(c->traddr);
869-
FREE_CTRL_ATTR(c->host_traddr);
870-
FREE_CTRL_ATTR(c->host_iface);
869+
FREE_CTRL_ATTR(c->cfg.host_traddr);
870+
FREE_CTRL_ATTR(c->cfg.host_iface);
871871
FREE_CTRL_ATTR(c->trsvcid);
872872
free(c);
873873
}
@@ -917,7 +917,7 @@ void hostname2traddr(nvme_ctrl_t c, const char *host_traddr)
917917
if (ret) {
918918
nvme_msg(LOG_DEBUG, "failed to resolve host %s info\n",
919919
host_traddr);
920-
c->host_traddr = strdup(host_traddr);
920+
c->cfg.host_traddr = strdup(host_traddr);
921921
return;
922922
}
923923

@@ -935,15 +935,15 @@ void hostname2traddr(nvme_ctrl_t c, const char *host_traddr)
935935
default:
936936
nvme_msg(LOG_DEBUG, "unrecognized address family (%d) %s\n",
937937
host_info->ai_family, c->traddr);
938-
c->host_traddr = strdup(host_traddr);
938+
c->cfg.host_traddr = strdup(host_traddr);
939939
goto free_addrinfo;
940940
}
941941
if (!p) {
942942
nvme_msg(LOG_DEBUG, "failed to get traddr for %s\n",
943943
c->traddr);
944-
c->host_traddr = strdup(host_traddr);
944+
c->cfg.host_traddr = strdup(host_traddr);
945945
} else
946-
c->host_traddr = strdup(addrstr);
946+
c->cfg.host_traddr = strdup(addrstr);
947947

948948
free_addrinfo:
949949
freeaddrinfo(host_info);
@@ -991,10 +991,10 @@ struct nvme_ctrl *nvme_create_ctrl(const char *subsysnqn, const char *transport,
991991
if (traddr_is_hostname(transport, host_traddr))
992992
hostname2traddr(c, host_traddr);
993993
else
994-
c->host_traddr = strdup(host_traddr);
994+
c->cfg.host_traddr = strdup(host_traddr);
995995
}
996996
if (host_iface)
997-
c->host_iface = strdup(host_iface);
997+
c->cfg.host_iface = strdup(host_iface);
998998
if (trsvcid)
999999
c->trsvcid = strdup(trsvcid);
10001000
else if (discovery)
@@ -1025,11 +1025,11 @@ struct nvme_ctrl *nvme_lookup_ctrl(struct nvme_subsystem *s, const char *transpo
10251025
if (traddr && c->traddr &&
10261026
strcmp(c->traddr, traddr))
10271027
continue;
1028-
if (host_traddr && c->host_traddr &&
1029-
strcmp(c->host_traddr, host_traddr))
1028+
if (host_traddr && c->cfg.host_traddr &&
1029+
strcmp(c->cfg.host_traddr, host_traddr))
10301030
continue;
1031-
if (host_iface && c->host_iface &&
1032-
strcmp(c->host_iface, host_iface))
1031+
if (host_iface && c->cfg.host_iface &&
1032+
strcmp(c->cfg.host_iface, host_iface))
10331033
continue;
10341034
if (trsvcid && c->trsvcid &&
10351035
strcmp(c->trsvcid, trsvcid))

0 commit comments

Comments
 (0)