All of lore.kernel.org
 help / color / mirror / Atom feed
From: Matthew Hall <mhall-Hv3ogNYU3JfZZajBQzqCxQ@public.gmane.org>
To: "dev-VfR2kkLFssw@public.gmane.org" <dev-VfR2kkLFssw@public.gmane.org>
Subject: symbol conflicts between netinet/in.h, arpa/inet.h, and rte_ip.h
Date: Thu, 24 Jul 2014 00:59:18 -0700	[thread overview]
Message-ID: <20140724075918.GA21277@mhcomputing.net> (raw)

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.

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.

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:

struct ip4_addr {
    uint32_t addr;
};

typedef struct ip4_addr ip4_addr;

struct ip6_addr {
    uint8_t addr[16];
};

typedef struct ip6_addr ip6_addr;

struct ip_addr {
    uint8_t family;
    uint8_t prefix;
    union {
        struct ip4_addr ipv4;
        struct ip6_addr ipv6;
    };
};

I had to create a bunch of duplicate code to handle it in my project, since 
the DPDK marked its copies of all these functions as "secret" and didn't make 
a .h for them. If any of it is useful I am happy to donate it, although I 
don't think I've got quite enough experience with this specifc part of the 
DPDK to code it up all by myself.

Thanks,
Matthew.

             reply	other threads:[~2014-07-24  7:59 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-07-24  7:59 Matthew Hall [this message]
     [not found] ` <20140724075918.GA21277-Hv3ogNYU3JfZZajBQzqCxQ@public.gmane.org>
2014-07-24 15:43   ` symbol conflicts between netinet/in.h, arpa/inet.h, and rte_ip.h Niraj Sharma (nirajsha)
2014-07-24 22:55   ` Antti Kantee
     [not found]     ` <53D18EFF.8080804-jIVgJlTk8bs@public.gmane.org>
2014-07-24 23:03       ` Matthew Hall
2014-07-25  1:12       ` Wu, Jingjing
     [not found]         ` <9BB6961774997848B5B42BEC655768F8AB222F-0J0gbvR4kTg/UvCtAeCM4rfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2014-07-25  4:56           ` Matthew Hall
     [not found]             ` <b45e77f2-df66-4973-ab40-bde62270c47d-2ueSQiBKiTY7tOexoI0I+QC/G2K4zDHf@public.gmane.org>
2014-07-25 10:33               ` Ananyev, Konstantin
2014-07-25 10:43       ` Thomas Monjalon
2014-07-25 14:40         ` Antti Kantee
     [not found]           ` <53D26C42.3060907-jIVgJlTk8bs@public.gmane.org>
2014-07-25 14:44             ` Matthew Hall

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=20140724075918.GA21277@mhcomputing.net \
    --to=mhall-hv3ognyu3jfzzajbqzqcxq@public.gmane.org \
    --cc=dev-VfR2kkLFssw@public.gmane.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.