.traddr = true,
.transport = true,
.trsvcid = true,
+ .dns_traddr = false,
};
void nvmf_default_config(struct nvme_fabrics_config *cfg)
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; \
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;
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);
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;
}
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);
*/
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 */
bool traddr;
bool transport;
bool trsvcid;
+ bool dns_traddr;
};
struct nvme_log {
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);