From 3082aaafa2e86ae4e06348345d0556c2d9cb0889 Mon Sep 17 00:00:00 2001
From: Josh Blum <josh@joshknows.com>
Date: Thu, 22 Dec 2011 14:10:48 -0800
Subject: uhd: manually calculate bcast addr, boost version buggy

---
 host/lib/transport/if_addrs.cpp | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

(limited to 'host/lib')

diff --git a/host/lib/transport/if_addrs.cpp b/host/lib/transport/if_addrs.cpp
index 54bb2626e..2ad0c8c53 100644
--- a/host/lib/transport/if_addrs.cpp
+++ b/host/lib/transport/if_addrs.cpp
@@ -51,7 +51,12 @@ std::vector<uhd::transport::if_addrs_t> uhd::transport::get_if_addrs(void){
 
             //correct the bcast address when its same as the gateway
             if (if_addr.inet == if_addr.bcast or sockaddr_to_ip_addr(iter->ifa_broadaddr) == boost::asio::ip::address_v4(0)){
-                if_addr.bcast = boost::asio::ip::address_v4::broadcast(sockaddr_to_ip_addr(iter->ifa_addr), sockaddr_to_ip_addr(iter->ifa_netmask)).to_string();
+                //manually calculate broadcast address
+                //https://svn.boost.org/trac/boost/ticket/5198
+                const boost::uint32_t addr = sockaddr_to_ip_addr(iter->ifa_addr).to_ulong();
+                const boost::uint32_t mask = sockaddr_to_ip_addr(iter->ifa_netmask).to_ulong();
+                const boost::uint32_t bcast = (addr & mask) | ~mask;
+                if_addr.bcast = boost::asio::ip::address_v4(bcast).to_string();
             }
 
             if_addrs.push_back(if_addr);
-- 
cgit v1.2.3