linux-nvme.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 1/2] fabrics: add fabrics_ prefix to fabrics operations
@ 2020-04-01 21:53 Sagi Grimberg
  2020-04-01 21:53 ` [PATCH v2 2/2] fabrics: allow traddr to be host name for ip based transports Sagi Grimberg
  2020-04-02  0:34 ` [PATCH v2 1/2] fabrics: add fabrics_ prefix to fabrics operations Chaitanya Kulkarni
  0 siblings, 2 replies; 6+ messages in thread
From: Sagi Grimberg @ 2020-04-01 21:53 UTC (permalink / raw)
  To: Keith Busch, linux-nvme

discover/connect/disconnect are generic names which might
clash with other external included libraries.

Signed-off-by: Sagi Grimberg <sagi@grimberg.me>
---
 fabrics.c |  8 ++++----
 fabrics.h |  8 ++++----
 nvme.c    | 10 +++++-----
 3 files changed, 13 insertions(+), 13 deletions(-)

diff --git a/fabrics.c b/fabrics.c
index e2c9bfb37177..a7d628b1f0c9 100644
--- a/fabrics.c
+++ b/fabrics.c
@@ -1251,7 +1251,7 @@ out:
 	return ret;
 }
 
-int discover(const char *desc, int argc, char **argv, bool connect)
+int fabrics_discover(const char *desc, int argc, char **argv, bool connect)
 {
 	char argstr[BUF_SIZE];
 	int ret;
@@ -1306,7 +1306,7 @@ out:
 	return nvme_status_to_errno(ret, true);
 }
 
-int connect(const char *desc, int argc, char **argv)
+int fabrics_connect(const char *desc, int argc, char **argv)
 {
 	char argstr[BUF_SIZE];
 	int instance, ret;
@@ -1439,7 +1439,7 @@ static int disconnect_by_device(char *device)
 	return remove_ctrl(instance);
 }
 
-int disconnect(const char *desc, int argc, char **argv)
+int fabrics_disconnect(const char *desc, int argc, char **argv)
 {
 	const char *nqn = "nqn name";
 	const char *device = "nvme device";
@@ -1484,7 +1484,7 @@ out:
 	return nvme_status_to_errno(ret, true);
 }
 
-int disconnect_all(const char *desc, int argc, char **argv)
+int fabrics_disconnect_all(const char *desc, int argc, char **argv)
 {
 	struct nvme_topology t = { };
 	int i, j, err;
diff --git a/fabrics.h b/fabrics.h
index b8e53f492b53..f5b8eaf6bba0 100644
--- a/fabrics.h
+++ b/fabrics.h
@@ -5,9 +5,9 @@
 
 extern char *hostnqn_read(void);
 
-extern int discover(const char *desc, int argc, char **argv, bool connect);
-extern int connect(const char *desc, int argc, char **argv);
-extern int disconnect(const char *desc, int argc, char **argv);
-extern int disconnect_all(const char *desc, int argc, char **argv);
+extern int fabrics_discover(const char *desc, int argc, char **argv, bool connect);
+extern int fabrics_connect(const char *desc, int argc, char **argv);
+extern int fabrics_disconnect(const char *desc, int argc, char **argv);
+extern int fabrics_disconnect_all(const char *desc, int argc, char **argv);
 
 #endif
diff --git a/nvme.c b/nvme.c
index dd3ab5870e62..7e6713a1c8c7 100644
--- a/nvme.c
+++ b/nvme.c
@@ -4779,31 +4779,31 @@ static int show_hostnqn_cmd(int argc, char **argv, struct command *command, stru
 static int discover_cmd(int argc, char **argv, struct command *command, struct plugin *plugin)
 {
 	const char *desc = "Send Get Log Page request to Discovery Controller.";
-	return discover(desc, argc, argv, false);
+	return fabrics_discover(desc, argc, argv, false);
 }
 
 static int connect_all_cmd(int argc, char **argv, struct command *command, struct plugin *plugin)
 {
 	const char *desc = "Discover NVMeoF subsystems and connect to them";
-	return discover(desc, argc, argv, true);
+	return fabrics_discover(desc, argc, argv, true);
 }
 
 static int connect_cmd(int argc, char **argv, struct command *command, struct plugin *plugin)
 {
 	const char *desc = "Connect to NVMeoF subsystem";
-	return connect(desc, argc, argv);
+	return fabrics_connect(desc, argc, argv);
 }
 
 static int disconnect_cmd(int argc, char **argv, struct command *command, struct plugin *plugin)
 {
 	const char *desc = "Disconnect from NVMeoF subsystem";
-	return disconnect(desc, argc, argv);
+	return fabrics_disconnect(desc, argc, argv);
 }
 
 static int disconnect_all_cmd(int argc, char **argv, struct command *command, struct plugin *plugin)
 {
 	const char *desc = "Disconnect from all connected NVMeoF subsystems";
-	return disconnect_all(desc, argc, argv);
+	return fabrics_disconnect_all(desc, argc, argv);
 }
 
 void register_extension(struct plugin *plugin)
-- 
2.20.1


_______________________________________________
linux-nvme mailing list
linux-nvme@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-nvme

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH v2 2/2] fabrics: allow traddr to be host name for ip based transports
  2020-04-01 21:53 [PATCH v2 1/2] fabrics: add fabrics_ prefix to fabrics operations Sagi Grimberg
@ 2020-04-01 21:53 ` Sagi Grimberg
  2020-04-02  0:35   ` Chaitanya Kulkarni
  2020-04-23  8:22   ` Sagi Grimberg
  2020-04-02  0:34 ` [PATCH v2 1/2] fabrics: add fabrics_ prefix to fabrics operations Chaitanya Kulkarni
  1 sibling, 2 replies; 6+ messages in thread
From: Sagi Grimberg @ 2020-04-01 21:53 UTC (permalink / raw)
  To: Keith Busch, linux-nvme

Some users would like to use well known hostnames instead of remembering
ip addresses. So, allow users to set traddr to be a host name and we will
attempt to resolve against a DNS.

This applies for IP based transports only (e.g. tcp, rdma) while fc and
loop will ignore this distinction.

Signed-off-by: Sagi Grimberg <sagi@grimberg.me>
---
Changes from v1:
- have traddr be either ip address or hostname for ip based transports
  (tcp, rdma).
 fabrics.c | 80 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 80 insertions(+)

diff --git a/fabrics.c b/fabrics.c
index a7d628b1f0c9..7027a19103a5 100644
--- a/fabrics.c
+++ b/fabrics.c
@@ -33,6 +33,10 @@
 #include <sys/stat.h>
 #include <stddef.h>
 
+#include <sys/types.h>
+#include <arpa/inet.h>
+#include <netdb.h>
+
 #include "util/parser.h"
 #include "nvme-ioctl.h"
 #include "nvme-status.h"
@@ -857,6 +861,63 @@ static int build_options(char *argstr, int max_len, bool discover)
 	return 0;
 }
 
+static bool traddr_is_hostname(struct config *cfg)
+{
+	char addrstr[NVMF_TRADDR_SIZE];
+
+	if (!cfg->traddr)
+		return false;
+	if (strcmp(cfg->transport, "tcp") && strcmp(cfg->transport, "rdma"))
+		return false;
+	if (inet_pton(AF_INET, cfg->traddr, addrstr) > 0 ||
+	    inet_pton(AF_INET6, cfg->traddr, addrstr) > 0)
+		return false;
+	return true;
+}
+
+static int hostname2traddr(struct config *cfg)
+{
+	struct addrinfo *host_info, hints = {.ai_family = AF_UNSPEC};
+	char addrstr[NVMF_TRADDR_SIZE];
+	const char *p;
+	int ret;
+
+	ret = getaddrinfo(cfg->traddr, NULL, &hints, &host_info);
+	if (ret) {
+		fprintf(stderr, "failed to resolve host %s info\n", cfg->traddr);
+		return ret;
+	}
+
+	switch (host_info->ai_family) {
+	case AF_INET:
+		p = inet_ntop(host_info->ai_family,
+			&(((struct sockaddr_in *)host_info->ai_addr)->sin_addr),
+			addrstr, NVMF_TRADDR_SIZE);
+		break;
+	case AF_INET6:
+		p = inet_ntop(host_info->ai_family,
+			&(((struct sockaddr_in6 *)host_info->ai_addr)->sin6_addr),
+			addrstr, NVMF_TRADDR_SIZE);
+		break;
+	default:
+		fprintf(stderr, "unrecognized address family (%d) %s\n",
+			host_info->ai_family, cfg->traddr);
+		ret = -EINVAL;
+		goto free_addrinfo;
+	}
+
+	if (!p) {
+		fprintf(stderr, "failed to get traddr for %s\n", cfg->traddr);
+		ret = -errno;
+		goto free_addrinfo;
+	}
+	cfg->traddr = strdup(addrstr);
+
+free_addrinfo:
+	freeaddrinfo(host_info);
+	return ret;
+}
+
 static int connect_ctrl(struct nvmf_disc_rsp_page_entry *e)
 {
 	char argstr[BUF_SIZE], *p;
@@ -1230,6 +1291,12 @@ static int discover_from_conf_file(const char *desc, char *argstr,
 		if (cfg.persistent && !cfg.keep_alive_tmo)
 			cfg.keep_alive_tmo = NVMF_DEF_DISC_TMO;
 
+		if (traddr_is_hostname(&cfg)) {
+			ret = hostname2traddr(&cfg);
+			if (ret)
+				goto out;
+		}
+
 		err = build_options(argstr, BUF_SIZE, true);
 		if (err) {
 			ret = err;
@@ -1295,6 +1362,13 @@ int fabrics_discover(const char *desc, int argc, char **argv, bool connect)
 	} else {
 		if (cfg.persistent && !cfg.keep_alive_tmo)
 			cfg.keep_alive_tmo = NVMF_DEF_DISC_TMO;
+
+		if (traddr_is_hostname(&cfg)) {
+			ret = hostname2traddr(&cfg);
+			if (ret)
+				goto out;
+		}
+
 		ret = build_options(argstr, BUF_SIZE, true);
 		if (ret)
 			goto out;
@@ -1339,6 +1413,12 @@ int fabrics_connect(const char *desc, int argc, char **argv)
 	if (ret)
 		goto out;
 
+	if (traddr_is_hostname(&cfg)) {
+		ret = hostname2traddr(&cfg);
+		if (ret)
+			goto out;
+	}
+
 	ret = build_options(argstr, BUF_SIZE, false);
 	if (ret)
 		goto out;
-- 
2.20.1


_______________________________________________
linux-nvme mailing list
linux-nvme@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-nvme

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH v2 1/2] fabrics: add fabrics_ prefix to fabrics operations
  2020-04-01 21:53 [PATCH v2 1/2] fabrics: add fabrics_ prefix to fabrics operations Sagi Grimberg
  2020-04-01 21:53 ` [PATCH v2 2/2] fabrics: allow traddr to be host name for ip based transports Sagi Grimberg
@ 2020-04-02  0:34 ` Chaitanya Kulkarni
  1 sibling, 0 replies; 6+ messages in thread
From: Chaitanya Kulkarni @ 2020-04-02  0:34 UTC (permalink / raw)
  To: Sagi Grimberg, Keith Busch, linux-nvme

On 04/01/2020 02:54 PM, Sagi Grimberg wrote:
> discover/connect/disconnect are generic names which might
> clash with other external included libraries.
>
> Signed-off-by: Sagi Grimberg<sagi@grimberg.me>
> ---

Reviewed-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com>

_______________________________________________
linux-nvme mailing list
linux-nvme@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-nvme

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v2 2/2] fabrics: allow traddr to be host name for ip based transports
  2020-04-01 21:53 ` [PATCH v2 2/2] fabrics: allow traddr to be host name for ip based transports Sagi Grimberg
@ 2020-04-02  0:35   ` Chaitanya Kulkarni
  2020-04-23  8:22   ` Sagi Grimberg
  1 sibling, 0 replies; 6+ messages in thread
From: Chaitanya Kulkarni @ 2020-04-02  0:35 UTC (permalink / raw)
  To: Sagi Grimberg, Keith Busch, linux-nvme

On 04/01/2020 02:54 PM, Sagi Grimberg wrote:
> Some users would like to use well known hostnames instead of remembering
> ip addresses. So, allow users to set traddr to be a host name and we will
> attempt to resolve against a DNS.
>
> This applies for IP based transports only (e.g. tcp, rdma) while fc and
> loop will ignore this distinction.
>
> Signed-off-by: Sagi Grimberg<sagi@grimberg.me>

Reviewed-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com>

_______________________________________________
linux-nvme mailing list
linux-nvme@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-nvme

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v2 2/2] fabrics: allow traddr to be host name for ip based transports
  2020-04-01 21:53 ` [PATCH v2 2/2] fabrics: allow traddr to be host name for ip based transports Sagi Grimberg
  2020-04-02  0:35   ` Chaitanya Kulkarni
@ 2020-04-23  8:22   ` Sagi Grimberg
  2020-04-23 20:30     ` Keith Busch
  1 sibling, 1 reply; 6+ messages in thread
From: Sagi Grimberg @ 2020-04-23  8:22 UTC (permalink / raw)
  To: Keith Busch, linux-nvme

Any objections with this spin? Keith? Others?

_______________________________________________
linux-nvme mailing list
linux-nvme@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-nvme

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v2 2/2] fabrics: allow traddr to be host name for ip based transports
  2020-04-23  8:22   ` Sagi Grimberg
@ 2020-04-23 20:30     ` Keith Busch
  0 siblings, 0 replies; 6+ messages in thread
From: Keith Busch @ 2020-04-23 20:30 UTC (permalink / raw)
  To: Sagi Grimberg; +Cc: linux-nvme

On Thu, Apr 23, 2020 at 01:22:23AM -0700, Sagi Grimberg wrote:
> Any objections with this spin? Keith? Others?

No objections, looks good and applied.

_______________________________________________
linux-nvme mailing list
linux-nvme@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-nvme

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2020-04-23 20:30 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-04-01 21:53 [PATCH v2 1/2] fabrics: add fabrics_ prefix to fabrics operations Sagi Grimberg
2020-04-01 21:53 ` [PATCH v2 2/2] fabrics: allow traddr to be host name for ip based transports Sagi Grimberg
2020-04-02  0:35   ` Chaitanya Kulkarni
2020-04-23  8:22   ` Sagi Grimberg
2020-04-23 20:30     ` Keith Busch
2020-04-02  0:34 ` [PATCH v2 1/2] fabrics: add fabrics_ prefix to fabrics operations Chaitanya Kulkarni

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).