return 0;
}
-static int
-vppcom_session_fcntl_va (int __sid, int __cmd, va_list __ap)
+static inline int
+vcom_session_fcntl_va (int __sid, int __cmd, va_list __ap)
{
int flags = va_arg (__ap, int);
int rv = -EOPNOTSUPP;
break;
/* cmd handled by vppcom */
case 3:
- rv = vppcom_session_fcntl_va (vsock->sid, __cmd, __ap);
+ rv = vcom_session_fcntl_va (vsock->sid, __cmd, __ap);
break;
default:
return rc;
}
-static int
-vppcom_session_ioctl_va (int __sid, int __cmd, va_list __ap)
+static inline int
+vcom_session_ioctl_va (int __sid, int __cmd, va_list __ap)
{
int rv;
/* cmd handled by vppcom */
case 3:
- rv = vppcom_session_ioctl_va (vsock->sid, __cmd, __ap);
+ rv = vcom_session_ioctl_va (vsock->sid, __cmd, __ap);
break;
default:
fd_set * __restrict vcom_exceptfds,
struct timeval *__restrict timeout)
{
+ static unsigned long vcom_nsid_fds = 0;
+ int vcom_nsid = 0;
int rv = -EBADF;
pid_t pid = getpid ();
fd_set vcom_rd_sid_fds;
fd_set vcom_wr_sid_fds;
fd_set vcom_ex_sid_fds;
- unsigned long vcom_nsid_fds = 0;
- int vcom_nsid = 0;
/* in seconds eg. 3.123456789 seconds */
double time_to_wait = (double) 0;
_(&vcom_ex_sid_fds, vcom_exceptfds);
#undef _
+ if (vcom_nfds == 0)
+ {
+ if (time_to_wait > 0)
+ {
+ if (VCOM_DEBUG > 0)
+ fprintf (stderr,
+ "[%d] vcom_socket_select called to "
+ "emulate delay_ns()!\n", pid);
+ rv = vppcom_select (0, NULL, NULL, NULL, time_to_wait);
+ }
+ else
+ {
+ fprintf (stderr, "[%d] vcom_socket_select called vcom_nfds = 0 "
+ "and invalid time_to_wait (%f)!\n", pid, time_to_wait);
+ }
+ return 0;
+ }
+
/* populate read, write and except sid_sets */
vcom_nsid = vcom_socket_fds_2_sid_fds (
/* dest */
NULL,
vcom_exceptfds ? (unsigned long *) &vcom_ex_sid_fds :
NULL, time_to_wait);
- if (VCOM_DEBUG > 0)
- fprintf (stderr, "[%d] vppcom_select: "
+ if (VCOM_DEBUG > 2)
+ fprintf (stderr, "[%d] called vppcom_select(): "
"'%04d'='%04d'\n", pid, rv, (int) vcom_nsid_fds);
/* check if any file descriptors changed status */
return rv;
}
-int
-vppcom_session_getsockname (int sid, vppcom_endpt_t * ep)
+static inline int
+vcom_session_getsockname (int sid, vppcom_endpt_t * ep)
{
int rv;
uint32_t size = sizeof (*ep);
vppcom_endpt_t ep;
ep.ip = (u8 *) & ((const struct sockaddr_in *) __addr)->sin_addr;
- rv = vppcom_session_getsockname (vsock->sid, &ep);
+ rv = vcom_session_getsockname (vsock->sid, &ep);
if (rv == 0)
{
if (ep.vrf == VPPCOM_VRF_DEFAULT)
return rv;
}
-int
-vppcom_session_getpeername (int sid, vppcom_endpt_t * ep)
+static inline int
+vcom_session_getpeername (int sid, vppcom_endpt_t * ep)
{
int rv;
uint32_t size = sizeof (*ep);
vppcom_endpt_t ep;
ep.ip = (u8 *) & ((const struct sockaddr_in *) __addr)->sin_addr;
- rv = vppcom_session_getpeername (vsock->sid, &ep);
+ rv = vcom_session_getpeername (vsock->sid, &ep);
if (rv == 0)
{
if (ep.vrf == VPPCOM_VRF_DEFAULT)
return 0;
}
-ssize_t
-vvppcom_session_sendto (int __sid, const void *__buf, size_t __n,
- int __flags, __CONST_SOCKADDR_ARG __addr,
- socklen_t __addr_len)
+static inline ssize_t
+vcom_session_sendto (int __sid, void *__buf, size_t __n,
+ int __flags, __CONST_SOCKADDR_ARG __addr,
+ socklen_t __addr_len)
{
int rv = -1;
/* TBD add new vpp api */
if (!vsock)
return -ENOTSOCK;
- if (vsock->type != SOCKET_TYPE_VPPCOM_BOUND)
- return -EINVAL;
-
- if (!__buf || __n < 0)
+ if ((vsock->type != SOCKET_TYPE_VPPCOM_BOUND) || !__buf || __n < 0)
{
return -EINVAL;
}
}
}
- rv = vvppcom_session_sendto (vsock->sid, (void *) __buf, (int) __n,
- __flags, __addr, __addr_len);
+ rv = vcom_session_sendto (vsock->sid, (void *) __buf, (int) __n,
+ __flags, __addr, __addr_len);
return rv;
}
-/* TBD: move it to vppcom */
-static ssize_t
-vppcom_session_recvfrom (int __sid, void *__restrict __buf, size_t __n,
- int __flags, __SOCKADDR_ARG __addr,
- socklen_t * __restrict __addr_len)
+static inline ssize_t
+vcom_session_recvfrom (int __sid, void *__restrict __buf, size_t __n,
+ int __flags, __SOCKADDR_ARG __addr,
+ socklen_t * __restrict __addr_len)
{
int rv = -1;
if (!vsock)
return -ENOTSOCK;
- if (vsock->type != SOCKET_TYPE_VPPCOM_BOUND)
- return -EINVAL;
-
- if (!__buf || __n < 0)
+ if ((vsock->type != SOCKET_TYPE_VPPCOM_BOUND) ||
+ !__buf || __n < 0 || !__addr || !__addr_len || (__addr_len < 0))
{
return -EINVAL;
}
- if (__addr || __addr_len < 0)
- {
- return -EINVAL;
- }
-
- rv = vppcom_session_recvfrom (vsock->sid, __buf, __n,
- __flags, __addr, __addr_len);
+ rv = vcom_session_recvfrom (vsock->sid, __buf, __n,
+ __flags, __addr, __addr_len);
return rv;
}
/* TBD: move it to vppcom */
-static ssize_t
-vppcom_sendmsg (int __sid, const struct msghdr *__message, int __flags)
+static inline ssize_t
+vcom_session_sendmsg (int __sid, const struct msghdr *__message, int __flags)
{
int rv = -1;
/* rv = vppcom_session_write (__sid, (void *) __message->__buf,
;
}
- rv = vppcom_sendmsg (vsock->sid, __message, __flags);
+ rv = vcom_session_sendmsg (vsock->sid, __message, __flags);
return rv;
}
#endif
/* TBD: move it to vppcom */
-static ssize_t
-vppcom_recvmsg (int __sid, struct msghdr *__message, int __flags)
+static inline ssize_t
+vcom_session_recvmsg (int __sid, struct msghdr *__message, int __flags)
{
int rv = -1;
/* rv = vppcom_session_read (__sid, (void *) __message->__buf,
/* validate __flags */
- rv = vppcom_recvmsg (vsock->sid, __message, __flags);
+ rv = vcom_session_recvmsg (vsock->sid, __message, __flags);
return rv;
}
#endif
/* TBD: move it to vppcom */
-static int
-vppcom_getsockopt (int __sid, int __level, int __optname,
- void *__restrict __optval, socklen_t * __restrict __optlen)
+static inline int
+vcom_session_get_sockopt (int __sid, int __level, int __optname,
+ void *__restrict __optval,
+ socklen_t * __restrict __optlen)
{
/* 1. for socket level options that are NOT socket attributes
* and that has corresponding vpp options get from vppcom */
default:
/* 1. handle options that are NOT socket level options,
* but have corresponding vpp otions. */
- rv = vppcom_getsockopt (vsock->sid, __level, __optname,
- __optval, __optlen);
-
- return rv;
-#if 0
- /* 2. unhandled options */
- return -ENOPROTOOPT;
-#endif
+ rv = vcom_session_get_sockopt (vsock->sid, __level, __optname,
+ __optval, __optlen);
+ break;
}
return rv;
}
/* TBD: move it to vppcom */
-int
-vppcom_session_setsockopt (int __sid, int __level, int __optname,
- const void *__optval, socklen_t __optlen)
+static inline int
+vcom_session_setsockopt (int __sid, int __level, int __optname,
+ const void *__optval, socklen_t __optlen)
{
int rv = -EOPNOTSUPP;
switch (__optname)
{
case IPV6_V6ONLY:
- rv = vppcom_session_setsockopt (vsock->sid, __level, __optname,
- __optval, __optlen);
+ rv = vcom_session_setsockopt (vsock->sid, __level, __optname,
+ __optval, __optlen);
break;
default:
return -EOPNOTSUPP;
return 0;
case TCP_KEEPIDLE:
case TCP_KEEPINTVL:
- rv = vppcom_session_setsockopt (vsock->sid, __level, __optname,
- __optval, __optlen);
+ rv = vcom_session_setsockopt (vsock->sid, __level, __optname,
+ __optval, __optlen);
break;
default:
return -EOPNOTSUPP;
case SO_REUSEADDR:
case SO_BROADCAST:
case SO_KEEPALIVE:
- rv = vppcom_session_setsockopt (vsock->sid, __level, __optname,
- __optval, __optlen);
+ rv = vcom_session_setsockopt (vsock->sid, __level, __optname,
+ __optval, __optlen);
break;
/*
#endif
/* TBD: move it to vppcom */
-int
-vppcom_session_shutdown (int __fd, int __how)
+static inline int
+vcom_session_shutdown (int __fd, int __how)
{
return 0;
}
case SHUT_RD:
case SHUT_WR:
case SHUT_RDWR:
- rv = vppcom_session_shutdown (vsock->sid, __how);
+ rv = vcom_session_shutdown (vsock->sid, __how);
return rv;
break;
vcom_nfd = vcom_socket_select (vcom_nfds,
&vcom_readfds,
&vcom_writefds, &vcom_exceptfds, &tv);
- if (VCOM_DEBUG > 0)
+ if (VCOM_DEBUG > 2)
fprintf (stderr,
"[%d] vcom_socket_select: "
"'%04d'='%04d'\n", pid, vcom_nfd, vcom_nfds);