blob: b7f9e5c594d85188d81d0caa61c40c781b795ad5 [file] [log] [blame]
"Robert P. J. Day"63fc1a92006-07-02 19:47:05 +00001/* vi: set sw=4 ts=4: */
Mike Frysinger7031f622006-05-08 03:20:50 +00002/*
Denys Vlasenko385b4562010-03-26 10:09:34 +01003 * Storing and retrieving data for static leases
Mike Frysinger7031f622006-05-08 03:20:50 +00004 *
5 * Wade Berrier <wberrier@myrealbox.com> September 2004
6 *
Denys Vlasenko0ef64bd2010-08-16 20:14:46 +02007 * Licensed under GPLv2, see file LICENSE in this source tree.
Mike Frysinger7031f622006-05-08 03:20:50 +00008 */
Denis Vlasenko5a3395b2006-11-18 19:51:32 +00009#include "common.h"
Mike Frysinger7031f622006-05-08 03:20:50 +000010#include "dhcpd.h"
11
12/* Takes the address of the pointer to the static_leases linked list,
Denys Vlasenkocab3a012009-06-16 12:03:12 +020013 * address to a 6 byte mac address,
14 * 4 byte IP address */
15void FAST_FUNC add_static_lease(struct static_lease **st_lease_pp,
16 uint8_t *mac,
17 uint32_t nip)
Mike Frysinger7031f622006-05-08 03:20:50 +000018{
Denys Vlasenkocab3a012009-06-16 12:03:12 +020019 struct static_lease *st_lease;
Mike Frysinger7031f622006-05-08 03:20:50 +000020
Denys Vlasenkocab3a012009-06-16 12:03:12 +020021 /* Find the tail of the list */
22 while ((st_lease = *st_lease_pp) != NULL) {
23 st_lease_pp = &st_lease->next;
Mike Frysinger7031f622006-05-08 03:20:50 +000024 }
Denys Vlasenkocab3a012009-06-16 12:03:12 +020025
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 Frysinger7031f622006-05-08 03:20:50 +000031}
32
Denys Vlasenkocab3a012009-06-16 12:03:12 +020033/* Find static lease IP by mac */
34uint32_t FAST_FUNC get_static_nip_by_mac(struct static_lease *st_lease, void *mac)
Mike Frysinger7031f622006-05-08 03:20:50 +000035{
Denys Vlasenkocab3a012009-06-16 12:03:12 +020036 while (st_lease) {
37 if (memcmp(st_lease->mac, mac, 6) == 0)
38 return st_lease->nip;
39 st_lease = st_lease->next;
Mike Frysinger7031f622006-05-08 03:20:50 +000040 }
41
Denis Vlasenko0416e3d2009-01-01 17:52:09 +000042 return 0;
Mike Frysinger7031f622006-05-08 03:20:50 +000043}
44
Denys Vlasenkocab3a012009-06-16 12:03:12 +020045/* Check to see if an IP is reserved as a static IP */
46int FAST_FUNC is_nip_reserved(struct static_lease *st_lease, uint32_t nip)
Mike Frysinger7031f622006-05-08 03:20:50 +000047{
Denys Vlasenkocab3a012009-06-16 12:03:12 +020048 while (st_lease) {
49 if (st_lease->nip == nip)
Denis Vlasenko0416e3d2009-01-01 17:52:09 +000050 return 1;
Denys Vlasenkocab3a012009-06-16 12:03:12 +020051 st_lease = st_lease->next;
Mike Frysinger7031f622006-05-08 03:20:50 +000052 }
53
Denis Vlasenko0416e3d2009-01-01 17:52:09 +000054 return 0;
Mike Frysinger7031f622006-05-08 03:20:50 +000055}
56
Denys Vlasenko799d00e2009-06-17 13:44:04 +020057#if defined CONFIG_UDHCP_DEBUG && CONFIG_UDHCP_DEBUG >= 2
Mike Frysinger7031f622006-05-08 03:20:50 +000058/* 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 Vlasenko799d00e2009-06-17 13:44:04 +020060void FAST_FUNC log_static_leases(struct static_lease **st_lease_pp)
Mike Frysinger7031f622006-05-08 03:20:50 +000061{
Denys Vlasenko799d00e2009-06-17 13:44:04 +020062 struct static_lease *cur;
Mike Frysinger7031f622006-05-08 03:20:50 +000063
Denys Vlasenko799d00e2009-06-17 13:44:04 +020064 if (dhcp_verbose < 2)
65 return;
66
67 cur = *st_lease_pp;
Denis Vlasenko5a3395b2006-11-18 19:51:32 +000068 while (cur) {
Denys Vlasenko8f2e99c2016-03-30 18:41:23 +020069 bb_error_msg("static lease: mac:%02x:%02x:%02x:%02x:%02x:%02x nip:%x",
Denis Vlasenko0416e3d2009-01-01 17:52:09 +000070 cur->mac[0], cur->mac[1], cur->mac[2],
Denys Vlasenko799d00e2009-06-17 13:44:04 +020071 cur->mac[3], cur->mac[4], cur->mac[5],
72 cur->nip
Denis Vlasenko0416e3d2009-01-01 17:52:09 +000073 );
Mike Frysinger7031f622006-05-08 03:20:50 +000074 cur = cur->next;
75 }
Mike Frysinger7031f622006-05-08 03:20:50 +000076}
77#endif