Skip to content

Commit 811edce

Browse files
yuwatakeszybz
authored andcommitted
icmp6-util: several cleanups for icmp6_receive()
- 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. (cherry picked from commit 5121163)
1 parent 9dec95c commit 811edce

File tree

5 files changed

+47
-20
lines changed

5 files changed

+47
-20
lines changed

src/libsystemd-network/fuzz-ndisc-rs.c

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,17 @@ int icmp6_bind_router_advertisement(int index) {
2424
return -ENOSYS;
2525
}
2626

27-
int icmp6_receive(int fd, void *iov_base, size_t iov_len,
28-
struct in6_addr *dst, triple_timestamp *timestamp) {
27+
int icmp6_receive(
28+
int fd,
29+
void *iov_base,
30+
size_t iov_len,
31+
struct in6_addr *ret_sender,
32+
triple_timestamp *ret_timestamp) {
33+
2934
assert_se(read(fd, iov_base, iov_len) == (ssize_t) iov_len);
3035

31-
if (timestamp)
32-
triple_timestamp_get(timestamp);
36+
if (ret_timestamp)
37+
triple_timestamp_get(ret_timestamp);
3338

3439
return 0;
3540
}

src/libsystemd-network/icmp6-util.c

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -144,8 +144,12 @@ int icmp6_send_router_solicitation(int s, const struct ether_addr *ether_addr) {
144144
return 0;
145145
}
146146

147-
int icmp6_receive(int fd, void *buffer, size_t size, struct in6_addr *ret_dst,
148-
triple_timestamp *ret_timestamp) {
147+
int icmp6_receive(
148+
int fd,
149+
void *buffer,
150+
size_t size,
151+
struct in6_addr *ret_sender,
152+
triple_timestamp *ret_timestamp) {
149153

150154
/* This needs to be initialized with zero. See #20741. */
151155
CMSG_BUFFER_TYPE(CMSG_SPACE(sizeof(int)) + /* ttl */
@@ -206,10 +210,14 @@ int icmp6_receive(int fd, void *buffer, size_t size, struct in6_addr *ret_dst,
206210
}
207211
}
208212

209-
if (!triple_timestamp_is_set(&t))
210-
triple_timestamp_get(&t);
213+
if (ret_timestamp) {
214+
if (triple_timestamp_is_set(&t))
215+
*ret_timestamp = t;
216+
else
217+
triple_timestamp_get(ret_timestamp);
218+
}
211219

212-
*ret_dst = addr;
213-
*ret_timestamp = t;
220+
if (ret_sender)
221+
*ret_sender = addr;
214222
return 0;
215223
}

src/libsystemd-network/icmp6-util.h

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,9 @@
2020
int icmp6_bind_router_solicitation(int ifindex);
2121
int icmp6_bind_router_advertisement(int ifindex);
2222
int icmp6_send_router_solicitation(int s, const struct ether_addr *ether_addr);
23-
int icmp6_receive(int fd, void *buffer, size_t size, struct in6_addr *ret_dst,
24-
triple_timestamp *ret_timestamp);
23+
int icmp6_receive(
24+
int fd,
25+
void *buffer,
26+
size_t size,
27+
struct in6_addr *ret_sender,
28+
triple_timestamp *ret_timestamp);

src/libsystemd-network/test-ndisc-ra.c

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -223,12 +223,17 @@ int icmp6_send_router_solicitation(int s, const struct ether_addr *ether_addr) {
223223
return 0;
224224
}
225225

226-
int icmp6_receive(int fd, void *iov_base, size_t iov_len,
227-
struct in6_addr *dst, triple_timestamp *timestamp) {
226+
int icmp6_receive(
227+
int fd,
228+
void *iov_base,
229+
size_t iov_len,
230+
struct in6_addr *ret_sender,
231+
triple_timestamp *ret_timestamp) {
232+
228233
assert_se(read (fd, iov_base, iov_len) == (ssize_t)iov_len);
229234

230-
if (timestamp)
231-
triple_timestamp_get(timestamp);
235+
if (ret_timestamp)
236+
triple_timestamp_get(ret_timestamp);
232237

233238
return 0;
234239
}

src/libsystemd-network/test-ndisc-rs.c

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -176,12 +176,17 @@ int icmp6_bind_router_advertisement(int ifindex) {
176176
return -ENOSYS;
177177
}
178178

179-
int icmp6_receive(int fd, void *iov_base, size_t iov_len,
180-
struct in6_addr *dst, triple_timestamp *timestamp) {
179+
int icmp6_receive(
180+
int fd,
181+
void *iov_base,
182+
size_t iov_len,
183+
struct in6_addr *ret_sender,
184+
triple_timestamp *ret_timestamp) {
185+
181186
assert_se(read (fd, iov_base, iov_len) == (ssize_t)iov_len);
182187

183-
if (timestamp)
184-
triple_timestamp_get(timestamp);
188+
if (ret_timestamp)
189+
triple_timestamp_get(ret_timestamp);
185190

186191
return 0;
187192
}

0 commit comments

Comments
 (0)