diff options
author | Eric Andersen | 2004-10-08 08:49:26 +0000 |
---|---|---|
committer | Eric Andersen | 2004-10-08 08:49:26 +0000 |
commit | abf58d6ba5df9bbe04c4c7008cbbc8c7dc626392 (patch) | |
tree | c64a5328d250449c9a4e3964d59a657543e06440 /networking/udhcp/serverpacket.c | |
parent | 751750e3ee0195eef802a1554e97712285bf8fd7 (diff) | |
download | busybox-abf58d6ba5df9bbe04c4c7008cbbc8c7dc626392.zip busybox-abf58d6ba5df9bbe04c4c7008cbbc8c7dc626392.tar.gz |
Wade Berrier writes:
Hello,
Here's a patch for a first attempt at static leases for udhcpd.
Included in the tarball are 2 files (static_leases.c, static_leases.h)
and a patch against the latest cvs.
In the config file you can configure static leases with the following
format:
static_lease 00:60:08:11:CE:4E 192.168.0.54
static_lease 00:60:08:11:CE:3E 192.168.0.44
Comments/suggestions/improvements are welcome.
Wade
Diffstat (limited to 'networking/udhcp/serverpacket.c')
-rw-r--r-- | networking/udhcp/serverpacket.c | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/networking/udhcp/serverpacket.c b/networking/udhcp/serverpacket.c index bc9d822..75d55bd 100644 --- a/networking/udhcp/serverpacket.c +++ b/networking/udhcp/serverpacket.c @@ -29,6 +29,7 @@ #include "dhcpd.h" #include "options.h" #include "common.h" +#include "static_leases.h" /* send a packet to giaddr using the kernel ip stack */ static int send_packet_to_relay(struct dhcpMessage *payload) @@ -113,9 +114,15 @@ int sendOffer(struct dhcpMessage *oldpacket) struct option_set *curr; struct in_addr addr; + uint32_t static_lease_ip; + init_packet(&packet, oldpacket, DHCPOFFER); + static_lease_ip = getIpByMac(server_config.static_leases, oldpacket->chaddr); + /* ADDME: if static, short circuit */ + if(!static_lease_ip) + { /* the client is in our lease/offered table */ if ((lease = find_lease_by_chaddr(oldpacket->chaddr))) { if (!lease_expired(lease)) @@ -132,15 +139,17 @@ int sendOffer(struct dhcpMessage *oldpacket) ntohl(req_align) >= ntohl(server_config.start) && ntohl(req_align) <= ntohl(server_config.end) && - /* and its not already taken/offered */ /* ADDME: check that its not a static lease */ + !static_lease_ip && /* Check that its not a static lease */ + /* and is not already taken/offered */ ((!(lease = find_lease_by_yiaddr(req_align)) || /* or its taken, but expired */ /* ADDME: or maybe in here */ lease_expired(lease)))) { packet.yiaddr = req_align; /* FIXME: oh my, is there a host using this IP? */ - /* otherwise, find a free IP */ /*ADDME: is it a static lease? */ + /* otherwise, find a free IP */ } else { + /* Is it a static lease? (No, because find_address skips static lease) */ packet.yiaddr = find_address(0); /* try for an expired lease */ @@ -167,7 +176,14 @@ int sendOffer(struct dhcpMessage *oldpacket) /* Make sure we aren't just using the lease time from the previous offer */ if (lease_time_align < server_config.min_lease) lease_time_align = server_config.lease; + } /* ADDME: end of short circuit */ + else + { + /* It is a static lease... use it */ + packet.yiaddr = static_lease_ip; + } + add_simple_option(packet.options, DHCP_LEASE_TIME, htonl(lease_time_align)); curr = server_config.options; |