first_address.addr = dhcps_poll.start_ip.addr;
client_address.addr = client_address_plus.addr;
renew = false;
-
- for (pback_node = plist; pback_node != NULL;pback_node = pback_node->pnext) {
- pdhcps_pool = pback_node->pnode;
- if (memcmp(pdhcps_pool->mac, m->chaddr, sizeof(pdhcps_pool->mac)) == 0){
- if (memcmp(&pdhcps_pool->ip.addr, m->ciaddr, sizeof(pdhcps_pool->ip.addr)) == 0) {
- renew = true;
- }
- client_address.addr = pdhcps_pool->ip.addr;
- pdhcps_pool->lease_timer = dhcps_lease_time;
- pnode = pback_node;
- goto POOL_CHECK;
- } else if (pdhcps_pool->ip.addr == client_address_plus.addr){
- addr_tmp.addr = htonl(client_address_plus.addr);
- addr_tmp.addr++;
- client_address_plus.addr = htonl(addr_tmp.addr);
- client_address.addr = client_address_plus.addr;
- }
-
- if(flag == false) { // search the fisrt unused ip
- if(first_address.addr < pdhcps_pool->ip.addr) {
- flag = true;
- } else {
- addr_tmp.addr = htonl(first_address.addr);
- addr_tmp.addr++;
- first_address.addr = htonl(addr_tmp.addr);
- }
- }
+
+ if (plist != NULL){
+ for (pback_node = plist; pback_node != NULL;pback_node = pback_node->pnext) {
+ pdhcps_pool = pback_node->pnode;
+ if (memcmp(pdhcps_pool->mac, m->chaddr, sizeof(pdhcps_pool->mac)) == 0){
+ if (memcmp(&pdhcps_pool->ip.addr, m->ciaddr, sizeof(pdhcps_pool->ip.addr)) == 0) {
+ renew = true;
+ }
+ client_address.addr = pdhcps_pool->ip.addr;
+ pdhcps_pool->lease_timer = dhcps_lease_time;
+ pnode = pback_node;
+ goto POOL_CHECK;
+ } else if (pdhcps_pool->ip.addr == client_address_plus.addr){
+ addr_tmp.addr = htonl(client_address_plus.addr);
+ addr_tmp.addr++;
+ client_address_plus.addr = htonl(addr_tmp.addr);
+ client_address.addr = client_address_plus.addr;
+ }
+
+ if (flag == false) { // search the fisrt unused ip
+ if (first_address.addr < pdhcps_pool->ip.addr) {
+ flag = true;
+ } else {
+ addr_tmp.addr = htonl(first_address.addr);
+ addr_tmp.addr++;
+ first_address.addr = htonl(addr_tmp.addr);
+ }
+ }
+ }
+ } else {
+ client_address.addr = dhcps_poll.start_ip.addr;
}
+
if (client_address_plus.addr > dhcps_poll.end_ip.addr) {
client_address.addr = first_address.addr;
}