diff options
Diffstat (limited to 'networking/udhcp/leases.c')
-rw-r--r-- | networking/udhcp/leases.c | 58 |
1 files changed, 29 insertions, 29 deletions
diff --git a/networking/udhcp/leases.c b/networking/udhcp/leases.c index 4039f4dfb..68fba726e 100644 --- a/networking/udhcp/leases.c +++ b/networking/udhcp/leases.c | |||
@@ -17,12 +17,12 @@ static struct dyn_lease *oldest_expired_lease(void) | |||
17 | leasetime_t oldest_time = time(NULL); | 17 | leasetime_t oldest_time = time(NULL); |
18 | unsigned i; | 18 | unsigned i; |
19 | 19 | ||
20 | /* Unexpired leases have leases[i].expires >= current time | 20 | /* Unexpired leases have g_leases[i].expires >= current time |
21 | * and therefore can't ever match */ | 21 | * and therefore can't ever match */ |
22 | for (i = 0; i < server_config.max_leases; i++) { | 22 | for (i = 0; i < server_config.max_leases; i++) { |
23 | if (leases[i].expires < oldest_time) { | 23 | if (g_leases[i].expires < oldest_time) { |
24 | oldest_time = leases[i].expires; | 24 | oldest_time = g_leases[i].expires; |
25 | oldest_lease = &leases[i]; | 25 | oldest_lease = &g_leases[i]; |
26 | } | 26 | } |
27 | } | 27 | } |
28 | return oldest_lease; | 28 | return oldest_lease; |
@@ -38,10 +38,10 @@ static void clear_lease(const uint8_t *chaddr, uint32_t yiaddr) | |||
38 | continue; | 38 | continue; |
39 | 39 | ||
40 | for (i = 0; i < server_config.max_leases; i++) { | 40 | for (i = 0; i < server_config.max_leases; i++) { |
41 | if ((j != 16 && memcmp(leases[i].lease_mac, chaddr, 6) == 0) | 41 | if ((j != 16 && memcmp(g_leases[i].lease_mac, chaddr, 6) == 0) |
42 | || (yiaddr && leases[i].lease_nip == yiaddr) | 42 | || (yiaddr && g_leases[i].lease_nip == yiaddr) |
43 | ) { | 43 | ) { |
44 | memset(&leases[i], 0, sizeof(leases[i])); | 44 | memset(&g_leases[i], 0, sizeof(g_leases[i])); |
45 | } | 45 | } |
46 | } | 46 | } |
47 | } | 47 | } |
@@ -85,40 +85,40 @@ struct dyn_lease* FAST_FUNC add_lease( | |||
85 | 85 | ||
86 | 86 | ||
87 | /* True if a lease has expired */ | 87 | /* True if a lease has expired */ |
88 | int FAST_FUNC lease_expired(struct dyn_lease *lease) | 88 | int FAST_FUNC is_expired_lease(struct dyn_lease *lease) |
89 | { | 89 | { |
90 | return (lease->expires < (leasetime_t) time(NULL)); | 90 | return (lease->expires < (leasetime_t) time(NULL)); |
91 | } | 91 | } |
92 | 92 | ||
93 | 93 | ||
94 | /* Find the first lease that matches chaddr, NULL if no match */ | 94 | /* Find the first lease that matches MAC, NULL if no match */ |
95 | struct dyn_lease* FAST_FUNC find_lease_by_chaddr(const uint8_t *chaddr) | 95 | struct dyn_lease* FAST_FUNC find_lease_by_mac(const uint8_t *mac) |
96 | { | 96 | { |
97 | unsigned i; | 97 | unsigned i; |
98 | 98 | ||
99 | for (i = 0; i < server_config.max_leases; i++) | 99 | for (i = 0; i < server_config.max_leases; i++) |
100 | if (memcmp(leases[i].lease_mac, chaddr, 6) == 0) | 100 | if (memcmp(g_leases[i].lease_mac, mac, 6) == 0) |
101 | return &(leases[i]); | 101 | return &g_leases[i]; |
102 | 102 | ||
103 | return NULL; | 103 | return NULL; |
104 | } | 104 | } |
105 | 105 | ||
106 | 106 | ||
107 | /* Find the first lease that matches yiaddr, NULL is no match */ | 107 | /* Find the first lease that matches IP, NULL is no match */ |
108 | struct dyn_lease* FAST_FUNC find_lease_by_yiaddr(uint32_t yiaddr) | 108 | struct dyn_lease* FAST_FUNC find_lease_by_nip(uint32_t nip) |
109 | { | 109 | { |
110 | unsigned i; | 110 | unsigned i; |
111 | 111 | ||
112 | for (i = 0; i < server_config.max_leases; i++) | 112 | for (i = 0; i < server_config.max_leases; i++) |
113 | if (leases[i].lease_nip == yiaddr) | 113 | if (g_leases[i].lease_nip == nip) |
114 | return &leases[i]; | 114 | return &g_leases[i]; |
115 | 115 | ||
116 | return NULL; | 116 | return NULL; |
117 | } | 117 | } |
118 | 118 | ||
119 | 119 | ||
120 | /* Check if the IP is taken; if it is, add it to the lease table */ | 120 | /* Check if the IP is taken; if it is, add it to the lease table */ |
121 | static int nobody_responds_to_arp(uint32_t addr, const uint8_t *safe_mac) | 121 | static int nobody_responds_to_arp(uint32_t nip, const uint8_t *safe_mac) |
122 | { | 122 | { |
123 | /* 16 zero bytes */ | 123 | /* 16 zero bytes */ |
124 | static const uint8_t blank_chaddr[16] = { 0 }; | 124 | static const uint8_t blank_chaddr[16] = { 0 }; |
@@ -127,30 +127,30 @@ static int nobody_responds_to_arp(uint32_t addr, const uint8_t *safe_mac) | |||
127 | struct in_addr temp; | 127 | struct in_addr temp; |
128 | int r; | 128 | int r; |
129 | 129 | ||
130 | r = arpping(addr, safe_mac, | 130 | r = arpping(nip, safe_mac, |
131 | server_config.server_nip, | 131 | server_config.server_nip, |
132 | server_config.server_mac, | 132 | server_config.server_mac, |
133 | server_config.interface); | 133 | server_config.interface); |
134 | if (r) | 134 | if (r) |
135 | return r; | 135 | return r; |
136 | 136 | ||
137 | temp.s_addr = addr; | 137 | temp.s_addr = nip; |
138 | bb_info_msg("%s belongs to someone, reserving it for %u seconds", | 138 | bb_info_msg("%s belongs to someone, reserving it for %u seconds", |
139 | inet_ntoa(temp), (unsigned)server_config.conflict_time); | 139 | inet_ntoa(temp), (unsigned)server_config.conflict_time); |
140 | add_lease(blank_chaddr, addr, server_config.conflict_time, NULL); | 140 | add_lease(blank_chaddr, nip, server_config.conflict_time, NULL); |
141 | return 0; | 141 | return 0; |
142 | } | 142 | } |
143 | 143 | ||
144 | 144 | ||
145 | /* Find a new usable (we think) address */ | 145 | /* Find a new usable (we think) address */ |
146 | uint32_t FAST_FUNC find_free_or_expired_address(const uint8_t *chaddr) | 146 | uint32_t FAST_FUNC find_free_or_expired_nip(const uint8_t *safe_mac) |
147 | { | 147 | { |
148 | uint32_t addr; | 148 | uint32_t addr; |
149 | struct dyn_lease *oldest_lease = NULL; | 149 | struct dyn_lease *oldest_lease = NULL; |
150 | 150 | ||
151 | addr = server_config.start_ip; /* addr is in host order here */ | 151 | addr = server_config.start_ip; /* addr is in host order here */ |
152 | for (; addr <= server_config.end_ip; addr++) { | 152 | for (; addr <= server_config.end_ip; addr++) { |
153 | uint32_t net_addr; | 153 | uint32_t nip; |
154 | struct dyn_lease *lease; | 154 | struct dyn_lease *lease; |
155 | 155 | ||
156 | /* ie, 192.168.55.0 */ | 156 | /* ie, 192.168.55.0 */ |
@@ -159,23 +159,23 @@ uint32_t FAST_FUNC find_free_or_expired_address(const uint8_t *chaddr) | |||
159 | /* ie, 192.168.55.255 */ | 159 | /* ie, 192.168.55.255 */ |
160 | if ((addr & 0xff) == 0xff) | 160 | if ((addr & 0xff) == 0xff) |
161 | continue; | 161 | continue; |
162 | net_addr = htonl(addr); | 162 | nip = htonl(addr); |
163 | /* is this a static lease addr? */ | 163 | /* is this a static lease addr? */ |
164 | if (is_nip_reserved(server_config.static_leases, net_addr)) | 164 | if (is_nip_reserved(server_config.static_leases, nip)) |
165 | continue; | 165 | continue; |
166 | 166 | ||
167 | lease = find_lease_by_yiaddr(net_addr); | 167 | lease = find_lease_by_nip(nip); |
168 | if (!lease) { | 168 | if (!lease) { |
169 | if (nobody_responds_to_arp(net_addr, chaddr)) | 169 | if (nobody_responds_to_arp(nip, safe_mac)) |
170 | return net_addr; | 170 | return nip; |
171 | } else { | 171 | } else { |
172 | if (!oldest_lease || lease->expires < oldest_lease->expires) | 172 | if (!oldest_lease || lease->expires < oldest_lease->expires) |
173 | oldest_lease = lease; | 173 | oldest_lease = lease; |
174 | } | 174 | } |
175 | } | 175 | } |
176 | 176 | ||
177 | if (oldest_lease && lease_expired(oldest_lease) | 177 | if (oldest_lease && is_expired_lease(oldest_lease) |
178 | && nobody_responds_to_arp(oldest_lease->lease_nip, chaddr) | 178 | && nobody_responds_to_arp(oldest_lease->lease_nip, safe_mac) |
179 | ) { | 179 | ) { |
180 | return oldest_lease->lease_nip; | 180 | return oldest_lease->lease_nip; |
181 | } | 181 | } |