* BNetworkAddress::SetAddress(in_addr_t) expect a network order value:

revert r40492.
* For semantic sake, use ntoh*() macros to convert data coming from network,
not the hton*() variants, even if the end result is the same.
* Clean and add more details to DHCP syslog messages.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@40516 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Philippe Houdoin 2011-02-15 18:29:58 +00:00
parent e62879885e
commit 69b5cacbad

View File

@ -68,7 +68,7 @@ enum message_option {
OPTION_ADDRESS_LEASE_TIME = 51,
OPTION_OVERLOAD = 52,
OPTION_MESSAGE_TYPE = 53,
OPTION_SERVER_ADDRESS = 54,
OPTION_SERVER_IDENTIFIER = 54,
OPTION_REQUEST_PARAMETERS = 55,
OPTION_ERROR_MESSAGE = 56,
OPTION_MAX_MESSAGE_SIZE = 57,
@ -522,8 +522,10 @@ DHCPClient::_Negotiate(dhcp_state state)
while (state != ACKNOWLEDGED) {
char buffer[2048];
struct sockaddr_in from;
socklen_t fromLength = sizeof(from);
ssize_t bytesReceived = recvfrom(socket, buffer, sizeof(buffer),
0, NULL, NULL);
0, (struct sockaddr*)&from, &fromLength);
if (bytesReceived < 0 && errno == B_TIMED_OUT) {
// depending on the state, we'll just try again
if (!_TimeoutShift(socket, timeout, tries)) {
@ -551,8 +553,9 @@ DHCPClient::_Negotiate(dhcp_state state)
continue;
}
syslog(LOG_DEBUG, "DHCP received %s for %s\n",
dhcp_message::TypeToString(message->Type()), Device());
syslog(LOG_DEBUG, "Received %s from %s for %s\n",
dhcp_message::TypeToString(message->Type()),
_AddressToString(from.sin_addr.s_addr).String(), Device());
switch (message->Type()) {
case DHCP_NONE:
@ -569,6 +572,8 @@ DHCPClient::_Negotiate(dhcp_state state)
// collect interface options
fAssignedAddress = message->your_address;
syslog(LOG_INFO, " your_address: %s\n",
_AddressToString(fAssignedAddress).String());
fConfiguration.MakeEmpty();
fConfiguration.AddString("device", Device());
@ -688,18 +693,24 @@ DHCPClient::_ParseOptions(dhcp_message& message, BMessage& address,
// iterate through all options
switch (option) {
case OPTION_ROUTER_ADDRESS:
syslog(LOG_INFO, " gateway: %s\n",
_AddressToString(data).String());
address.AddString("gateway", _AddressToString(data));
break;
case OPTION_SUBNET_MASK:
syslog(LOG_INFO, " subnet: %s\n",
_AddressToString(data).String());
address.AddString("mask", _AddressToString(data));
break;
case OPTION_BROADCAST_ADDRESS:
syslog(LOG_INFO, " broadcast: %s\n",
_AddressToString(data).String());
address.AddString("broadcast", _AddressToString(data));
break;
case OPTION_DOMAIN_NAME_SERVER:
{
for (uint32 i = 0; i < size / 4; i++) {
syslog(LOG_INFO, "DHCP for %s got DNS: %s\n", Device(),
syslog(LOG_INFO, " nameserver[%d]: %s\n", i,
_AddressToString(&data[i * 4]).String());
resolverConfiguration.AddString("nameserver",
_AddressToString(&data[i * 4]).String());
@ -708,29 +719,30 @@ DHCPClient::_ParseOptions(dhcp_message& message, BMessage& address,
size / 4);
break;
}
case OPTION_SERVER_ADDRESS:
fServer.SetAddress(
(in_addr_t)B_BENDIAN_TO_HOST_INT32(*(uint32*)data));
case OPTION_SERVER_IDENTIFIER:
syslog(LOG_INFO, " server: %s\n",
_AddressToString(data).String());
fServer.SetAddress(*(in_addr_t*)data);
break;
case OPTION_ADDRESS_LEASE_TIME:
syslog(LOG_INFO, "lease time of %lu seconds\n",
htonl(*(uint32*)data));
fLeaseTime = htonl(*(uint32*)data) * 1000000LL;
syslog(LOG_INFO, " lease time: %lu seconds\n",
ntohl(*(uint32*)data));
fLeaseTime = ntohl(*(uint32*)data) * 1000000LL;
break;
case OPTION_RENEWAL_TIME:
syslog(LOG_INFO, "renewal time of %lu seconds\n",
htonl(*(uint32*)data));
fRenewalTime = htonl(*(uint32*)data) * 1000000LL;
syslog(LOG_INFO, " renewal time: %lu seconds\n",
ntohl(*(uint32*)data));
fRenewalTime = ntohl(*(uint32*)data) * 1000000LL;
break;
case OPTION_REBINDING_TIME:
syslog(LOG_INFO, "rebinding time of %lu seconds\n",
htonl(*(uint32*)data));
fRebindingTime = htonl(*(uint32*)data) * 1000000LL;
syslog(LOG_INFO, " rebinding time: %lu seconds\n",
ntohl(*(uint32*)data));
fRebindingTime = ntohl(*(uint32*)data) * 1000000LL;
break;
case OPTION_HOST_NAME:
syslog(LOG_INFO, "DHCP host name: \"%.*s\"\n", (int)size,
syslog(LOG_INFO, " host name: \"%.*s\"\n", (int)size,
(const char*)data);
break;
@ -740,7 +752,7 @@ DHCPClient::_ParseOptions(dhcp_message& message, BMessage& address,
strlcpy(domain, (const char*)data,
min_c(size + 1, sizeof(domain)));
syslog(LOG_INFO, "DHCP domain name: \"%s\"\n", domain);
syslog(LOG_INFO, " domain name: \"%s\"\n", domain);
resolverConfiguration.AddString("domain", domain);
break;
@ -750,12 +762,13 @@ DHCPClient::_ParseOptions(dhcp_message& message, BMessage& address,
break;
case OPTION_ERROR_MESSAGE:
syslog(LOG_INFO, "DHCP error message: \"%.*s\"\n", (int)size,
syslog(LOG_INFO, " error message: \"%.*s\"\n", (int)size,
(const char*)data);
break;
default:
syslog(LOG_INFO, "unknown option %lu\n", (uint32)option);
syslog(LOG_INFO, " UNKNOWN OPTION %lu (0x%x)\n",
(uint32)option, (uint32)option);
break;
}
}
@ -789,7 +802,7 @@ DHCPClient::_PrepareMessage(dhcp_message& message, dhcp_state state)
if (state == REQUESTING) {
const sockaddr_in& server = (sockaddr_in&)fServer.SockAddr();
next = message.PutOption(next, OPTION_SERVER_ADDRESS,
next = message.PutOption(next, OPTION_SERVER_IDENTIFIER,
(uint32)server.sin_addr.s_addr);
}
@ -802,7 +815,7 @@ DHCPClient::_PrepareMessage(dhcp_message& message, dhcp_state state)
case DHCP_RELEASE: {
const sockaddr_in& server = (sockaddr_in&)fServer.SockAddr();
next = message.PutOption(next, OPTION_SERVER_ADDRESS,
next = message.PutOption(next, OPTION_SERVER_IDENTIFIER,
(uint32)server.sin_addr.s_addr);
message.client_address = fAssignedAddress;
@ -840,7 +853,7 @@ DHCPClient::_TimeoutShift(int socket, time_t& timeout, uint32& tries)
if (++tries > 2)
return false;
}
syslog(LOG_DEBUG, "DHCP timeout shift for %s: %lu secs (try %lu)\n",
syslog(LOG_DEBUG, "Timeout shift for %s: %lu secs (try %lu)\n",
Device(), timeout, tries);
struct timeval value;
@ -872,8 +885,9 @@ status_t
DHCPClient::_SendMessage(int socket, dhcp_message& message,
const BNetworkAddress& address) const
{
syslog(LOG_DEBUG, "DHCP send message %s for %s\n",
dhcp_message::TypeToString(message.Type()), Device());
syslog(LOG_DEBUG, "Send %s to %s on %s\n",
dhcp_message::TypeToString(message.Type()),
address.ToString().String(), Device());
ssize_t bytesSent = sendto(socket, &message, message.Size(),
address.IsBroadcast() ? MSG_BCAST : 0, address, address.Length());