]> www.infradead.org Git - users/sagi/libnvme.git/commitdiff
fabrics: add mapping functions for discovery log entries
authorHannes Reinecke <hare@suse.de>
Wed, 14 Apr 2021 10:57:55 +0000 (12:57 +0200)
committerHannes Reinecke <hare@suse.de>
Fri, 11 Jun 2021 08:48:44 +0000 (10:48 +0200)
The discovery log entries contain numerical values for attributes,
so we should be providing mapping functions to translate them back
to strings.

Signed-off-by: Hannes Reinecke <hare@suse.de>
src/nvme/fabrics.c
src/nvme/fabrics.h

index c562f9a1b23b6ef3b07421e82f176e60c4ff5b5e..870bbb1d3d997bd18a9846288618a681e3048bae 100644 (file)
@@ -38,6 +38,104 @@ const char *nvmf_dev = "/dev/nvme-fabrics";
 const char *nvmf_hostnqn_file = "/etc/nvme/hostnqn";
 const char *nvmf_hostid_file = "/etc/nvme/hostid";
 
+const char *arg_str(const char * const *strings,
+               size_t array_size, size_t idx)
+{
+       if (idx < array_size && strings[idx])
+               return strings[idx];
+       return "unrecognized";
+}
+
+const char * const trtypes[] = {
+       [NVMF_TRTYPE_RDMA]      = "rdma",
+       [NVMF_TRTYPE_FC]        = "fc",
+       [NVMF_TRTYPE_TCP]       = "tcp",
+       [NVMF_TRTYPE_LOOP]      = "loop",
+};
+
+const char *nvmf_trtype_str(__u8 trtype)
+{
+       return arg_str(trtypes, ARRAY_SIZE(trtypes), trtype);
+}
+
+static const char * const adrfams[] = {
+       [NVMF_ADDR_FAMILY_PCI]  = "pci",
+       [NVMF_ADDR_FAMILY_IP4]  = "ipv4",
+       [NVMF_ADDR_FAMILY_IP6]  = "ipv6",
+       [NVMF_ADDR_FAMILY_IB]   = "infiniband",
+       [NVMF_ADDR_FAMILY_FC]   = "fibre-channel",
+};
+
+const char *nvmf_adrfam_str(__u8 adrfam)
+{
+       return arg_str(adrfams, ARRAY_SIZE(adrfams), adrfam);
+}
+
+static const char * const subtypes[] = {
+       [NVME_NQN_DISC]         = "discovery subsystem",
+       [NVME_NQN_NVME]         = "nvme subsystem",
+};
+
+const char *nvmf_subtype_str(__u8 subtype)
+{
+       return arg_str(subtypes, ARRAY_SIZE(subtypes), subtype);
+}
+
+static const char * const treqs[] = {
+       [NVMF_TREQ_NOT_SPECIFIED]       = "not specified",
+       [NVMF_TREQ_REQUIRED]            = "required",
+       [NVMF_TREQ_NOT_REQUIRED]        = "not required",
+       [NVMF_TREQ_DISABLE_SQFLOW]      = "not specified, "
+                                         "sq flow control disable supported",
+};
+
+const char *nvmf_treq_str(__u8 treq)
+{
+       return arg_str(treqs, ARRAY_SIZE(treqs), treq);
+}
+
+static const char * const sectypes[] = {
+       [NVMF_TCP_SECTYPE_NONE]         = "none",
+       [NVMF_TCP_SECTYPE_TLS]          = "tls",
+};
+
+const char *nvmf_sectype_str(__u8 sectype)
+{
+       return arg_str(sectypes, ARRAY_SIZE(sectypes), sectype);
+}
+
+static const char * const prtypes[] = {
+       [NVMF_RDMA_PRTYPE_NOT_SPECIFIED]        = "not specified",
+       [NVMF_RDMA_PRTYPE_IB]                   = "infiniband",
+       [NVMF_RDMA_PRTYPE_ROCE]                 = "roce",
+       [NVMF_RDMA_PRTYPE_ROCEV2]               = "roce-v2",
+       [NVMF_RDMA_PRTYPE_IWARP]                = "iwarp",
+};
+
+const char *nvmf_prtype_str(__u8 prtype)
+{
+       return arg_str(prtypes, ARRAY_SIZE(prtypes), prtype);
+}
+
+static const char * const qptypes[] = {
+       [NVMF_RDMA_QPTYPE_CONNECTED]    = "connected",
+       [NVMF_RDMA_QPTYPE_DATAGRAM]     = "datagram",
+};
+
+const char *nvmf_qptype_str(__u8 qptype)
+{
+       return arg_str(qptypes, ARRAY_SIZE(qptypes), qptype);
+}
+
+static const char * const cms[] = {
+       [NVMF_RDMA_CMS_RDMA_CM] = "rdma-cm",
+};
+
+const char *nvmf_cms_str(__u8 cm)
+{
+       return arg_str(cms, ARRAY_SIZE(cms), cm);
+}
+
 static int add_bool_argument(char **argstr, char *tok, bool arg)
 {
        char *nstr;
@@ -235,23 +333,7 @@ nvme_ctrl_t nvmf_connect_disc_entry(struct nvmf_disc_log_entry *e,
                return NULL;
        }
 
-       switch (e->trtype) {
-       case NVMF_TRTYPE_RDMA:
-               cfg.transport = "rdma";
-               break;
-       case NVMF_TRTYPE_FC:
-               cfg.transport = "fc";
-               break;
-       case NVMF_TRTYPE_TCP:
-               cfg.transport = "tcp";
-               break;
-       case NVMF_TRTYPE_LOOP:
-               cfg.transport = "loop";
-               break;
-       default:
-               break;
-       }
-
+       cfg.transport = nvmf_trtype_str(e->trtype);
        cfg.nqn = e->subnqn;
        if (e->treq & NVMF_TREQ_DISABLE_SQFLOW)
                cfg.disable_sqflow = true;
index d512cf3dabd48d5bfeb5d59684f1943d0c664a2b..cbf4e4872a9cb251dbe5e896fe078c3b4c4882e6 100644 (file)
@@ -59,6 +59,70 @@ struct nvme_fabrics_config {
        bool data_digest;
 };
 
+/**
+ * nvmf_trtype_str() -
+ * @trtype:
+ *
+ * Return:
+ */
+const char *nvmf_trtype_str(__u8 trtype);
+
+/**
+ * nvmf_adrfam_str() -
+ * @adrfam:
+ *
+ * Return:
+ */
+const char *nvmf_adrfam_str(__u8 adrfam);
+
+/**
+ * nvmf_subtype_str() -
+ * @subtype:
+ *
+ * Return:
+ */
+const char *nvmf_subtype_str(__u8 subtype);
+
+/**
+ * nvmf_treq_str() -
+ * @treq:
+ *
+ * Return:
+ */
+const char *nvmf_treq_str(__u8 treq);
+
+/**
+ * nvmf_sectype_str() -
+ * @sectype:
+ *
+ * Return:
+ */
+const char *nvmf_sectype_str(__u8 sectype);
+
+/**
+ * nvmf_prtype_str() -
+ * @prtype:
+ *
+ * Return:
+ */
+const char *nvmf_prtype_str(__u8 prtype);
+
+/**
+ * nvmf_qptype_str() -
+ * @qptype:
+ *
+ * Return:
+ */
+const char *nvmf_qptype_str(__u8 qptype);
+
+/**
+ * nvmf_cms_str() -
+ * @cms:
+ *
+ * Return:
+ */
+const char *nvmf_cms_str(__u8 cms);
+
 /**
  * nvmf_add_ctrl_opts() -
  * @cfg: