Thanks Seb. I Will send out an updated webrev. My comments are below:
Sebastien Roy wrote:
>> http://cr.opensolaris.org/~sagun/libpcap/
> aclocal.m4 and configure.in
>
> * The macros and code in these files seem to be going out of their way
> to support old versions of the public libdlpi library that didn't
> contain a dlpi_walk() function. Why? It seems to me that the logic
> should be; if there's a public libdlpi library (defined as a library
> that has dlpi_handle_t and dlpi_walk()), then use it. Otherwise,
> don't use it. There's no value (IMO) to using some hybrid libdlpi
> library that one or two Sun employees have lying around on their stale
> builds of Nevada.
I agree, besides just getting to use a simpler libdlpi library there is
no feature advantage in using the libldpi library without dlpi_walk(). I
will change the logic to be use:
if (dlpi_handle_t && dlpi_walk())
use pcap_libldpi.c
else
use pcap_dlpi.c
>
>
> dlpisubs.c
>
> * General question: Did you modify any of the code in these functions?
Not the code itself. I'll fix line 8.
> * 118-123: I would think that in 2008, most compilers can do a better
> job at assigning register use than this (making every single variable
> a "register" variable.) You don't have to fix this; this is more a
> question for those more knowledgeable than me at compiler optimization.
Since I'm not an expert either, I wasn't sure what to do here and in the
new file added. I was expecting there would be some comment regarding
how it would be best to use them.
>
>
> pcap-dlpi.c
>
> * 139: This belongs in a header file. There should be a private
> header file with declarations for the functions in dlpisubs.c (the
> existing pcap-int.h perhaps?).
I think pcap-int.h would be appropriate.
> pcap-libdlpi.c
>
> * 46,51: The indentation looks off here.
Fixed.
>
> * 61: Is the idea that the caller frees the memory allocated here? If
> so, it would be good to state that in a comment so that libpcap
> novices like me don't assume that there's a memory leak in this code. :-)
I'll add a comment here.
> * 83: Why is this "register"?
Don't have a good reason except left what was similar to pcap-dlpi.c.
>
> * 101: Perhaps this is a good time to ask about DLPI_NATIVE. For
> those not familiar with the concept, the idea is that some DLPI
> providers masquerade as a well-known media type by default, but can
> morph into their "native" types on-demand. Recent Solaris WiFi DLPI
> devices behave this way (DL_ETHER by default, but DL_WIFI under the
> covers). Passing the DLPI_NATIVE flag to dlpi_open() causes such
> providers to provide access to their native media type. Do we have a
> plan to eventually add support for DLPI_NATIVE here so that libpcap
> consumers can have access to raw WiFi frames, for example?
There is support for this in libdlpi and this would be a useful feature.
Besides testing I don't think this would be a lot of work so if it makes
sense to include this now I'll make the changes.
>
> * 130: This looks like a bug. In the pcap-dlpi.c code, failure to
> enable multicast promiscuous mode does not result in a failure, but
> only a warning.
Will fix, but before that I have a question,I had changed the logic here
in comparision to pcap-dlpi.c; in pcap-dlpi.c the logic is :
if (promisc)
enable physical promiscuous mode
then enable multicast promiscuous mode
else
enable promiscuous mode at SAP level.
In pcap-libdlpi I have it to be, :
if (promisc)
enable physical promiscuous mode
else
enable multicast promiscuous mode
enable promiscuous mode at SAP level.
I guessthe logic should be as in pcap-dlpi.c?
>
> * 211: Related to my previous comments on dlpi_walk() support. It
> looks like this function flies apart and doesn't work in the absence
> of dlpi_walk(), so I don't see the point of attempting to support
> libdlpi without dlpi_walk() when pcap-dlpi.c should work just fine for
> such platforms (better than pcap-libdlpi.c in fact).
>
Agree and will fix.
> * 257: The indentation could be cleaned up by checking for len != 0
> first. For example:
>
> len = p->cc;
> if (len != 0) {
> bufp = p->bp;
> goto process_pkts;
> }
> do {
> /* dlpi_recv() stuff */
> } while (len == 0);
> process_pkts:
> return (pcap_process_pkts(p, callback, user, count, bufp, len));
Will fix.
>
> * 277: What is expected? Please elaborate on this comment, as it has
> little value as-is.
>
I'll add a comment.
> * 278: Is this logic correct? I'm looking at the old pcap-dlpi.c, and
> the handling for EINTR is completely different.
Removing the condition (p->break_loop) in line 278 should make it the same.
>
> * 321: dlpi_close() handles being called with a NULL dlpi_hd. (that
> should probably go in the dlpi_close() man page, but I don't see it
> there)
I agree with Meem's comment on this. Also, setting the handle to NULL is
not necessary at all. I'll fix it in pcap-libdlpi.c.
>
> * 323: free() handles being called with a NULL argument.
Ok I"ll fix this.
Thanks,
-Sagun