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