]> www.infradead.org Git - users/sagi/nvme-cli.git/commitdiff
nvme-cli: Add support for Fibre-channel host address
authorDuane Grigsby <duane.grigsby@qlogic.com>
Mon, 24 Oct 2016 15:30:32 +0000 (08:30 -0700)
committerKeith Busch <keith.busch@intel.com>
Mon, 24 Oct 2016 21:41:38 +0000 (17:41 -0400)
   Example:
nvme connect-all --transport=fc --traddr=pn-0x200100110d9f4100:nn-0x200100110d9f4100 \
--host_traddr=nn-0x20000024ff5ba062:pn-0x21000024ff5ba062

nvme connect --transport=fc --nqn=nqn.2014-08.org.nvmexpress:nvm-subsystem \
--traddr=pn-0x200100110d9f4100:nn-0x200100110d9f4100 --host_traddr=nn-0x20000024ff5ba062:pn-0x21000024ff5ba062

Signed-off-by: Darren Trapp <darren.trapp@cavium.com>
fabrics.c

index ab2e4776eddedac48739b7c8afeffefa56adee41..eb021a5307e63b46f1d5234ac30ad481372e94ef 100644 (file)
--- a/fabrics.c
+++ b/fabrics.c
@@ -49,6 +49,7 @@ static struct config {
        char *transport;
        char *traddr;
        char *trsvcid;
+       char *host_traddr;
        char *hostnqn;
        char *nr_io_queues;
        char *keep_alive_tmo;
@@ -474,6 +475,14 @@ static int build_options(char *argstr, int max_len)
                max_len -= len;
        }
 
+       if (cfg.host_traddr) {
+               len = snprintf(argstr, max_len, ",host_traddr=%s", cfg.host_traddr);
+               if (len < 0)
+                       return -EINVAL;
+               argstr += len;
+               max_len -= len;
+       }
+
        if (cfg.trsvcid) {
                len = snprintf(argstr, max_len, ",trsvcid=%s", cfg.trsvcid);
                if (len < 0)
@@ -580,6 +589,24 @@ static int connect_ctrl(struct nvmf_disc_rsp_page_entry *e)
                        return -EINVAL;
                }
                break;
+       case NVMF_TRTYPE_FC:
+               switch (e->adrfam) {
+               case NVMF_ADDR_FAMILY_FC:
+                       len = sprintf(p, ",transport=fc");
+                       if (len < 0)
+                               return -EINVAL;
+                       p += len;
+
+                       len = sprintf(p, ",traddr=%s", e->traddr);
+                       if (len < 0)
+                               return -EINVAL;
+                       p += len;
+                       break;
+               default:
+                       fprintf(stderr, "skipping unsupported adrfam\n");
+                       return -EINVAL;
+               }
+               break;
        default:
                fprintf(stderr, "skipping unsupported transport %d\n",
                                 e->trtype);
@@ -719,6 +746,8 @@ int discover(const char *desc, int argc, char **argv, bool connect)
                 required_argument, "transport address" },
                {"trsvcid", 's', "LIST", CFG_STRING, &cfg.trsvcid,
                 required_argument, "transport service id (e.g. IP port)" },
+               {"host_traddr", 's', "LIST", CFG_STRING, &cfg.host_traddr,
+                required_argument, "host traddr (e.g. FC WWN's)" },
                {"hostnqn", 'q', "LIST", CFG_STRING, &cfg.hostnqn,
                 required_argument,
                 "user-defined hostnqn (if default not used)" },
@@ -758,6 +787,8 @@ int connect(const char *desc, int argc, char **argv)
                 required_argument, "transport address" },
                {"trsvcid", 's', "LIST", CFG_STRING, &cfg.trsvcid,
                 required_argument, "transport service id (e.g. IP port)" },
+                {"host_traddr", 's', "LIST", CFG_STRING, &cfg.host_traddr,
+                 required_argument, "host traddr (e.g. FC WWN's)" },
                {"hostnqn", 'q', "LIST", CFG_STRING, &cfg.hostnqn,
                 required_argument, "user-defined hostnqn" },
                {"nr-io-queues", 'i', "LIST", CFG_STRING, &cfg.nr_io_queues,