char *sqsize;
char *transport;
char *subsysnqn;
+ char *traddr;
+ char *trsvcid;
+ char *host_traddr;
};
struct nvme_subsystem {
return c->transport;
}
+const char *nvme_ctrl_get_traddr(nvme_ctrl_t c)
+{
+ return c->traddr;
+}
+
+const char *nvme_ctrl_get_trsvcid(nvme_ctrl_t c)
+{
+ return c->trsvcid;
+}
+
+const char *nvme_ctrl_get_host_traddr(nvme_ctrl_t c)
+{
+ return c->host_traddr;
+}
+
int nvme_ctrl_identify(nvme_ctrl_t c, struct nvme_id_ctrl *id)
{
return nvme_identify_ctrl(nvme_ctrl_get_fd(c), id);
free(c->sysfs_dir);
free(c->subsysnqn);
free(c->address);
+ free(c->traddr);
+ if (c->trsvcid)
+ free(c->trsvcid);
+ if (c->host_traddr)
+ free(c->host_traddr);
free(c->firmware);
free(c->model);
free(c->state);
{
DIR *d;
nvme_ctrl_t c;
+ char *addr, *a, *e;
+ char *traddr = NULL, *trsvcid = NULL, *host_traddr = NULL;
d = opendir(path);
if (!d)
c->serial = nvme_get_ctrl_attr(c, "serial");
c->sqsize = nvme_get_ctrl_attr(c, "sqsize");
c->transport = nvme_get_ctrl_attr(c, "transport");
-
+ /* Parse 'address' string into components */
+ addr = strdup(c->address);
+ a = strtok_r(addr, ",", &e);
+ while (a && strlen(a)) {
+ if (!strncmp(a, "traddr=", 7))
+ traddr = a + 7;
+ else if (!strncmp(a, "trsvcid=", 8))
+ trsvcid = a + 8;
+ else if (!strncmp(a, "host_traddr=", 12))
+ host_traddr = a + 12;
+ a = strtok_r(NULL, ",", &e);
+ }
+ c->traddr = strdup(traddr);
+ if (trsvcid)
+ c->trsvcid = strdup(trsvcid);
+ if (host_traddr)
+ c->host_traddr = strdup(host_traddr);
+ free(addr);
return c;
free_ctrl:
*/
nvme_subsystem_t nvme_ctrl_get_subsystem(nvme_ctrl_t c);
+/**
+ * nvme_ctrl_get_traddr() -
+ * @c:
+ *
+ * Return:
+ */
+const char *nvme_ctrl_get_traddr(nvme_ctrl_t c);
+
+/**
+ * nvme_ctrl_get_trsvcid() -
+ * @c:
+ *
+ * Return:
+ */
+const char *nvme_ctrl_get_trsvcid(nvme_ctrl_t c);
+
+/**
+ * nvme_ctrl_get_host_traddr() -
+ * @c:
+ *
+ * Return:
+ */
+const char *nvme_ctrl_get_host_traddr(nvme_ctrl_t c);
+
/**
* nvme_ctrl_identify() -
* @c: