b334a5888ad486e8050e29dde58ae190dccab868
[external/busybox.git] / util-linux / networking / udhcp / static_leases.c
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 tarball for details.
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 */
15 void 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 */
34 uint32_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 */
46 int 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 */
60 void 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