nvmf_tgt: Use new ip parsing utility function
Change-Id: Ia6575f8d7fb8be8002a5c1fec0abf04f837a0545 Signed-off-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
parent
38980dedfa
commit
4baf5962e9
@ -50,6 +50,7 @@
|
|||||||
#include "spdk/bdev.h"
|
#include "spdk/bdev.h"
|
||||||
#include "spdk/nvme.h"
|
#include "spdk/nvme.h"
|
||||||
#include "spdk/nvmf.h"
|
#include "spdk/nvmf.h"
|
||||||
|
#include "spdk/string.h"
|
||||||
|
|
||||||
#define MAX_LISTEN_ADDRESSES 255
|
#define MAX_LISTEN_ADDRESSES 255
|
||||||
#define MAX_HOSTS 255
|
#define MAX_HOSTS 255
|
||||||
@ -232,108 +233,6 @@ spdk_nvmf_parse_nvmf_tgt(void)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
|
||||||
spdk_nvmf_parse_addr(char *listen_addr, char **host, char **port)
|
|
||||||
{
|
|
||||||
int n, len;
|
|
||||||
const char *p, *q;
|
|
||||||
|
|
||||||
if (listen_addr == NULL) {
|
|
||||||
SPDK_ERRLOG("Invalid listen addr for Fabric Interface (NULL)\n");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
*host = NULL;
|
|
||||||
*port = NULL;
|
|
||||||
|
|
||||||
if (listen_addr[0] == '[') {
|
|
||||||
/* IPv6 */
|
|
||||||
p = strchr(listen_addr + 1, ']');
|
|
||||||
if (p == NULL) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
p++;
|
|
||||||
n = p - listen_addr;
|
|
||||||
*host = calloc(1, n + 1);
|
|
||||||
if (!*host) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
memcpy(*host, listen_addr, n);
|
|
||||||
(*host)[n] = '\0';
|
|
||||||
if (p[0] == '\0') {
|
|
||||||
*port = calloc(1, PORTNUMSTRLEN);
|
|
||||||
if (!*port) {
|
|
||||||
free(*host);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
snprintf(*port, PORTNUMSTRLEN, "%d", SPDK_NVMF_DEFAULT_SIN_PORT);
|
|
||||||
} else {
|
|
||||||
if (p[0] != ':') {
|
|
||||||
free(*host);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
q = strchr(listen_addr, '@');
|
|
||||||
if (q == NULL) {
|
|
||||||
q = listen_addr + strlen(listen_addr);
|
|
||||||
}
|
|
||||||
len = q - p - 1;
|
|
||||||
|
|
||||||
*port = calloc(1, len + 1);
|
|
||||||
if (!*port) {
|
|
||||||
free(*host);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
memcpy(*port, p + 1, len);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
/* IPv4 */
|
|
||||||
p = strchr(listen_addr, ':');
|
|
||||||
if (p == NULL) {
|
|
||||||
p = listen_addr + strlen(listen_addr);
|
|
||||||
}
|
|
||||||
n = p - listen_addr;
|
|
||||||
*host = calloc(1, n + 1);
|
|
||||||
if (!*host) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
memcpy(*host, listen_addr, n);
|
|
||||||
(*host)[n] = '\0';
|
|
||||||
if (p[0] == '\0') {
|
|
||||||
*port = calloc(1, PORTNUMSTRLEN);
|
|
||||||
if (!*port) {
|
|
||||||
free(*host);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
snprintf(*port, PORTNUMSTRLEN, "%d", SPDK_NVMF_DEFAULT_SIN_PORT);
|
|
||||||
} else {
|
|
||||||
if (p[0] != ':') {
|
|
||||||
free(*host);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
q = strchr(listen_addr, '@');
|
|
||||||
if (q == NULL) {
|
|
||||||
q = listen_addr + strlen(listen_addr);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (q == p) {
|
|
||||||
free(*host);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
len = q - p - 1;
|
|
||||||
*port = calloc(1, len + 1);
|
|
||||||
if (!*port) {
|
|
||||||
free(*host);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
memcpy(*port, p + 1, len);
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
probe_cb(void *cb_ctx, const struct spdk_nvme_transport_id *trid,
|
probe_cb(void *cb_ctx, const struct spdk_nvme_transport_id *trid,
|
||||||
struct spdk_nvme_ctrlr_opts *opts)
|
struct spdk_nvme_ctrlr_opts *opts)
|
||||||
@ -489,7 +388,7 @@ spdk_nvmf_parse_subsystem(struct spdk_conf_section *sp)
|
|||||||
/* Parse Listen sections */
|
/* Parse Listen sections */
|
||||||
for (i = 0; i < MAX_LISTEN_ADDRESSES; i++) {
|
for (i = 0; i < MAX_LISTEN_ADDRESSES; i++) {
|
||||||
char *transport_name, *listen_addr;
|
char *transport_name, *listen_addr;
|
||||||
char *traddr, *trsvcid;
|
const char *traddr, *trsvcid;
|
||||||
int numa_node = -1;
|
int numa_node = -1;
|
||||||
|
|
||||||
transport_name = spdk_conf_section_get_nmval(sp, "Listen", i, 0);
|
transport_name = spdk_conf_section_get_nmval(sp, "Listen", i, 0);
|
||||||
@ -499,9 +398,11 @@ spdk_nvmf_parse_subsystem(struct spdk_conf_section *sp)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = spdk_nvmf_parse_addr(listen_addr, &traddr, &trsvcid);
|
listen_addr = strdup(listen_addr);
|
||||||
|
|
||||||
|
ret = spdk_parse_ip_addr(listen_addr, &traddr, &trsvcid);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
SPDK_ERRLOG("Unable to parse transport address '%s'\n", listen_addr);
|
SPDK_ERRLOG("Unable to parse listen address '%s'\n", listen_addr);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -522,12 +423,10 @@ spdk_nvmf_parse_subsystem(struct spdk_conf_section *sp)
|
|||||||
|
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
SPDK_ERRLOG("Failed to listen on traddr=%s, trsvcid=%s\n", traddr, trsvcid);
|
SPDK_ERRLOG("Failed to listen on traddr=%s, trsvcid=%s\n", traddr, trsvcid);
|
||||||
free(traddr);
|
free(listen_addr);
|
||||||
free(trsvcid);
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
free(traddr);
|
free(listen_addr);
|
||||||
free(trsvcid);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Parse Host sections */
|
/* Parse Host sections */
|
||||||
|
Loading…
Reference in New Issue
Block a user