-static inline int
-vcom_socket_copy_ep_to_sockaddr (__SOCKADDR_ARG __addr,
- socklen_t * __restrict __len,
- vppcom_endpt_t * ep)
-{
- int rv = 0;
- int sa_len, copy_len;
-
- __addr->sa_family = (ep->is_ip4 == VPPCOM_IS_IP4) ? AF_INET : AF_INET6;
- switch (__addr->sa_family)
- {
- case AF_INET:
- ((struct sockaddr_in *) __addr)->sin_port = ep->port;
- if (*__len > sizeof (struct sockaddr_in))
- *__len = sizeof (struct sockaddr_in);
- sa_len = sizeof (struct sockaddr_in) - sizeof (struct in_addr);
- copy_len = *__len - sa_len;
- if (copy_len > 0)
- memcpy (&((struct sockaddr_in *) __addr)->sin_addr, ep->ip, copy_len);
- break;
-
- case AF_INET6:
- ((struct sockaddr_in6 *) __addr)->sin6_port = ep->port;
- if (*__len > sizeof (struct sockaddr_in6))
- *__len = sizeof (struct sockaddr_in6);
- sa_len = sizeof (struct sockaddr_in6) - sizeof (struct in6_addr);
- copy_len = *__len - sa_len;
- if (copy_len > 0)
- memcpy (((struct sockaddr_in6 *) __addr)->sin6_addr.
- __in6_u.__u6_addr8, ep->ip, copy_len);
- break;
-
- default:
- /* Not possible */
- rv = -EAFNOSUPPORT;
- break;
- }
-
- return rv;
-}
-