From 372087dde5986d518f2a74d8c81f3910c4141462 Mon Sep 17 00:00:00 2001 From: Oliver Tappe Date: Sun, 12 Oct 2008 17:00:58 +0000 Subject: [PATCH] * fixed sending of IP-level broadcasts git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27997 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/add-ons/kernel/network/protocols/ipv4/ipv4.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/add-ons/kernel/network/protocols/ipv4/ipv4.cpp b/src/add-ons/kernel/network/protocols/ipv4/ipv4.cpp index f50c8634e1..79af4ea1b8 100644 --- a/src/add-ons/kernel/network/protocols/ipv4/ipv4.cpp +++ b/src/add-ons/kernel/network/protocols/ipv4/ipv4.cpp @@ -12,6 +12,7 @@ #include #include +#include #include #include #include @@ -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;