X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Flibsystemd-network%2Fsd-dhcp-client.c;h=94235cf2f57d1a60ae479be27ccee1db59e28b55;hb=f27e2d8c0c0c18d5a1be62c87ea89fcd4894fffa;hp=489220326e90843872e246b7956ced1e6a6b24bd;hpb=6e00a80641aaba814204c65365c2fd5a90768394;p=elogind.git diff --git a/src/libsystemd-network/sd-dhcp-client.c b/src/libsystemd-network/sd-dhcp-client.c index 489220326..94235cf2f 100644 --- a/src/libsystemd-network/sd-dhcp-client.c +++ b/src/libsystemd-network/sd-dhcp-client.c @@ -23,12 +23,14 @@ #include #include #include +#include #include #include #include "util.h" #include "list.h" #include "refcnt.h" +#include "async.h" #include "dhcp-protocol.h" #include "dhcp-internal.h" @@ -142,7 +144,7 @@ int sd_dhcp_client_set_index(sd_dhcp_client *client, int interface_index) { assert_return(client, -EINVAL); assert_return (IN_SET(client->state, DHCP_STATE_INIT, DHCP_STATE_STOPPED), -EBUSY); - assert_return(interface_index >= -1, -EINVAL); + assert_return(interface_index > 0, -EINVAL); client->index = interface_index; @@ -208,7 +210,7 @@ static int client_initialize(sd_dhcp_client *client) { client->receive_message = sd_event_source_unref(client->receive_message); - client->fd = safe_close(client->fd); + client->fd = asynchronous_close(client->fd); client->timeout_resend = sd_event_source_unref(client->timeout_resend); @@ -230,7 +232,21 @@ static int client_initialize(sd_dhcp_client *client) { static sd_dhcp_client *client_stop(sd_dhcp_client *client, int error) { assert_return(client, NULL); - log_dhcp_client(client, "STOPPED: %s", strerror(-error)); + if (error < 0) + log_dhcp_client(client, "STOPPED: %s", strerror(-error)); + else { + switch(error) { + case DHCP_EVENT_STOP: + log_dhcp_client(client, "STOPPED"); + break; + case DHCP_EVENT_NO_LEASE: + log_dhcp_client(client, "STOPPED: No lease"); + break; + default: + log_dhcp_client(client, "STOPPED: Unknown reason"); + break; + } + } client = client_notify(client, error); @@ -732,7 +748,7 @@ static int client_timeout_t2(sd_event_source *s, uint64_t usec, void *userdata) int r; client->receive_message = sd_event_source_unref(client->receive_message); - client->fd = safe_close(client->fd); + client->fd = asynchronous_close(client->fd); client->state = DHCP_STATE_REBINDING; client->attempt = 1; @@ -755,8 +771,7 @@ static int client_timeout_t1(sd_event_source *s, uint64_t usec, client->state = DHCP_STATE_RENEWING; client->attempt = 1; - r = dhcp_network_bind_udp_socket(client->index, - client->lease->address, + r = dhcp_network_bind_udp_socket(client->lease->address, DHCP_PORT_CLIENT); if (r < 0) { client_stop(client, r); @@ -1139,7 +1154,7 @@ static int client_handle_message(sd_dhcp_client *client, DHCPMessage *message, client->receive_message = sd_event_source_unref(client->receive_message); - client->fd = safe_close(client->fd); + client->fd = asynchronous_close(client->fd); } else if (r == -ENOMSG) /* invalid message, let's ignore it */ return 0; @@ -1264,7 +1279,9 @@ int sd_dhcp_client_start(sd_dhcp_client *client) { r = client_start(client); if (r >= 0) - log_dhcp_client(client, "STARTED"); + log_dhcp_client(client, "STARTED on ifindex %u with address %s", + client->index, + ether_ntoa(&client->client_id.mac_addr)); return r; }