From 0416e3dde17ea9295635c52183b30fe3d7172333 Mon Sep 17 00:00:00 2001 From: Denis Vlasenko Date: Thu, 1 Jan 2009 17:52:09 +0000 Subject: udhcpd: disable opton to have absolute lease times in lease file (that does not work with dumpleases) dumpleases: fix -a option. networking/udhcp/*: code shrink, more compact static leases struture, better comments, etc function old new delta find_free_or_expired_address - 147 +147 nobody_responds_to_arp - 84 +84 read_opt 781 830 +49 dumpleases_main 435 447 +12 send_ACK 229 232 +3 read_staticlease 90 93 +3 addStaticLease 60 61 +1 getIpByMac 46 43 -3 reservedIp 31 20 -11 keywords 304 288 -16 send_offer 428 403 -25 write_leases 225 193 -32 read_leases 184 143 -41 read_yn 64 - -64 find_address 191 - -191 ------------------------------------------------------------------------------ (add/remove: 2/2 grow/shrink: 5/6 up/down: 299/-383) Total: -84 bytes --- networking/udhcp/dhcpd.h | 36 ++++++++++++++++++++++++------------ 1 file changed, 24 insertions(+), 12 deletions(-) (limited to 'networking/udhcp/dhcpd.h') diff --git a/networking/udhcp/dhcpd.h b/networking/udhcp/dhcpd.h index 2d9752845..02e392aaf 100644 --- a/networking/udhcp/dhcpd.h +++ b/networking/udhcp/dhcpd.h @@ -26,8 +26,8 @@ struct option_set { struct static_lease { struct static_lease *next; - uint8_t *mac; - uint32_t *ip; + uint32_t ip; + uint8_t mac[6]; }; struct server_config_t { @@ -42,8 +42,11 @@ struct server_config_t { char *interface; /* The name of the interface to use */ int ifindex; /* Index number of the interface to use */ uint8_t arp[6]; /* Our arp address */ - char remaining; /* should the lease file be interpreted as lease time remaining, or - * as the time the lease expires */ +// disabled: dumpleases has no way of knowing this value, +// and will break if it's off. Now it's on always. +// char remaining; /* Should the lease time in lease file +// * be written as lease time remaining, or +// * as the absolute time the lease expires */ uint32_t lease; /* lease time in seconds (host order) */ uint32_t max_leases; /* maximum number of leases (including reserved address) */ uint32_t auto_time; /* how long should udhcpd wait before writing a config file. @@ -52,11 +55,11 @@ struct server_config_t { * decline message */ uint32_t conflict_time; /* how long an arp conflict offender is leased for */ uint32_t offer_time; /* how long an offered address is reserved */ - uint32_t min_lease; /* minimum lease a client can request */ + uint32_t min_lease; /* minimum lease time a client can request */ + uint32_t siaddr; /* next server bootp option */ char *lease_file; char *pidfile; char *notify_file; /* What to run whenever leases are written */ - uint32_t siaddr; /* next server bootp option */ char *sname; /* bootp server name */ char *boot_file; /* bootp boot file option */ struct static_lease *static_leases; /* List of ip/mac pairs to assign static leases */ @@ -76,28 +79,37 @@ extern struct dhcpOfferedAddr *leases; /*** leases.h ***/ +typedef uint32_t leasetime_t; +typedef int32_t signed_leasetime_t; + struct dhcpOfferedAddr { uint8_t chaddr[16]; - uint32_t yiaddr; /* network order */ - uint32_t expires; /* host order */ + /* In network order */ + uint32_t yiaddr; + /* Unix time when lease expires, regardless of value of + * server_config.remaining. Kept in memory in host order. + * When written to file, converted to network order + * and optionally adjusted (current time subtracted) + * if server_config.remaining = 1 */ + leasetime_t expires; }; -struct dhcpOfferedAddr *add_lease(const uint8_t *chaddr, uint32_t yiaddr, unsigned long lease) FAST_FUNC; +struct dhcpOfferedAddr *add_lease(const uint8_t *chaddr, uint32_t yiaddr, leasetime_t leasetime) FAST_FUNC; int lease_expired(struct dhcpOfferedAddr *lease) FAST_FUNC; struct dhcpOfferedAddr *find_lease_by_chaddr(const uint8_t *chaddr) FAST_FUNC; struct dhcpOfferedAddr *find_lease_by_yiaddr(uint32_t yiaddr) FAST_FUNC; -uint32_t find_address(int check_expired) FAST_FUNC; +uint32_t find_free_or_expired_address(void) FAST_FUNC; /*** static_leases.h ***/ /* Config file will pass static lease info to this function which will add it * to a data structure that can be searched later */ -int addStaticLease(struct static_lease **lease_struct, uint8_t *mac, uint32_t *ip) FAST_FUNC; +void addStaticLease(struct static_lease **lease_struct, uint8_t *mac, uint32_t ip) FAST_FUNC; /* Check to see if a mac has an associated static lease */ uint32_t getIpByMac(struct static_lease *lease_struct, void *arg) FAST_FUNC; /* Check to see if an ip is reserved as a static ip */ -uint32_t reservedIp(struct static_lease *lease_struct, uint32_t ip) FAST_FUNC; +int reservedIp(struct static_lease *lease_struct, uint32_t ip) FAST_FUNC; /* Print out static leases just to check what's going on (debug code) */ void printStaticLeases(struct static_lease **lease_struct) FAST_FUNC; -- cgit v1.2.3