X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;ds=sidebyside;f=iface.c;fp=iface.c;h=a7d210fab9ae4ade932361669c910bf91f7f5c08;hb=8e7f83aa5b6d910e80c56b31f4eb79b02e7ca67b;hp=5e6c94a095218f29a4f59067f807ff1a93a9257f;hpb=ad1f9d3725a300f10eca071c6fe2f2c583f51436;p=catta diff --git a/iface.c b/iface.c index 5e6c94a..a7d210f 100644 --- a/iface.c +++ b/iface.c @@ -489,3 +489,33 @@ gboolean flx_interface_match(flxInterface *i, gint index, guchar protocol) { return TRUE; } + +void flx_interface_monitor_walk(flxInterfaceMonitor *m, gint interface, guchar protocol, flxInterfaceMonitorWalkCallback callback, gpointer userdata) { + g_assert(m); + g_assert(callback); + + if (interface > 0) { + if (protocol != AF_UNSPEC) { + flxInterface *i; + + if ((i = flx_interface_monitor_get_interface(m, interface, protocol))) + callback(m, i, userdata); + + } else { + flxHwInterface *hw; + flxInterface *i; + + if ((hw = flx_interface_monitor_get_hw_interface(m, interface))) + for (i = hw->interfaces; i; i = i->by_hardware_next) + if (flx_interface_match(i, interface, protocol)) + callback(m, i, userdata); + } + + } else { + flxInterface *i; + + for (i = m->interfaces; i; i = i->interface_next) + if (flx_interface_match(i, interface, protocol)) + callback(m, i, userdata); + } +}