Re: nlif_index2name bug?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Eric Leblond wrote:
> Hi,
>
> Le samedi 17 novembre 2007 à 14:53 +0200, Jaco Kroon a écrit :
>   
>> Hi guys,
>>
>> I've seen an error in nlif_index2name, specifically, if an interface
>> comes up _after_ I've opened the nlif_handle (using nlif_open()) then it
>> won't resolve the index of that device to a name.
>>
>> Is this a known issue, a bug or simply me not understanding how nlif
>> works?
>>     
>
> Yes, you did not understand how nlif is working (but I think this is due
> to the lack of documentation). If fact, you have omit to listen to iface
> events and to call nlif_catch after each event.
>   
Ah thanks.
> For a working code example, you can have a look at NuFW's code. nlif
> related code is always prefixed by:
> #ifdef HAVE_NLIF_CATCH
>
> You can browse code online at:
> http://software.inl.fr/trac/trac.cgi/browser/mirror/edenwall/nufw/trunk/nufw/src/nufw/packetsrv.c
> http://software.inl.fr/trac/trac.cgi/browser/mirror/edenwall/nufw/trunk/nufw/src/nufw/iface.c
>   
This isn't a particularly "short" example and can probably be simplified
a lot, not true?  It's good enough for me though, so thank a million for
pointing me to it.
> I've just wrote a brief nlif documentation on the following page:
> http://software.inl.fr/trac/trac.cgi/wiki/articles/using_nlif
>   
This explains things quite a bit.  Very nicely done.

I'm actually using libnetfilter_queue, and am not doing anything
multi-threaded, would it be sufficient just to call nlif_catch() every
time I run into an interface for which there is no name and to then
retry the call?  Alternatively, you mention select(), I'm guessing the
poll() system call will achieve the same thing?  My reasoning here is
that everytime just before calling nlif_index2name() to first call
poll() with a timeout of zero in order to check whether there are
updates and to then call nlif_catch if there are updates, however, is
this the most efficient way, since poll() and nlif_catch() both probably
results in a system call, wouldn't it simply be more efficient to just
call nlif_catch every time just before calling nlif_index2name?

Also, in the case of poll(), I guess I need to poll for POLLIN?

Thanks for the help and explanation so far,

Jaco
-
To unsubscribe from this list: send the line "unsubscribe netfilter" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Netfilter Development]     [Linux Kernel Networking Development]     [Netem]     [Berkeley Packet Filter]     [Linux Kernel Development]     [Advanced Routing & Traffice Control]     [Bugtraq]

  Powered by Linux