]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sd-dhcp-server: use CMSG_FIND_DATA() at one more place
authorYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 13 Apr 2023 09:34:09 +0000 (18:34 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Sun, 16 Apr 2023 04:26:58 +0000 (13:26 +0900)
src/libsystemd-network/sd-dhcp-server.c

index 15a0145959f4cb5fa44b3b1e66dfd8a717d84478..b9c77eafa5a2aa0e9978be6f2d4baa95caf0ff58 100644 (file)
@@ -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);