1
0
mirror of https://github.com/solemnwarning/ipxwrapper synced 2024-12-30 16:45:37 +01:00

Implemented ipx_interface_by_subnet function.

This commit is contained in:
Daniel Collins 2014-01-05 18:53:59 +00:00
parent 6c2a93e542
commit 1f733315d6
2 changed files with 32 additions and 0 deletions

View File

@ -533,6 +533,37 @@ ipx_interface_t *ipx_interface_by_addr(addr32_t net, addr48_t node)
return iface;
}
/* Search for an IPX interface by associated IP subnet.
* Returns NULL if no interfaces match or on malloc failure.
*/
ipx_interface_t *ipx_interface_by_subnet(uint32_t ipaddr)
{
EnterCriticalSection(&interface_cache_cs);
renew_interface_cache();
ipx_interface_t *iface;
DL_FOREACH(interface_cache, iface)
{
ipx_interface_ip_t *ip;
DL_FOREACH(iface->ipaddr, ip)
{
if((ip->ipaddr & ip->netmask) == (ipaddr & ip->netmask))
{
iface = copy_ipx_interface(iface);
goto DONE;
}
}
}
DONE:
LeaveCriticalSection(&interface_cache_cs);
return iface;
}
/* Search for an IPX interface by index.
* Returns NULL if the interface doesn't exist or malloc failure.
*/

View File

@ -67,6 +67,7 @@ void ipx_interfaces_cleanup(void);
ipx_interface_t *get_ipx_interfaces(void);
ipx_interface_t *ipx_interface_by_addr(addr32_t net, addr48_t node);
ipx_interface_t *ipx_interface_by_subnet(uint32_t ipaddr);
ipx_interface_t *ipx_interface_by_index(int index);
int ipx_interface_count(void);