"Robert P. J. Day" | 63fc1a9 | 2006-07-02 19:47:05 +0000 | [diff] [blame] | 1 | /* vi: set sw=4 ts=4: */ |
Mike Frysinger | 7031f62 | 2006-05-08 03:20:50 +0000 | [diff] [blame] | 2 | /* |
Denys Vlasenko | 385b456 | 2010-03-26 10:09:34 +0100 | [diff] [blame] | 3 | * Storing and retrieving data for static leases |
Mike Frysinger | 7031f62 | 2006-05-08 03:20:50 +0000 | [diff] [blame] | 4 | * |
| 5 | * Wade Berrier <wberrier@myrealbox.com> September 2004 |
| 6 | * |
Denys Vlasenko | 0ef64bd | 2010-08-16 20:14:46 +0200 | [diff] [blame] | 7 | * Licensed under GPLv2, see file LICENSE in this source tree. |
Mike Frysinger | 7031f62 | 2006-05-08 03:20:50 +0000 | [diff] [blame] | 8 | */ |
Denis Vlasenko | 5a3395b | 2006-11-18 19:51:32 +0000 | [diff] [blame] | 9 | #include "common.h" |
Mike Frysinger | 7031f62 | 2006-05-08 03:20:50 +0000 | [diff] [blame] | 10 | #include "dhcpd.h" |
| 11 | |
| 12 | /* Takes the address of the pointer to the static_leases linked list, |
Denys Vlasenko | cab3a01 | 2009-06-16 12:03:12 +0200 | [diff] [blame] | 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) |
Mike Frysinger | 7031f62 | 2006-05-08 03:20:50 +0000 | [diff] [blame] | 18 | { |
Denys Vlasenko | cab3a01 | 2009-06-16 12:03:12 +0200 | [diff] [blame] | 19 | struct static_lease *st_lease; |
Mike Frysinger | 7031f62 | 2006-05-08 03:20:50 +0000 | [diff] [blame] | 20 | |
Denys Vlasenko | cab3a01 | 2009-06-16 12:03:12 +0200 | [diff] [blame] | 21 | /* Find the tail of the list */ |
| 22 | while ((st_lease = *st_lease_pp) != NULL) { |
| 23 | st_lease_pp = &st_lease->next; |
Mike Frysinger | 7031f62 | 2006-05-08 03:20:50 +0000 | [diff] [blame] | 24 | } |
Denys Vlasenko | cab3a01 | 2009-06-16 12:03:12 +0200 | [diff] [blame] | 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;*/ |
Mike Frysinger | 7031f62 | 2006-05-08 03:20:50 +0000 | [diff] [blame] | 31 | } |
| 32 | |
Denys Vlasenko | cab3a01 | 2009-06-16 12:03:12 +0200 | [diff] [blame] | 33 | /* Find static lease IP by mac */ |
| 34 | uint32_t FAST_FUNC get_static_nip_by_mac(struct static_lease *st_lease, void *mac) |
Mike Frysinger | 7031f62 | 2006-05-08 03:20:50 +0000 | [diff] [blame] | 35 | { |
Denys Vlasenko | cab3a01 | 2009-06-16 12:03:12 +0200 | [diff] [blame] | 36 | while (st_lease) { |
| 37 | if (memcmp(st_lease->mac, mac, 6) == 0) |
| 38 | return st_lease->nip; |
| 39 | st_lease = st_lease->next; |
Mike Frysinger | 7031f62 | 2006-05-08 03:20:50 +0000 | [diff] [blame] | 40 | } |
| 41 | |
Denis Vlasenko | 0416e3d | 2009-01-01 17:52:09 +0000 | [diff] [blame] | 42 | return 0; |
Mike Frysinger | 7031f62 | 2006-05-08 03:20:50 +0000 | [diff] [blame] | 43 | } |
| 44 | |
Denys Vlasenko | cab3a01 | 2009-06-16 12:03:12 +0200 | [diff] [blame] | 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) |
Mike Frysinger | 7031f62 | 2006-05-08 03:20:50 +0000 | [diff] [blame] | 47 | { |
Denys Vlasenko | cab3a01 | 2009-06-16 12:03:12 +0200 | [diff] [blame] | 48 | while (st_lease) { |
| 49 | if (st_lease->nip == nip) |
Denis Vlasenko | 0416e3d | 2009-01-01 17:52:09 +0000 | [diff] [blame] | 50 | return 1; |
Denys Vlasenko | cab3a01 | 2009-06-16 12:03:12 +0200 | [diff] [blame] | 51 | st_lease = st_lease->next; |
Mike Frysinger | 7031f62 | 2006-05-08 03:20:50 +0000 | [diff] [blame] | 52 | } |
| 53 | |
Denis Vlasenko | 0416e3d | 2009-01-01 17:52:09 +0000 | [diff] [blame] | 54 | return 0; |
Mike Frysinger | 7031f62 | 2006-05-08 03:20:50 +0000 | [diff] [blame] | 55 | } |
| 56 | |
Denys Vlasenko | 799d00e | 2009-06-17 13:44:04 +0200 | [diff] [blame] | 57 | #if defined CONFIG_UDHCP_DEBUG && CONFIG_UDHCP_DEBUG >= 2 |
Mike Frysinger | 7031f62 | 2006-05-08 03:20:50 +0000 | [diff] [blame] | 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 */ |
Denys Vlasenko | 799d00e | 2009-06-17 13:44:04 +0200 | [diff] [blame] | 60 | void FAST_FUNC log_static_leases(struct static_lease **st_lease_pp) |
Mike Frysinger | 7031f62 | 2006-05-08 03:20:50 +0000 | [diff] [blame] | 61 | { |
Denys Vlasenko | 799d00e | 2009-06-17 13:44:04 +0200 | [diff] [blame] | 62 | struct static_lease *cur; |
Mike Frysinger | 7031f62 | 2006-05-08 03:20:50 +0000 | [diff] [blame] | 63 | |
Denys Vlasenko | 799d00e | 2009-06-17 13:44:04 +0200 | [diff] [blame] | 64 | if (dhcp_verbose < 2) |
| 65 | return; |
| 66 | |
| 67 | cur = *st_lease_pp; |
Denis Vlasenko | 5a3395b | 2006-11-18 19:51:32 +0000 | [diff] [blame] | 68 | while (cur) { |
Denys Vlasenko | 799d00e | 2009-06-17 13:44:04 +0200 | [diff] [blame] | 69 | bb_info_msg("static lease: mac:%02x:%02x:%02x:%02x:%02x:%02x nip:%x", |
Denis Vlasenko | 0416e3d | 2009-01-01 17:52:09 +0000 | [diff] [blame] | 70 | cur->mac[0], cur->mac[1], cur->mac[2], |
Denys Vlasenko | 799d00e | 2009-06-17 13:44:04 +0200 | [diff] [blame] | 71 | cur->mac[3], cur->mac[4], cur->mac[5], |
| 72 | cur->nip |
Denis Vlasenko | 0416e3d | 2009-01-01 17:52:09 +0000 | [diff] [blame] | 73 | ); |
Mike Frysinger | 7031f62 | 2006-05-08 03:20:50 +0000 | [diff] [blame] | 74 | cur = cur->next; |
| 75 | } |
Mike Frysinger | 7031f62 | 2006-05-08 03:20:50 +0000 | [diff] [blame] | 76 | } |
| 77 | #endif |