From: Sagi Grimberg Date: Thu, 28 Mar 2024 14:16:27 +0000 (+0200) Subject: nvme: check for capability feat=dns_traddr X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=refs%2Fheads%2Fdns-traddr;p=users%2Fsagi%2Flibnvme.git nvme: check for capability feat=dns_traddr Signed-off-by: Sagi Grimberg --- diff --git a/src/nvme/fabrics.c b/src/nvme/fabrics.c index f06ad797..0a497280 100644 --- a/src/nvme/fabrics.c +++ b/src/nvme/fabrics.c @@ -223,6 +223,7 @@ static const struct nvme_fabric_options default_supported_options = { .traddr = true, .transport = true, .trsvcid = true, + .dns_traddr = false, }; void nvmf_default_config(struct nvme_fabrics_config *cfg) @@ -357,7 +358,7 @@ static int __add_argument(char **argstr, const char *tok, const char *arg) return 0; } -static int __nvmf_supported_options(nvme_root_t r); +int __nvmf_supported_options(nvme_root_t r); #define nvmf_check_option(r, tok) \ ({ \ !__nvmf_supported_options(r) && (r)->options->tok; \ @@ -655,7 +656,7 @@ static int build_options(nvme_host_t h, nvme_ctrl_t c, char **argstr) continue; \ } -static int __nvmf_supported_options(nvme_root_t r) +int __nvmf_supported_options(nvme_root_t r) { char buf[0x1000], *options, *p, *v; _cleanup_fd_ int fd = -1; @@ -706,6 +707,12 @@ static int __nvmf_supported_options(nvme_root_t r) v = strsep(&p, "= "); if (!v) continue; + if (!strcmp(v, "feat")) { + v = strsep(&p, "="); + if (!v) + continue; + } + nvme_msg(r, LOG_DEBUG, "%s ", v); parse_option(r, v, cntlid); @@ -738,6 +745,7 @@ static int __nvmf_supported_options(nvme_root_t r) parse_option(r, v, traddr); parse_option(r, v, transport); parse_option(r, v, trsvcid); + parse_option(r, v, dns_traddr); } nvme_msg(r, LOG_DEBUG, "\n"); return 0; @@ -889,7 +897,8 @@ int nvmf_add_ctrl(nvme_host_t h, nvme_ctrl_t c, } nvme_ctrl_set_discovered(c, true); - if (traddr_is_hostname(h->r, c)) { + if (traddr_is_hostname(h->r, c) && + !nvmf_check_option(r, dns_traddr)) { char *traddr = c->traddr; c->traddr = hostname2traddr(h->r, traddr); diff --git a/src/nvme/fabrics.h b/src/nvme/fabrics.h index 8e26e9f1..e8673afa 100644 --- a/src/nvme/fabrics.h +++ b/src/nvme/fabrics.h @@ -388,4 +388,74 @@ struct nvme_fabrics_uri *nvme_parse_uri(const char *str); */ void nvme_free_uri(struct nvme_fabrics_uri *uri); +int __nvmf_supported_options(nvme_root_t r); +#define nvmf_check_option(r, tok) \ +({ \ + !__nvmf_supported_options(r) && (r)->options->tok; \ +}) + +#define add_bool_argument(o, argstr, tok, arg) \ +({ \ + int ret; \ + if (nvmf_check_option(r, tok)) { \ + ret = __add_bool_argument(argstr, \ + stringify(tok), \ + arg); \ + } else { \ + nvme_msg(r, LOG_DEBUG, \ + "option \"%s\" ignored\n", \ + stringify(tok)); \ + ret = 0; \ + } \ + ret; \ +}) + +#define add_int_argument(o, argstr, tok, arg, allow_zero) \ +({ \ + int ret; \ + if (nvmf_check_option(r, tok)) { \ + ret = __add_int_argument(argstr, \ + stringify(tok), \ + arg, \ + allow_zero); \ + } else { \ + nvme_msg(r, LOG_DEBUG, \ + "option \"%s\" ignored\n", \ + stringify(tok)); \ + ret = 0; \ + } \ + ret; \ +}) + +#define add_int_or_minus_one_argument(o, argstr, tok, arg) \ +({ \ + int ret; \ + if (nvmf_check_option(r, tok)) { \ + ret = __add_int_or_minus_one_argument(argstr, \ + stringify(tok), \ + arg); \ + } else { \ + nvme_msg(r, LOG_DEBUG, \ + "option \"%s\" ignored\n", \ + stringify(tok)); \ + ret = 0; \ + } \ + ret; \ +}) + +#define add_argument(r, argstr, tok, arg) \ +({ \ + int ret; \ + if (nvmf_check_option(r, tok)) { \ + ret = __add_argument(argstr, \ + stringify(tok), \ + arg); \ + } else { \ + nvme_msg(r, LOG_NOTICE, \ + "option \"%s\" ignored\n", \ + stringify(tok)); \ + ret = 0; \ + } \ + ret; \ +}) #endif /* _LIBNVME_FABRICS_H */ diff --git a/src/nvme/private.h b/src/nvme/private.h index f2d7b5be..8440c5ef 100644 --- a/src/nvme/private.h +++ b/src/nvme/private.h @@ -158,6 +158,7 @@ struct nvme_fabric_options { bool traddr; bool transport; bool trsvcid; + bool dns_traddr; }; struct nvme_log { diff --git a/src/nvme/tree.c b/src/nvme/tree.c index 27363f53..9806085e 100644 --- a/src/nvme/tree.c +++ b/src/nvme/tree.c @@ -1244,7 +1244,8 @@ struct nvme_ctrl *nvme_create_ctrl(nvme_root_t r, if (traddr) c->traddr = strdup(traddr); if (host_traddr) { - if (traddr_is_hostname(transport, host_traddr)) + if (traddr_is_hostname(transport, host_traddr) && + !nvmf_check_option(r, dns_traddr)) c->cfg.host_traddr = hostname2traddr(r, host_traddr); if (!c->cfg.host_traddr) c->cfg.host_traddr = strdup(host_traddr);