Skip to content

Commit

Permalink
icmp6-util: several cleanups for icmp6_receive()
Browse files Browse the repository at this point in the history
- Rename the argument for storing the sender address,
- allow to call it with NULL for ret_xyz,
- reduce needless copy of timestamp when the message does not have
  timestamp.
  • Loading branch information
yuwata committed Sep 4, 2023
1 parent 4674f40 commit 5121163
Show file tree
Hide file tree
Showing 5 changed files with 47 additions and 20 deletions.
13 changes: 9 additions & 4 deletions src/libsystemd-network/fuzz-ndisc-rs.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,17 @@ int icmp6_bind_router_advertisement(int index) {
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;
}
Expand Down
20 changes: 14 additions & 6 deletions src/libsystemd-network/icmp6-util.c
Original file line number Diff line number Diff line change
Expand Up @@ -144,8 +144,12 @@ int icmp6_send_router_solicitation(int s, const struct ether_addr *ether_addr) {
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 */
Expand Down Expand Up @@ -206,10 +210,14 @@ int icmp6_receive(int fd, void *buffer, size_t size, struct in6_addr *ret_dst,
}
}

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;
}
8 changes: 6 additions & 2 deletions src/libsystemd-network/icmp6-util.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,5 +20,9 @@
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);
13 changes: 9 additions & 4 deletions src/libsystemd-network/test-ndisc-ra.c
Original file line number Diff line number Diff line change
Expand Up @@ -223,12 +223,17 @@ int icmp6_send_router_solicitation(int s, const struct ether_addr *ether_addr) {
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;
}
Expand Down
13 changes: 9 additions & 4 deletions src/libsystemd-network/test-ndisc-rs.c
Original file line number Diff line number Diff line change
Expand Up @@ -176,12 +176,17 @@ int icmp6_bind_router_advertisement(int ifindex) {
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;
}
Expand Down

0 comments on commit 5121163

Please sign in to comment.