aboutsummaryrefslogtreecommitdiff
path: root/client/dhclient.c
diff options
context:
space:
mode:
Diffstat (limited to 'client/dhclient.c')
-rw-r--r--client/dhclient.c117
1 files changed, 70 insertions, 47 deletions
diff --git a/client/dhclient.c b/client/dhclient.c
index 48707d1..fc60383 100644
--- a/client/dhclient.c
+++ b/client/dhclient.c
@@ -3,7 +3,7 @@
DHCP Client. */
/*
- * Copyright (c) 2004-2011 by Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (c) 2004-2012 by Internet Systems Consortium, Inc. ("ISC")
* Copyright (c) 1995-2003 by Internet Software Consortium
*
* Permission to use, copy, modify, and distribute this software for any
@@ -68,7 +68,7 @@ int duid_type = 0;
#define ASSERT_STATE(state_is, state_shouldbe) {}
static const char copyright[] =
-"Copyright 2004-2011 Internet Systems Consortium.";
+"Copyright 2004-2012 Internet Systems Consortium.";
static const char arr [] = "All rights reserved.";
static const char message [] = "Internet Systems Consortium DHCP Client";
static const char url [] =
@@ -1901,11 +1901,14 @@ void send_discover (cpp)
ntohs (sockaddr_broadcast.sin_port), (long)(client -> interval));
/* Send out a packet. */
- result = send_packet (client -> interface, (struct packet *)0,
- &client -> packet,
- client -> packet_length,
- inaddr_any, &sockaddr_broadcast,
- (struct hardware *)0);
+ result = send_packet(client->interface, NULL, &client->packet,
+ client->packet_length, inaddr_any,
+ &sockaddr_broadcast, NULL);
+ if (result < 0) {
+ log_error("%s:%d: Failed to send %d byte long packet over %s "
+ "interface.", MDL, client->packet_length,
+ client->interface->name);
+ }
/*
* If we used 0 microseconds here, and there were other clients on the
@@ -2168,20 +2171,29 @@ void send_request (cpp)
ntohs (destination.sin_port));
if (destination.sin_addr.s_addr != INADDR_BROADCAST &&
- fallback_interface)
- result = send_packet (fallback_interface,
- (struct packet *)0,
- &client -> packet,
- client -> packet_length,
- from, &destination,
- (struct hardware *)0);
- else
+ fallback_interface) {
+ result = send_packet(fallback_interface, NULL, &client->packet,
+ client->packet_length, from, &destination,
+ NULL);
+ if (result < 0) {
+ log_error("%s:%d: Failed to send %d byte long packet "
+ "over %s interface.", MDL,
+ client->packet_length,
+ fallback_interface->name);
+ }
+ }
+ else {
/* Send out a packet. */
- result = send_packet (client -> interface, (struct packet *)0,
- &client -> packet,
- client -> packet_length,
- from, &destination,
- (struct hardware *)0);
+ result = send_packet(client->interface, NULL, &client->packet,
+ client->packet_length, from, &destination,
+ NULL);
+ if (result < 0) {
+ log_error("%s:%d: Failed to send %d byte long packet"
+ " over %s interface.", MDL,
+ client->packet_length,
+ client->interface->name);
+ }
+ }
tv.tv_sec = cur_tv.tv_sec + client->interval;
tv.tv_usec = ((tv.tv_sec - cur_tv.tv_sec) > 1) ?
@@ -2197,16 +2209,19 @@ void send_decline (cpp)
int result;
log_info ("DHCPDECLINE on %s to %s port %d",
- client -> name ? client -> name : client -> interface -> name,
- inet_ntoa (sockaddr_broadcast.sin_addr),
- ntohs (sockaddr_broadcast.sin_port));
+ client->name ? client->name : client->interface->name,
+ inet_ntoa(sockaddr_broadcast.sin_addr),
+ ntohs(sockaddr_broadcast.sin_port));
/* Send out a packet. */
- result = send_packet (client -> interface, (struct packet *)0,
- &client -> packet,
- client -> packet_length,
- inaddr_any, &sockaddr_broadcast,
- (struct hardware *)0);
+ result = send_packet(client->interface, NULL, &client->packet,
+ client->packet_length, inaddr_any,
+ &sockaddr_broadcast, NULL);
+ if (result < 0) {
+ log_error("%s:%d: Failed to send %d byte long packet over %s"
+ " interface.", MDL, client->packet_length,
+ client->interface->name);
+ }
}
void send_release (cpp)
@@ -2244,20 +2259,29 @@ void send_release (cpp)
inet_ntoa (destination.sin_addr),
ntohs (destination.sin_port));
- if (fallback_interface)
- result = send_packet (fallback_interface,
- (struct packet *)0,
- &client -> packet,
- client -> packet_length,
- from, &destination,
- (struct hardware *)0);
- else
+ if (fallback_interface) {
+ result = send_packet(fallback_interface, NULL, &client->packet,
+ client->packet_length, from, &destination,
+ NULL);
+ if (result < 0) {
+ log_error("%s:%d: Failed to send %d byte long packet"
+ " over %s interface.", MDL,
+ client->packet_length,
+ fallback_interface->name);
+ }
+ } else {
/* Send out a packet. */
- result = send_packet (client -> interface, (struct packet *)0,
- &client -> packet,
- client -> packet_length,
- from, &destination,
- (struct hardware *)0);
+ result = send_packet(client->interface, NULL, &client->packet,
+ client->packet_length, from, &destination,
+ NULL);
+ if (result < 0) {
+ log_error ("%s:%d: Failed to send %d byte long packet"
+ " over %s interface.", MDL,
+ client->packet_length,
+ client->interface->name);
+ }
+
+ }
}
void
@@ -3221,7 +3245,6 @@ void script_write_params (client, prefix, lease)
lease->server_name);
}
}
-
for (i = 0; i < lease -> options -> universe_count; i++) {
option_space_foreach ((struct packet *)0, (struct lease *)0,
@@ -3706,7 +3729,7 @@ client_dns_remove_action(dhcp_ddns_cb_t *ddns_cb,
/* Do the second stage of the FWD removal */
ddns_cb->state = DDNS_STATE_REM_FW_NXRR;
- result = ddns_modify_fwd(ddns_cb);
+ result = ddns_modify_fwd(ddns_cb, MDL);
if (result == ISC_R_SUCCESS) {
return;
}
@@ -3726,7 +3749,7 @@ client_dns_remove(struct client_state *client,
/* if we have an old ddns request for this client, cancel it */
if (client->ddns_cb != NULL) {
- ddns_cancel(client->ddns_cb);
+ ddns_cancel(client->ddns_cb, MDL);
client->ddns_cb = NULL;
}
@@ -3884,7 +3907,7 @@ client_dns_update_action(dhcp_ddns_cb_t *ddns_cb,
ddns_cb->state = DDNS_STATE_ADD_FW_YXDHCID;
ddns_cb->cur_func = client_dns_update_action;
- result = ddns_modify_fwd(ddns_cb);
+ result = ddns_modify_fwd(ddns_cb, MDL);
if (result == ISC_R_SUCCESS) {
return;
}
@@ -4021,7 +4044,7 @@ client_dns_update(struct client_state *client, dhcp_ddns_cb_t *ddns_cb)
* Perform updates.
*/
if (ddns_cb->fwd_name.len && ddns_cb->dhcid.len) {
- rcode = ddns_modify_fwd(ddns_cb);
+ rcode = ddns_modify_fwd(ddns_cb, MDL);
} else
rcode = ISC_R_FAILURE;
@@ -4054,7 +4077,7 @@ dhclient_schedule_updates(struct client_state *client,
/* cancel any outstanding ddns requests */
if (client->ddns_cb != NULL) {
- ddns_cancel(client->ddns_cb);
+ ddns_cancel(client->ddns_cb, MDL);
client->ddns_cb = NULL;
}