Commit 404d2726 authored by Ziye Yang's avatar Ziye Yang Committed by Changpeng Liu
Browse files

sock: add get_placement_id function.



Placement_id is related with getsockopt with the optname=
SO_INCOMING_NAPI_ID. For some testing platform,  it is not
supported with this macro, so use ifdef to avoid send this
to the kernel.

Change-Id: I9e49e6e15810af0cd5085b92469c15a53ac09ada
Signed-off-by: default avatarZiye Yang <ziye.yang@intel.com>
Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/454468


Reviewed-by: default avatarChangpeng Liu <changpeng.liu@intel.com>
Reviewed-by: default avatarShuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-by: default avatarMaciej Szwed <maciej.szwed@intel.com>
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
parent 17b77d79
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -85,6 +85,7 @@ struct spdk_net_impl {
	bool (*is_ipv6)(struct spdk_sock *sock);
	bool (*is_ipv4)(struct spdk_sock *sock);

	int (*get_placement_id)(struct spdk_sock *sock, int *placement_id);
	struct spdk_sock_group_impl *(*group_impl_create)(void);
	int (*group_impl_add_sock)(struct spdk_sock_group_impl *group, struct spdk_sock *sock);
	int (*group_impl_remove_sock)(struct spdk_sock_group_impl *group, struct spdk_sock *sock);
+19 −0
Original line number Diff line number Diff line
@@ -469,6 +469,24 @@ spdk_posix_sock_is_ipv4(struct spdk_sock *_sock)
	return (sa.ss_family == AF_INET);
}

static int
spdk_posix_sock_get_placement_id(struct spdk_sock *_sock, int *placement_id)
{
	int rc = -1;

#if defined(SO_INCOMING_NAPI_ID)
	struct spdk_posix_sock *sock = __posix_sock(_sock);
	socklen_t salen = sizeof(int);

	rc = getsockopt(sock->fd, SOL_SOCKET, SO_INCOMING_NAPI_ID, placement_id, &salen);
	if (rc != 0) {
		SPDK_ERRLOG("getsockopt() failed (errno=%d)\n", errno);
	}

#endif
	return rc;
}

static struct spdk_sock_group_impl *
spdk_posix_sock_group_impl_create(void)
{
@@ -604,6 +622,7 @@ static struct spdk_net_impl g_posix_net_impl = {
	.set_sendbuf	= spdk_posix_sock_set_sendbuf,
	.is_ipv6	= spdk_posix_sock_is_ipv6,
	.is_ipv4	= spdk_posix_sock_is_ipv4,
	.get_placement_id	= spdk_posix_sock_get_placement_id,
	.group_impl_create	= spdk_posix_sock_group_impl_create,
	.group_impl_add_sock	= spdk_posix_sock_group_impl_add_sock,
	.group_impl_remove_sock = spdk_posix_sock_group_impl_remove_sock,
+7 −0
Original line number Diff line number Diff line
@@ -974,6 +974,12 @@ spdk_vpp_sock_is_ipv4(struct spdk_sock *_sock)
	return __vpp_session(_sock)->app_session.transport.is_ip4;
}

static int
spdk_vpp_sock_get_placement_id(struct spdk_sock *_sock, int *placement_id)
{
	return -1;
}

static struct spdk_sock_group_impl *
spdk_vpp_sock_group_impl_create(void)
{
@@ -1387,6 +1393,7 @@ static struct spdk_net_impl g_vpp_net_impl = {
	.set_sendbuf	= spdk_vpp_sock_set_sendbuf,
	.is_ipv6	= spdk_vpp_sock_is_ipv6,
	.is_ipv4	= spdk_vpp_sock_is_ipv4,
	.get_placement_id	= spdk_vpp_sock_get_placement_id,
	.group_impl_create	= spdk_vpp_sock_group_impl_create,
	.group_impl_add_sock	= spdk_vpp_sock_group_impl_add_sock,
	.group_impl_remove_sock = spdk_vpp_sock_group_impl_remove_sock,
+7 −0
Original line number Diff line number Diff line
@@ -244,6 +244,12 @@ spdk_ut_sock_is_ipv4(struct spdk_sock *_sock)
	return true;
}

static int
spdk_ut_sock_get_placement_id(struct spdk_sock *_sock, int *placement_id)
{
	return -1;
}

static struct spdk_sock_group_impl *
spdk_ut_sock_group_impl_create(void)
{
@@ -317,6 +323,7 @@ static struct spdk_net_impl g_ut_net_impl = {
	.set_sendbuf	= spdk_ut_sock_set_sendbuf,
	.is_ipv6	= spdk_ut_sock_is_ipv6,
	.is_ipv4	= spdk_ut_sock_is_ipv4,
	.get_placement_id	= spdk_ut_sock_get_placement_id,
	.group_impl_create	= spdk_ut_sock_group_impl_create,
	.group_impl_add_sock	= spdk_ut_sock_group_impl_add_sock,
	.group_impl_remove_sock = spdk_ut_sock_group_impl_remove_sock,