return ret;
}
+static const char delim_comma = ',';
+
static int do_discover(char *argstr, bool connect)
{
struct nvmf_disc_rsp_page_hdr *log = NULL;
int instance, numrec = 0, ret, err;
int status = 0;
+ if (cfg.device) {
+ struct connect_args cargs;
+
+ memset(&cargs, 0, sizeof(cargs));
+ cargs.subsysnqn = __parse_connect_arg(argstr, delim_comma,
+ conarg_nqn);
+ cargs.transport = __parse_connect_arg(argstr, delim_comma,
+ conarg_transport);
+ cargs.traddr = __parse_connect_arg(argstr, delim_comma,
+ conarg_traddr);
+ cargs.trsvcid = __parse_connect_arg(argstr, delim_comma,
+ conarg_trsvcid);
+ cargs.host_traddr = __parse_connect_arg(argstr, delim_comma,
+ conarg_host_traddr);
+
+ /*
+ * if the cfg.device passed in matches the connect args
+ * cfg.device is left as-is
+ * else if there exists a controller that matches the
+ * connect args
+ * cfg.device is the matching ctrl name
+ * else if no ctrl matches the connect args
+ * cfg.device is set to null. This will attempt to
+ * create a new ctrl.
+ * endif
+ */
+ if (!ctrl_matches_connectargs(cfg.device, &cargs))
+ cfg.device = find_ctrl_with_connectargs(&cargs);
+
+ free(cargs.subsysnqn);
+ free(cargs.transport);
+ free(cargs.traddr);
+ free(cargs.trsvcid);
+ free(cargs.host_traddr);
+ }
+
if (!cfg.device)
instance = add_ctrl(argstr);
else
}
static const char delim_space = ' ';
+const char *conarg_nqn = "nqn";
+const char *conarg_transport = "transport";
const char *conarg_traddr = "traddr";
const char *conarg_trsvcid = "trsvcid";
const char *conarg_host_traddr = "host_traddr";
char *find_ctrl_with_connectargs(struct connect_args *args);
char *__parse_connect_arg(char *conargs, const char delim, const char *fieldnm);
+extern const char *conarg_nqn;
+extern const char *conarg_transport;
extern const char *conarg_traddr;
extern const char *conarg_trsvcid;
extern const char *conarg_host_traddr;