|
|
|
|
@ -28,8 +28,8 @@ static bool __ip_connect(socket_t *s, const endpoint_t *);
|
|
|
|
|
static bool __ip_listen(socket_t *s, int backlog);
|
|
|
|
|
static bool __ip_accept(socket_t *s, socket_t *new_sock);
|
|
|
|
|
static bool __ip_timestamping(socket_t *s);
|
|
|
|
|
static int __ip4_pktinfo(socket_t *s);
|
|
|
|
|
static int __ip6_pktinfo(socket_t *s);
|
|
|
|
|
static bool __ip4_pktinfo(socket_t *s);
|
|
|
|
|
static bool __ip6_pktinfo(socket_t *s);
|
|
|
|
|
static bool __ip4_sockaddr2endpoint(endpoint_t *, const void *);
|
|
|
|
|
static bool __ip6_sockaddr2endpoint(endpoint_t *, const void *);
|
|
|
|
|
static bool __ip4_endpoint2sockaddr(void *, const endpoint_t *);
|
|
|
|
|
@ -416,11 +416,11 @@ static bool __ip_timestamping(socket_t *s) {
|
|
|
|
|
return false;
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
static int __ip4_pktinfo(socket_t *s) {
|
|
|
|
|
static bool __ip4_pktinfo(socket_t *s) {
|
|
|
|
|
int one = 1;
|
|
|
|
|
if (setsockopt(s->fd, IPPROTO_IP, IP_PKTINFO, &one, sizeof(one)))
|
|
|
|
|
return -1;
|
|
|
|
|
return 0;
|
|
|
|
|
return false;
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
static void __ip4_cmsg_pktinfo(struct cmsghdr *cm, const sockaddr_t *addr) {
|
|
|
|
|
cm->cmsg_level = IPPROTO_IP;
|
|
|
|
|
@ -430,11 +430,11 @@ static void __ip4_cmsg_pktinfo(struct cmsghdr *cm, const sockaddr_t *addr) {
|
|
|
|
|
pi->ipi_spec_dst = addr->ipv4;
|
|
|
|
|
cm->cmsg_len = CMSG_LEN(sizeof(*pi));
|
|
|
|
|
}
|
|
|
|
|
static int __ip6_pktinfo(socket_t *s) {
|
|
|
|
|
static bool __ip6_pktinfo(socket_t *s) {
|
|
|
|
|
int one = 1;
|
|
|
|
|
if (setsockopt(s->fd, IPPROTO_IPV6, IPV6_RECVPKTINFO, &one, sizeof(one)))
|
|
|
|
|
return -1;
|
|
|
|
|
return 0;
|
|
|
|
|
return false;
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
static void __ip6_cmsg_pktinfo(struct cmsghdr *cm, const sockaddr_t *addr) {
|
|
|
|
|
cm->cmsg_level = IPPROTO_IPV6;
|
|
|
|
|
|