Prefer the 'server identifier' attribute address to send DHCP requests to
This commit is contained in:
@@ -463,8 +463,6 @@ static void handle_offer(private_dhcp_socket_t *this, dhcp_t *dhcp, int optlen)
|
|||||||
|
|
||||||
offer = host_create_from_chunk(AF_INET,
|
offer = host_create_from_chunk(AF_INET,
|
||||||
chunk_from_thing(dhcp->your_address), 0);
|
chunk_from_thing(dhcp->your_address), 0);
|
||||||
server = host_create_from_chunk(AF_INET,
|
|
||||||
chunk_from_thing(dhcp->server_address), DHCP_SERVER_PORT);
|
|
||||||
|
|
||||||
this->mutex->lock(this->mutex);
|
this->mutex->lock(this->mutex);
|
||||||
enumerator = this->discover->create_enumerator(this->discover);
|
enumerator = this->discover->create_enumerator(this->discover);
|
||||||
@@ -472,11 +470,8 @@ static void handle_offer(private_dhcp_socket_t *this, dhcp_t *dhcp, int optlen)
|
|||||||
{
|
{
|
||||||
if (transaction->get_id(transaction) == dhcp->transaction_id)
|
if (transaction->get_id(transaction) == dhcp->transaction_id)
|
||||||
{
|
{
|
||||||
DBG1(DBG_CFG, "received DHCP OFFER %H from %H", offer, server);
|
|
||||||
this->discover->remove_at(this->discover, enumerator);
|
this->discover->remove_at(this->discover, enumerator);
|
||||||
this->request->insert_last(this->request, transaction);
|
this->request->insert_last(this->request, transaction);
|
||||||
transaction->set_address(transaction, offer->clone(offer));
|
|
||||||
transaction->set_server(transaction, server->clone(server));
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -505,9 +500,22 @@ static void handle_offer(private_dhcp_socket_t *this, dhcp_t *dhcp, int optlen)
|
|||||||
chunk_create((char*)&option->data[pos], 4));
|
chunk_create((char*)&option->data[pos], 4));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (option->type == DHCP_SERVER_ID && option->len == 4)
|
||||||
|
{
|
||||||
|
server = host_create_from_chunk(AF_INET,
|
||||||
|
chunk_create(option->data, 4), DHCP_SERVER_PORT);
|
||||||
|
}
|
||||||
optlen -= optsize;
|
optlen -= optsize;
|
||||||
optpos += optsize;
|
optpos += optsize;
|
||||||
}
|
}
|
||||||
|
if (!server)
|
||||||
|
{
|
||||||
|
server = host_create_from_chunk(AF_INET,
|
||||||
|
chunk_from_thing(dhcp->server_address), DHCP_SERVER_PORT);
|
||||||
|
}
|
||||||
|
DBG1(DBG_CFG, "received DHCP OFFER %H from %H", offer, server);
|
||||||
|
transaction->set_address(transaction, offer->clone(offer));
|
||||||
|
transaction->set_server(transaction, server->clone(server));
|
||||||
}
|
}
|
||||||
this->mutex->unlock(this->mutex);
|
this->mutex->unlock(this->mutex);
|
||||||
this->condvar->broadcast(this->condvar);
|
this->condvar->broadcast(this->condvar);
|
||||||
|
|||||||
Reference in New Issue
Block a user