* Fixed a bug in deciding whether or not an IP level broadcast should be

accepted. This should have been the reason for Duggan's problem with DHCP
  as part of bug #6454.
* Stippi's router seems to answer DHCP requests with broadcasts to the future
  broadcast IP address. Luckily, it's also a link layer broadcast, so we let
  the upper protocols decide what to do with it, depending on that; this could
  also be done depending on the existence of any unconfigured networks.
* This should fix Stippi's DHCP problems, and therefore bug #6454 - in any
  case, this will be the last try before my vacation :-)


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38450 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Axel Dörfler
2010-08-30 14:58:08 +00:00
parent 6e30c4b8af
commit f097f90c70
@@ -1604,7 +1604,7 @@ ipv4_receive_data(net_buffer* buffer)
// Find first interface with a matching family // Find first interface with a matching family
if (!sDatalinkModule->is_local_link_address(sDomain, true, if (!sDatalinkModule->is_local_link_address(sDomain, true,
buffer->destination, &buffer->interface_address)) buffer->destination, &buffer->interface_address))
notForUs = wasMulticast; notForUs = !wasMulticast;
} else if (IN_MULTICAST(ntohl(header.destination))) { } else if (IN_MULTICAST(ntohl(header.destination))) {
buffer->flags |= MSG_MCAST; buffer->flags |= MSG_MCAST;
} else { } else {
@@ -1615,7 +1615,12 @@ ipv4_receive_data(net_buffer* buffer)
&buffer->interface_address, &matchedAddressType) &buffer->interface_address, &matchedAddressType)
&& !sDatalinkModule->is_local_link_address(sDomain, true, && !sDatalinkModule->is_local_link_address(sDomain, true,
buffer->destination, &buffer->interface_address)) { buffer->destination, &buffer->interface_address)) {
notForUs = true; // if the buffer was a link layer multicast, regard it as a
// broadcast, and let the upper levels decide what to do with it
if (wasMulticast)
buffer->flags |= MSG_BCAST;
else
notForUs = true;
} else { } else {
// copy over special address types (MSG_BCAST or MSG_MCAST): // copy over special address types (MSG_BCAST or MSG_MCAST):
buffer->flags |= matchedAddressType; buffer->flags |= matchedAddressType;