DPDK patches and discussions
 help / color / mirror / Atom feed
From: Antti Kantee <pooka@fixup.fi>
To: Matthew Hall <mhall@mhcomputing.net>, "dev@dpdk.org" <dev@dpdk.org>
Subject: Re: [dpdk-dev] symbol conflicts between netinet/in.h, arpa/inet.h, and rte_ip.h
Date: Thu, 24 Jul 2014 22:55:59 +0000	[thread overview]
Message-ID: <53D18EFF.8080804@fixup.fi> (raw)
In-Reply-To: <20140724075918.GA21277@mhcomputing.net>

On 24/07/14 07:59, Matthew Hall wrote:
> Hello,
>
> I ran into some weird symbol conflicts between system netinet/in.h and DPDK
> rte_ip.h. They have a lot of duplicated definitions for stuff like IPPROTO_IP
> and so on. This breaks when you want to use inet_pton from arpa/inet.h,
> because it includes netinet/in.h to define struct in_addr.

I would namespace the definitions in DPDK, i.e. make them 
DPDK_IPPROTO_FOO etc.

> Thus with all the conflicts it's impossible to use a DPDK IP struct instead of
> all the system's sockaddr stuff, to store a value from the system copy of
> inet_pton. This would be a common operation if, for example, you want to
> configure all the IP addresses on your box from a JSON file, which is what I
> was doing.
>
> The DPDK kludged around it internally by using a file called
> cmdline_parse_ipaddr.c with private copies of these functions. But it in my
> opinion very unwisely marked all of the functions as static except for
> cmdline_parse_ipaddr, which only works on the DPDK's proprietary argument
> handling, and not with anything the user might have which is a different
> format.

In my experience from years of fighting with more or less this exact 
same problem -- the fight is now thankfully over but the scars remain -- 
you either want to expose a complete set of types and provide support 
for everything, or you want to expose nothing.  Approaches where you use 
cute definitions and reuse some host routines is like asking for an 
audience with Tyranthraxus when armed with a kitten.  It's that doubly 
so if you don't have to and do it anyway.

> So, it would be a big help for users if the macros in librte_net files would
> check if the symbols already existed, or if they had subheader files available
> to grab only non conflicting symbols, or if they would make a proper .h and
> factor all the inet_pton and inet_ntop inside the cmdline lib into a place
> where users can access them. It would also be a help if they had a less ugly
> equivalent to struct sockaddr, which let you work with IP addresses a bit more
> easily, such as something like this:

Again, I recommend steering away from any tightrope approaches that 
"know" which types are non-conflicting, or pick out half-and-half from 
the host and IP stack.  "Do, or do not, there is no half-and-half"

  parent reply	other threads:[~2014-07-24 22:54 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-07-24  7:59 Matthew Hall
2014-07-24 15:43 ` Niraj Sharma (nirajsha)
2014-07-24 22:55 ` Antti Kantee [this message]
2014-07-24 23:03   ` Matthew Hall
2014-07-25  1:12   ` Wu, Jingjing
2014-07-25  4:56     ` Matthew Hall
2014-07-25 10:33       ` Ananyev, Konstantin
2014-07-25 10:43   ` Thomas Monjalon
2014-07-25 14:40     ` Antti Kantee

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=53D18EFF.8080804@fixup.fi \
    --to=pooka@fixup.fi \
    --cc=dev@dpdk.org \
    --cc=mhall@mhcomputing.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).