1/* vi: set sw=4 ts=4: */ 2/* 3 * Storing and retrieving data for static leases 4 * 5 * Wade Berrier <wberrier@myrealbox.com> September 2004 6 * 7 * Licensed under GPLv2, see file LICENSE in this source tree. 8 */ 9#include "common.h" 10#include "dhcpd.h" 11 12/* Takes the address of the pointer to the static_leases linked list, 13 * address to a 6 byte mac address, 14 * 4 byte IP address */ 15void FAST_FUNC add_static_lease(struct static_lease **st_lease_pp, 16 uint8_t *mac, 17 uint32_t nip) 18{ 19 struct static_lease *st_lease; 20 21 /* Find the tail of the list */ 22 while ((st_lease = *st_lease_pp) != NULL) { 23 st_lease_pp = &st_lease->next; 24 } 25 26 /* Add new node */ 27 *st_lease_pp = st_lease = xzalloc(sizeof(*st_lease)); 28 memcpy(st_lease->mac, mac, 6); 29 st_lease->nip = nip; 30 /*st_lease->next = NULL;*/ 31} 32 33/* Find static lease IP by mac */ 34uint32_t FAST_FUNC get_static_nip_by_mac(struct static_lease *st_lease, void *mac) 35{ 36 while (st_lease) { 37 if (memcmp(st_lease->mac, mac, 6) == 0) 38 return st_lease->nip; 39 st_lease = st_lease->next; 40 } 41 42 return 0; 43} 44 45/* Check to see if an IP is reserved as a static IP */ 46int FAST_FUNC is_nip_reserved(struct static_lease *st_lease, uint32_t nip) 47{ 48 while (st_lease) { 49 if (st_lease->nip == nip) 50 return 1; 51 st_lease = st_lease->next; 52 } 53 54 return 0; 55} 56 57#if defined CONFIG_UDHCP_DEBUG && CONFIG_UDHCP_DEBUG >= 2 58/* Print out static leases just to check what's going on */ 59/* Takes the address of the pointer to the static_leases linked list */ 60void FAST_FUNC log_static_leases(struct static_lease **st_lease_pp) 61{ 62 struct static_lease *cur; 63 64 if (dhcp_verbose < 2) 65 return; 66 67 cur = *st_lease_pp; 68 while (cur) { 69 bb_info_msg("static lease: mac:%02x:%02x:%02x:%02x:%02x:%02x nip:%x", 70 cur->mac[0], cur->mac[1], cur->mac[2], 71 cur->mac[3], cur->mac[4], cur->mac[5], 72 cur->nip 73 ); 74 cur = cur->next; 75 } 76} 77#endif 78