Commit dfef7970 authored by Jim Harris's avatar Jim Harris Committed by Tomasz Zawadzki
Browse files

sock: add spdk_sock_get_interface_name



Signed-off-by: default avatarJim Harris <jim.harris@samsung.com>
Change-Id: Ibccfac4350afba1e687edca40139316809ec1d00
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/24081


Reviewed-by: default avatarAleksey Marchuk <alexeymar@nvidia.com>
Community-CI: Mellanox Build Bot
Reviewed-by: default avatarKonrad Sztyber <konrad.sztyber@intel.com>
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
parent b6875e1c
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -364,6 +364,16 @@ struct spdk_sock *spdk_sock_listen_ext(const char *ip, int port, const char *imp
 */
struct spdk_sock *spdk_sock_accept(struct spdk_sock *sock);

/**
 * Gets the name of the network interface of the local port for the socket.
 *
 * \param sock socket to find the interface name for
 *
 * \return null-terminated string containing interface name if found, NULL
 *	   interface name could not be found
 */
const char *spdk_sock_get_interface_name(struct spdk_sock *sock);

/**
 * Close a socket.
 *
+1 −0
Original line number Diff line number Diff line
@@ -80,6 +80,7 @@ struct spdk_net_impl {

	int (*getaddr)(struct spdk_sock *sock, char *saddr, int slen, uint16_t *sport, char *caddr,
		       int clen, uint16_t *cport);
	const char *(*get_interface_name)(struct spdk_sock *sock);
	struct spdk_sock *(*connect)(const char *ip, int port, struct spdk_sock_opts *opts);
	struct spdk_sock *(*listen)(const char *ip, int port, struct spdk_sock_opts *opts);
	struct spdk_sock *(*accept)(struct spdk_sock *sock);
+10 −0
Original line number Diff line number Diff line
@@ -232,6 +232,16 @@ spdk_sock_getaddr(struct spdk_sock *sock, char *saddr, int slen, uint16_t *sport
	return sock->net_impl->getaddr(sock, saddr, slen, sport, caddr, clen, cport);
}

const char *
spdk_sock_get_interface_name(struct spdk_sock *sock)
{
	if (sock->net_impl->get_interface_name) {
		return sock->net_impl->get_interface_name(sock);
	} else {
		return NULL;
	}
}

const char *
spdk_sock_get_impl_name(struct spdk_sock *sock)
{
+1 −0
Original line number Diff line number Diff line
@@ -4,6 +4,7 @@
	# public functions in spdk/sock.h
	spdk_sock_get_default_opts;
	spdk_sock_getaddr;
	spdk_sock_get_interface_name;
	spdk_sock_connect;
	spdk_sock_connect_ext;
	spdk_sock_listen;
+26 −0
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@
#include "spdk/sock.h"
#include "spdk/util.h"
#include "spdk/string.h"
#include "spdk/net.h"
#include "spdk_internal/sock.h"
#include "spdk/net.h"

@@ -56,6 +57,8 @@ struct spdk_posix_sock {
	SSL			*ssl;

	TAILQ_ENTRY(spdk_posix_sock)	link;

	char			interface_name[IFNAMSIZ];
};

TAILQ_HEAD(spdk_has_data_list, spdk_posix_sock);
@@ -231,6 +234,27 @@ posix_sock_getaddr(struct spdk_sock *_sock, char *saddr, int slen, uint16_t *spo
	return spdk_net_getaddr(sock->fd, saddr, slen, sport, caddr, clen, cport);
}

static const char *
posix_sock_get_interface_name(struct spdk_sock *_sock)
{
	struct spdk_posix_sock *sock = __posix_sock(_sock);
	char saddr[64];
	int rc;

	rc = spdk_net_getaddr(sock->fd, saddr, sizeof(saddr), NULL, NULL, 0, NULL);
	if (rc != 0) {
		return NULL;
	}

	rc = spdk_net_get_interface_name(saddr, sock->interface_name,
					 sizeof(sock->interface_name));
	if (rc != 0) {
		return NULL;
	}

	return sock->interface_name;
}

enum posix_sock_create_type {
	SPDK_SOCK_CREATE_LISTEN,
	SPDK_SOCK_CREATE_CONNECT,
@@ -2163,6 +2187,7 @@ ssl_sock_group_impl_close(struct spdk_sock_group_impl *_group)
static struct spdk_net_impl g_posix_net_impl = {
	.name		= "posix",
	.getaddr	= posix_sock_getaddr,
	.get_interface_name = posix_sock_get_interface_name,
	.connect	= posix_sock_connect,
	.listen		= posix_sock_listen,
	.accept		= posix_sock_accept,
@@ -2214,6 +2239,7 @@ ssl_sock_accept(struct spdk_sock *_sock)
static struct spdk_net_impl g_ssl_net_impl = {
	.name		= "ssl",
	.getaddr	= posix_sock_getaddr,
	.get_interface_name = posix_sock_get_interface_name,
	.connect	= ssl_sock_connect,
	.listen		= ssl_sock_listen,
	.accept		= ssl_sock_accept,
Loading