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:
parent
6c2a93e542
commit
1f733315d6
@ -533,6 +533,37 @@ ipx_interface_t *ipx_interface_by_addr(addr32_t net, addr48_t node)
|
|||||||
return iface;
|
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.
|
/* Search for an IPX interface by index.
|
||||||
* Returns NULL if the interface doesn't exist or malloc failure.
|
* Returns NULL if the interface doesn't exist or malloc failure.
|
||||||
*/
|
*/
|
||||||
|
@ -67,6 +67,7 @@ void ipx_interfaces_cleanup(void);
|
|||||||
|
|
||||||
ipx_interface_t *get_ipx_interfaces(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_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);
|
ipx_interface_t *ipx_interface_by_index(int index);
|
||||||
int ipx_interface_count(void);
|
int ipx_interface_count(void);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user