Contents of /trunk/mkinitrd-magellan/busybox/networking/udhcp/static_leases.c
Parent Directory | Revision Log
Revision 532 -
(show annotations)
(download)
Sat Sep 1 22:45:15 2007 UTC (16 years, 8 months ago) by niro
File MIME type: text/plain
File size: 2307 byte(s)
Sat Sep 1 22:45:15 2007 UTC (16 years, 8 months ago) by niro
File MIME type: text/plain
File size: 2307 byte(s)
-import if magellan mkinitrd; it is a fork of redhats mkinitrd-5.0.8 with all magellan patches and features; deprecates magellan-src/mkinitrd
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 | */ |
9 | |
10 | #include "common.h" |
11 | #include "dhcpd.h" |
12 | |
13 | |
14 | /* Takes the address of the pointer to the static_leases linked list, |
15 | * Address to a 6 byte mac address |
16 | * Address to a 4 byte ip address */ |
17 | int addStaticLease(struct static_lease **lease_struct, uint8_t *mac, uint32_t *ip) |
18 | { |
19 | struct static_lease *cur; |
20 | struct static_lease *new_static_lease; |
21 | |
22 | /* Build new node */ |
23 | new_static_lease = xmalloc(sizeof(struct static_lease)); |
24 | new_static_lease->mac = mac; |
25 | new_static_lease->ip = ip; |
26 | new_static_lease->next = NULL; |
27 | |
28 | /* If it's the first node to be added... */ |
29 | if (*lease_struct == NULL) { |
30 | *lease_struct = new_static_lease; |
31 | } else { |
32 | cur = *lease_struct; |
33 | while (cur->next) { |
34 | cur = cur->next; |
35 | } |
36 | |
37 | cur->next = new_static_lease; |
38 | } |
39 | |
40 | return 1; |
41 | } |
42 | |
43 | /* Check to see if a mac has an associated static lease */ |
44 | uint32_t getIpByMac(struct static_lease *lease_struct, void *arg) |
45 | { |
46 | uint32_t return_ip; |
47 | struct static_lease *cur = lease_struct; |
48 | uint8_t *mac = arg; |
49 | |
50 | return_ip = 0; |
51 | |
52 | while (cur) { |
53 | /* If the client has the correct mac */ |
54 | if (memcmp(cur->mac, mac, 6) == 0) { |
55 | return_ip = *(cur->ip); |
56 | } |
57 | |
58 | cur = cur->next; |
59 | } |
60 | |
61 | return return_ip; |
62 | } |
63 | |
64 | /* Check to see if an ip is reserved as a static ip */ |
65 | uint32_t reservedIp(struct static_lease *lease_struct, uint32_t ip) |
66 | { |
67 | struct static_lease *cur = lease_struct; |
68 | |
69 | uint32_t return_val = 0; |
70 | |
71 | while (cur) { |
72 | /* If the client has the correct ip */ |
73 | if (*cur->ip == ip) |
74 | return_val = 1; |
75 | |
76 | cur = cur->next; |
77 | } |
78 | |
79 | return return_val; |
80 | } |
81 | |
82 | #if ENABLE_FEATURE_UDHCP_DEBUG |
83 | /* Print out static leases just to check what's going on */ |
84 | /* Takes the address of the pointer to the static_leases linked list */ |
85 | void printStaticLeases(struct static_lease **arg) |
86 | { |
87 | /* Get a pointer to the linked list */ |
88 | struct static_lease *cur = *arg; |
89 | |
90 | while (cur) { |
91 | /* printf("PrintStaticLeases: Lease mac Address: %x\n", cur->mac); */ |
92 | printf("PrintStaticLeases: Lease mac Value: %x\n", *(cur->mac)); |
93 | /* printf("PrintStaticLeases: Lease ip Address: %x\n", cur->ip); */ |
94 | printf("PrintStaticLeases: Lease ip Value: %x\n", *(cur->ip)); |
95 | |
96 | cur = cur->next; |
97 | } |
98 | } |
99 | #endif |