Skip to content

Commit

Permalink
[NetworkLinux] - OSX/FreeBSD fixes
Browse files Browse the repository at this point in the history
- fix FreeBSD/OSX MacAddr fetch
- fix NetworkInterfaceLinux::IsConnected()

(cherry picked from commit f443f3d1b2467666d968dea5e9bd75c8bc54add2)
  • Loading branch information
mk01 committed Dec 28, 2015
1 parent dab5c74 commit d7b0c81
Showing 1 changed file with 20 additions and 2 deletions.
22 changes: 20 additions & 2 deletions xbmc/network/linux/NetworkLinux.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,9 @@ bool CNetworkInterfaceLinux::IsConnected()
if (IsRemoved() || m_interfaceFlags & IFF_LOOPBACK)
return false;

unsigned int needFlags = IFF_RUNNING | IFF_LOWER_UP;
// Don't add IFF_LOWER_UP - looks it is driver dependent on Linux
// and missing on running interfaces on OSX (Maverick tested)
unsigned int needFlags = IFF_RUNNING; //IFF_LOWER_UP
bool iRunning = (m_interfaceFlags & needFlags) == needFlags;

// return only interfaces which has ip address
Expand Down Expand Up @@ -415,6 +417,10 @@ bool CNetworkLinux::queryInterfaceList()
if (getifaddrs(&list) < 0)
return false;

#if !defined(TARGET_LINUX)
std::map<std::string,struct ifaddrs> t_hwaddrs;
#endif

DeleteRemoved();
InterfacesClear();

Expand All @@ -431,6 +437,15 @@ bool CNetworkLinux::queryInterfaceList()
struct ifaddrs *cur;
for(cur = list; cur != NULL; cur = cur->ifa_next)
{
std::string name = cur->ifa_name;
#if !defined(TARGET_LINUX)
if(cur->ifa_addr->sa_family == AF_LINK)
{
struct ifaddrs &t = *cur;
t_hwaddrs[name] = t;
}
#endif

if(!cur->ifa_addr ||
(cur->ifa_addr->sa_family != AF_INET &&
cur->ifa_addr->sa_family != AF_INET6))
Expand All @@ -442,7 +457,6 @@ bool CNetworkLinux::queryInterfaceList()
// Add the interface.
std::string addr = CNetwork::GetIpStr(cur->ifa_addr);
std::string mask = CNetwork::GetIpStr(cur->ifa_netmask);
std::string name = cur->ifa_name;

if(addr.empty() || mask.empty())
continue;
Expand All @@ -456,7 +470,11 @@ bool CNetworkLinux::queryInterfaceList()
}

char macAddrRaw[6] = {0};
#if !defined(TARGET_LINUX)
GetMacAddress(&t_hwaddrs[name], macAddrRaw);
#else
GetMacAddress(cur, macAddrRaw);
#endif

CNetworkInterfaceLinux *i = new CNetworkInterfaceLinux(this, cur->ifa_addr->sa_family == AF_INET6,
cur->ifa_flags, addr, mask, name, macAddrRaw);
Expand Down

0 comments on commit d7b0c81

Please sign in to comment.