--- Begin Message ---
On Wed, Aug 12, 2020 at 6:22 PM Guy Harris <ghar...@sonic.net> wrote:

> On Aug 12, 2020, at 1:31 PM, Guy Harris via tcpdump-workers <
> tcpdump-workers@lists.tcpdump.org> wrote:
>
> > We should probably have an include/libnetdissect directory in which we
> install netdissect.h and the headers it requires.
>
> Or include/netdissect.
>
> > However, API-declaring headers should *NEVER* require config.h (there
> was a particularly horrible case with OpenBSD's version of libz, forcing a
> painful workaround in Wireshark:
>
>         ...
>
> > so if anything in netdissect.h depends on config.h definitions, we
> should try to fix that.
>
> It looks like it's just declaring replacements for strlcat(), strlcpy(),
> strdup(), and strsep() if the platform doesn't provide them.  That should
> be done in a non-public header.
>

The specific reason for needing config.h was

#ifndef HAVE___ATTRIBUTE__
#define __attribute__(x)
#endif

because there's other code that doesn't work right without defining the
right attributes.  Scrolling through netdissect.h, it relies on things
like __ATTRIBUTE___FORMAT_OK_FOR_FUNCTION_POINTERS to be able to fully
prototype the elements in netdissect_options.  (There's probably an
argument that netdissect_options should be opaque, with the right accessors
and mutators for an API consumer.  On the other hand, any API user probably
wants to provide ndo_printf, ndo_error, ndo_warning, which themselves have
the ndo as the first argument, hm.)

> That leaves ip.h and ip6.h; I'd have to check to see whether they should
> be considered part of the API or not.
>
> The comments are:
>
>         #include "ip.h" /* struct ip for nextproto4_cksum() */
>         #include "ip6.h" /* struct ip6 for nextproto6_cksum() */
>
> so what should probably be done is have a header for *users* of
> libnetdissect and a separate header for *components* of libnetdissect; the
> latter can define more things.  (The latter would be a non-public header,
> unless we decide to support third-party dissector plugins; that would also
> mean we'd probably want to have something like Wireshark's dissector tables
> to which those plugins would add themselves.)


For my use case, "pretty_print_packet()" (and ndo_set_function_pointers() )
is the only public interface I need.  I wonder if starting over with a
clean header file for API users would be a better start.
(Is sunrpcrequest_print() really part of the public api?)

  Bill

--- End Message ---
_______________________________________________
tcpdump-workers mailing list
tcpdump-workers@lists.tcpdump.org
https://lists.sandelman.ca/mailman/listinfo/tcpdump-workers

Reply via email to