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

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