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