blob: 1124d39de9e73932b64b7fbffbead2f1aa4a7047 [file] [log] [blame]
Eric Andersenabf58d62004-10-08 08:49:26 +00001/*
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 */
20int 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 */
53uint32_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 */
77uint32_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 */
99void 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