mirror of
https://github.com/systemd/systemd.git
synced 2026-08-08 00:51:19 +00:00
sd-dhcp-server: fix broadcast of DHCP packets
The destination IP address should be INADDR_BROADCAST, but was accidentally left as INADDR_ANY.
This commit is contained in:
@@ -127,6 +127,10 @@ int dhcp_network_bind_udp_socket(be32_t address, uint16_t port) {
|
||||
r = setsockopt(s, IPPROTO_IP, IP_PKTINFO, &on, sizeof(on));
|
||||
if (r < 0)
|
||||
return -errno;
|
||||
|
||||
r = setsockopt(s, SOL_SOCKET, SO_BROADCAST, &on, sizeof(on));
|
||||
if (r < 0)
|
||||
return -errno;
|
||||
}
|
||||
|
||||
r = bind(s, &src.sa, sizeof(src.in));
|
||||
|
||||
@@ -340,9 +340,12 @@ int dhcp_server_send_packet(sd_dhcp_server *server,
|
||||
} else if (req->message->ciaddr && type != DHCP_NAK)
|
||||
destination = req->message->ciaddr;
|
||||
|
||||
if (destination || requested_broadcast(req) || type == DHCP_NAK)
|
||||
if (destination != INADDR_ANY)
|
||||
return dhcp_server_send_udp(server, destination, &packet->dhcp,
|
||||
sizeof(DHCPMessage) + optoffset);
|
||||
else if (requested_broadcast(req) || type == DHCP_NAK)
|
||||
return dhcp_server_send_udp(server, INADDR_BROADCAST, &packet->dhcp,
|
||||
sizeof(DHCPMessage) + optoffset);
|
||||
else
|
||||
/* we cannot send UDP packet to specific MAC address when the address is
|
||||
not yet configured, so must fall back to raw packets */
|
||||
|
||||
Reference in New Issue
Block a user