* fixed sending of IP-level broadcasts

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27997 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Oliver Tappe 2008-10-12 17:00:58 +00:00
parent 60dc5f6109
commit 372087dde5
1 changed files with 6 additions and 2 deletions

View File

@ -12,6 +12,7 @@
#include <net_datalink.h>
#include <net_datalink_protocol.h>
#include <net_device.h>
#include <net_protocol.h>
#include <net_stack.h>
#include <NetBufferUtilities.h>
@ -1249,6 +1250,7 @@ ipv4_send_routed_data(net_protocol *_protocol, struct net_route *route,
sockaddr_in &source = *(sockaddr_in *)buffer->source;
sockaddr_in &destination = *(sockaddr_in *)buffer->destination;
sockaddr_in &broadcastAddress = *(sockaddr_in *)interface->destination;
bool headerIncluded = false, checksumNeeded = true;
if (protocol != NULL)
@ -1258,8 +1260,10 @@ ipv4_send_routed_data(net_protocol *_protocol, struct net_route *route,
if (destination.sin_addr.s_addr == INADDR_ANY)
return EDESTADDRREQ;
else if (destination.sin_addr.s_addr == INADDR_BROADCAST) {
// TODO check for local broadcast addresses as well?
else if ((interface->device->flags & IFF_BROADCAST) != 0
&& (destination.sin_addr.s_addr == INADDR_BROADCAST
|| destination.sin_addr.s_addr
== broadcastAddress.sin_addr.s_addr)) {
if (protocol && !(protocol->socket->options & SO_BROADCAST))
return B_BAD_VALUE;
buffer->flags |= MSG_BCAST;