return -ENOSYS;
}
-int icmp6_receive(int fd, void *iov_base, size_t iov_len,
- struct in6_addr *dst, triple_timestamp *timestamp) {
+int icmp6_receive(
+ int fd,
+ void *iov_base,
+ size_t iov_len,
+ struct in6_addr *ret_sender,
+ triple_timestamp *ret_timestamp) {
+
assert_se(read(fd, iov_base, iov_len) == (ssize_t) iov_len);
- if (timestamp)
- triple_timestamp_get(timestamp);
+ if (ret_timestamp)
+ triple_timestamp_get(ret_timestamp);
return 0;
}
return 0;
}
-int icmp6_receive(int fd, void *buffer, size_t size, struct in6_addr *ret_dst,
- triple_timestamp *ret_timestamp) {
+int icmp6_receive(
+ int fd,
+ void *buffer,
+ size_t size,
+ struct in6_addr *ret_sender,
+ triple_timestamp *ret_timestamp) {
/* This needs to be initialized with zero. See #20741. */
CMSG_BUFFER_TYPE(CMSG_SPACE(sizeof(int)) + /* ttl */
}
}
- if (!triple_timestamp_is_set(&t))
- triple_timestamp_get(&t);
+ if (ret_timestamp) {
+ if (triple_timestamp_is_set(&t))
+ *ret_timestamp = t;
+ else
+ triple_timestamp_get(ret_timestamp);
+ }
- *ret_dst = addr;
- *ret_timestamp = t;
+ if (ret_sender)
+ *ret_sender = addr;
return 0;
}
int icmp6_bind_router_solicitation(int ifindex);
int icmp6_bind_router_advertisement(int ifindex);
int icmp6_send_router_solicitation(int s, const struct ether_addr *ether_addr);
-int icmp6_receive(int fd, void *buffer, size_t size, struct in6_addr *ret_dst,
- triple_timestamp *ret_timestamp);
+int icmp6_receive(
+ int fd,
+ void *buffer,
+ size_t size,
+ struct in6_addr *ret_sender,
+ triple_timestamp *ret_timestamp);
return 0;
}
-int icmp6_receive(int fd, void *iov_base, size_t iov_len,
- struct in6_addr *dst, triple_timestamp *timestamp) {
+int icmp6_receive(
+ int fd,
+ void *iov_base,
+ size_t iov_len,
+ struct in6_addr *ret_sender,
+ triple_timestamp *ret_timestamp) {
+
assert_se(read (fd, iov_base, iov_len) == (ssize_t)iov_len);
- if (timestamp)
- triple_timestamp_get(timestamp);
+ if (ret_timestamp)
+ triple_timestamp_get(ret_timestamp);
return 0;
}
return -ENOSYS;
}
-int icmp6_receive(int fd, void *iov_base, size_t iov_len,
- struct in6_addr *dst, triple_timestamp *timestamp) {
+int icmp6_receive(
+ int fd,
+ void *iov_base,
+ size_t iov_len,
+ struct in6_addr *ret_sender,
+ triple_timestamp *ret_timestamp) {
+
assert_se(read (fd, iov_base, iov_len) == (ssize_t)iov_len);
- if (timestamp)
- triple_timestamp_get(timestamp);
+ if (ret_timestamp)
+ triple_timestamp_get(ret_timestamp);
return 0;
}