aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--networking/udhcp/dhcpd.c27
1 files changed, 9 insertions, 18 deletions
diff --git a/networking/udhcp/dhcpd.c b/networking/udhcp/dhcpd.c
index 26fb3045f..d7887d914 100644
--- a/networking/udhcp/dhcpd.c
+++ b/networking/udhcp/dhcpd.c
@@ -120,12 +120,11 @@ static uint32_t select_lease_time(struct dhcp_packet *packet)
}
/* send a DHCP OFFER to a DHCP DISCOVER */
-static int send_offer(struct dhcp_packet *oldpacket)
+static int send_offer(struct dhcp_packet *oldpacket, uint32_t static_lease_nip, struct dyn_lease *lease)
{
struct dhcp_packet packet;
uint32_t req_nip;
uint32_t lease_time_sec = server_config.max_lease_sec;
- uint32_t static_lease_ip;
uint8_t *req_ip_opt;
const char *p_host_name;
struct option_set *curr;
@@ -133,18 +132,10 @@ static int send_offer(struct dhcp_packet *oldpacket)
init_packet(&packet, oldpacket, DHCPOFFER);
- static_lease_ip = get_static_nip_by_mac(server_config.static_leases, oldpacket->chaddr);
-
/* ADDME: if static, short circuit */
- if (!static_lease_ip) {
- struct dyn_lease *lease;
-
- lease = find_lease_by_mac(oldpacket->chaddr);
+ if (!static_lease_nip) {
/* The client is in our lease/offered table */
if (lease) {
- signed_leasetime_t tmp = lease->expires - time(NULL);
- if (tmp >= 0)
- lease_time_sec = tmp;
packet.yiaddr = lease->lease_nip;
}
/* Or the client has requested an IP */
@@ -183,7 +174,7 @@ static int send_offer(struct dhcp_packet *oldpacket)
lease_time_sec = select_lease_time(oldpacket);
} else {
/* It is a static lease... use it */
- packet.yiaddr = static_lease_ip;
+ packet.yiaddr = static_lease_nip;
}
add_simple_option(packet.options, DHCP_LEASE_TIME, htonl(lease_time_sec));
@@ -288,7 +279,7 @@ int udhcpd_main(int argc UNUSED_PARAM, char **argv)
int server_socket = -1, retval, max_sock;
struct dhcp_packet packet;
uint8_t *state;
- uint32_t static_lease_ip;
+ uint32_t static_lease_nip;
unsigned timeout_end;
unsigned num_ips;
unsigned opt;
@@ -439,12 +430,12 @@ int udhcpd_main(int argc UNUSED_PARAM, char **argv)
}
/* Look for a static lease */
- static_lease_ip = get_static_nip_by_mac(server_config.static_leases, &packet.chaddr);
- if (static_lease_ip) {
- bb_info_msg("Found static lease: %x", static_lease_ip);
+ static_lease_nip = get_static_nip_by_mac(server_config.static_leases, &packet.chaddr);
+ if (static_lease_nip) {
+ bb_info_msg("Found static lease: %x", static_lease_nip);
memcpy(&fake_lease.lease_mac, &packet.chaddr, 6);
- fake_lease.lease_nip = static_lease_ip;
+ fake_lease.lease_nip = static_lease_nip;
fake_lease.expires = 0;
lease = &fake_lease;
@@ -456,7 +447,7 @@ int udhcpd_main(int argc UNUSED_PARAM, char **argv)
case DHCPDISCOVER:
log1("Received DISCOVER");
- if (send_offer(&packet) < 0) {
+ if (send_offer(&packet, static_lease_nip, lease) < 0) {
bb_error_msg("send OFFER failed");
}
break;