summaryrefslogtreecommitdiff
path: root/src/libsystemd-network
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2023-04-13 18:34:09 +0900
committerYu Watanabe <watanabe.yu+github@gmail.com>2023-04-16 13:26:58 +0900
commit1ebb0953f01051cd85dd5d0a03acf309a8f3c3b9 (patch)
tree5b8c2b82db1106d25fac52464301474bb01011a6 /src/libsystemd-network
parent789f5c6f706383442d85a9aedc6396a1a7877057 (diff)
downloadsystemd-1ebb0953f01051cd85dd5d0a03acf309a8f3c3b9.tar.gz
sd-dhcp-server: use CMSG_FIND_DATA() at one more place
Diffstat (limited to 'src/libsystemd-network')
-rw-r--r--src/libsystemd-network/sd-dhcp-server.c18
1 files changed, 4 insertions, 14 deletions
diff --git a/src/libsystemd-network/sd-dhcp-server.c b/src/libsystemd-network/sd-dhcp-server.c
index 15a0145959..b9c77eafa5 100644
--- a/src/libsystemd-network/sd-dhcp-server.c
+++ b/src/libsystemd-network/sd-dhcp-server.c
@@ -1270,7 +1270,6 @@ static int server_receive_message(sd_event_source *s, int fd,
.msg_control = &control,
.msg_controllen = sizeof(control),
};
- struct cmsghdr *cmsg;
ssize_t datagram_size, len;
int r;
@@ -1306,19 +1305,10 @@ static int server_receive_message(sd_event_source *s, int fd,
if ((size_t) len < sizeof(DHCPMessage))
return 0;
- CMSG_FOREACH(cmsg, &msg)
- if (cmsg->cmsg_level == IPPROTO_IP &&
- cmsg->cmsg_type == IP_PKTINFO &&
- cmsg->cmsg_len == CMSG_LEN(sizeof(struct in_pktinfo))) {
- struct in_pktinfo *info = CMSG_TYPED_DATA(cmsg, struct in_pktinfo);
-
- /* TODO figure out if this can be done as a filter on
- * the socket, like for IPv6 */
- if (server->ifindex != info->ipi_ifindex)
- return 0;
-
- break;
- }
+ /* TODO figure out if this can be done as a filter on the socket, like for IPv6 */
+ struct in_pktinfo *info = CMSG_FIND_DATA(&msg, IPPROTO_IP, IP_PKTINFO, struct in_pktinfo);
+ if (info && info->ipi_ifindex != server->ifindex)
+ return 0;
if (sd_dhcp_server_is_in_relay_mode(server)) {
r = dhcp_server_relay_message(server, message, len - sizeof(DHCPMessage), buflen);