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: Ziye Yang <ziye.yang@intel.com>
Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/454468
Reviewed-by: Changpeng Liu <changpeng.liu@intel.com>
Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-by: Maciej Szwed <maciej.szwed@intel.com>
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
This commit is contained in:
Ziye Yang 2019-05-14 20:50:15 +08:00 committed by Changpeng Liu
parent 17b77d79ee
commit 404d27263f
4 changed files with 34 additions and 0 deletions

View File

@ -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);

View File

@ -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,

View File

@ -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,

View File

@ -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,