lwip: fix a mistake in parse_msg of dhcpserver.c

TW6872
This commit is contained in:
liuhan
2016-09-01 11:37:24 +08:00
committed by Wu Jian Gang
parent af3f7d3ebe
commit f5df40e2d1

View File

@@ -700,34 +700,39 @@ static s16_t parse_msg(struct dhcps_msg *m, u16_t len)
first_address.addr = dhcps_poll.start_ip.addr; first_address.addr = dhcps_poll.start_ip.addr;
client_address.addr = client_address_plus.addr; client_address.addr = client_address_plus.addr;
renew = false; renew = false;
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;
}
for (pback_node = plist; pback_node != NULL;pback_node = pback_node->pnext) { if (flag == false) { // search the fisrt unused ip
pdhcps_pool = pback_node->pnode; if (first_address.addr < pdhcps_pool->ip.addr) {
if (memcmp(pdhcps_pool->mac, m->chaddr, sizeof(pdhcps_pool->mac)) == 0){ flag = true;
if (memcmp(&pdhcps_pool->ip.addr, m->ciaddr, sizeof(pdhcps_pool->ip.addr)) == 0) { } else {
renew = true; addr_tmp.addr = htonl(first_address.addr);
} addr_tmp.addr++;
client_address.addr = pdhcps_pool->ip.addr; first_address.addr = htonl(addr_tmp.addr);
pdhcps_pool->lease_timer = dhcps_lease_time; }
pnode = pback_node; }
goto POOL_CHECK; }
} else if (pdhcps_pool->ip.addr == client_address_plus.addr){ } else {
addr_tmp.addr = htonl(client_address_plus.addr); client_address.addr = dhcps_poll.start_ip.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 (client_address_plus.addr > dhcps_poll.end_ip.addr) { if (client_address_plus.addr > dhcps_poll.end_ip.addr) {
client_address.addr = first_address.addr; client_address.addr = first_address.addr;
} }