X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Flibsystemd-network%2Fsd-dhcp-server.c;h=53cf0d7e46d9ac328de7eb6cc53f51203de96657;hb=eda8090ba9abc7d00f30e2b4cb34273cde799704;hp=e4236e8f7de1bb7af47c1f478e57baeb2595e55e;hpb=88675ae97c62dcef32c654038a9bb92fd890e408;p=elogind.git diff --git a/src/libsystemd-network/sd-dhcp-server.c b/src/libsystemd-network/sd-dhcp-server.c index e4236e8f7..53cf0d7e4 100644 --- a/src/libsystemd-network/sd-dhcp-server.c +++ b/src/libsystemd-network/sd-dhcp-server.c @@ -29,7 +29,7 @@ #include "dhcp-server-internal.h" #include "dhcp-internal.h" -#define DHCP_DEFAULT_LEASE_TIME 60 +#define DHCP_DEFAULT_LEASE_TIME 3600 /* one hour */ int sd_dhcp_server_set_lease_pool(sd_dhcp_server *server, struct in_addr *address, size_t size) { @@ -62,6 +62,12 @@ int sd_dhcp_server_set_address(sd_dhcp_server *server, struct in_addr *address) return 0; } +bool sd_dhcp_server_is_running(sd_dhcp_server *server) { + assert_return(server, -EINVAL); + + return !!server->receive_message; +} + sd_dhcp_server *sd_dhcp_server_ref(sd_dhcp_server *server) { if (server) assert_se(REFCNT_INC(server->n_ref) >= 2); @@ -340,9 +346,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 */ @@ -353,7 +362,7 @@ int dhcp_server_send_packet(sd_dhcp_server *server, static int server_message_init(sd_dhcp_server *server, DHCPPacket **ret, uint8_t type, size_t *_optoffset, DHCPRequest *req) { _cleanup_free_ DHCPPacket *packet = NULL; - size_t optoffset; + size_t optoffset = 0; int r; assert(server);