Version increased to 0.9.8cvs20050303-2.1maemo2.
[udhcp] / static_leases.c
1 /*
2  * static_leases.c -- Couple of functions to assist with storing and
3  * retrieving data for static leases
4  *
5  * Wade Berrier <wberrier@myrealbox.com> September 2004
6  *
7  */
8
9
10 #include <stdlib.h>
11 #include <stdio.h>
12 #include <string.h>
13
14 #include "static_leases.h"
15 #include "dhcpd.h"
16
17 /* Takes the address of the pointer to the static_leases linked list,
18  *   Address to a 6 byte mac address
19  *   Address to a 4 byte ip address */
20 int addStaticLease(struct static_lease **lease_struct, uint8_t *mac, uint32_t *ip)
21 {
22
23         struct static_lease *cur;
24         struct static_lease *new_static_lease;
25
26         /* Build new node */
27         new_static_lease = xmalloc(sizeof(struct static_lease));
28         new_static_lease->mac = mac;
29         new_static_lease->ip = ip;
30         new_static_lease->next = NULL;
31
32         /* If it's the first node to be added... */
33         if(*lease_struct == NULL)
34         {
35                 *lease_struct = new_static_lease;
36         }
37         else
38         {
39                 cur = *lease_struct;
40                 while(cur->next != NULL)
41                 {
42                         cur = cur->next;
43                 }
44
45                 cur->next = new_static_lease;
46         }
47
48         return 1;
49
50 }
51
52 /* Check to see if a mac has an associated static lease */
53 uint32_t getIpByMac(struct static_lease *lease_struct, void *arg)
54 {
55         uint32_t return_ip;
56         struct static_lease *cur = lease_struct;
57         uint8_t *mac = arg;
58
59         return_ip = 0;
60
61         while(cur != NULL)
62         {
63                 /* If the client has the correct mac  */
64                 if(memcmp(cur->mac, mac, 6) == 0)
65                 {
66                         return_ip = *(cur->ip);
67                 }
68
69                 cur = cur->next;
70         }
71
72         return return_ip;
73
74 }
75
76 /* Check to see if an ip is reserved as a static ip */
77 uint32_t reservedIp(struct static_lease *lease_struct, uint32_t ip)
78 {
79         struct static_lease *cur = lease_struct;
80
81         uint32_t return_val = 0;
82
83         while(cur != NULL)
84         {
85                 /* If the client has the correct ip  */
86                 if(*cur->ip == ip)
87                         return_val = 1;
88
89                 cur = cur->next;
90         }
91
92         return return_val;
93
94 }
95
96 #ifdef UDHCP_DEBUG
97 /* Print out static leases just to check what's going on */
98 /* Takes the address of the pointer to the static_leases linked list */
99 void printStaticLeases(struct static_lease **arg)
100 {
101         /* Get a pointer to the linked list */
102         struct static_lease *cur = *arg;
103
104         while(cur != NULL)
105         {
106                 /* printf("PrintStaticLeases: Lease mac Address: %x\n", cur->mac); */
107                 printf("PrintStaticLeases: Lease mac Value: %x\n", *(cur->mac));
108                 /* printf("PrintStaticLeases: Lease ip Address: %x\n", cur->ip); */
109                 printf("PrintStaticLeases: Lease ip Value: %x\n", *(cur->ip));
110
111                 cur = cur->next;
112         }
113
114
115 }
116 #endif
117
118
119