From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail.cs.hut.fi (mail.cs.hut.fi [130.233.192.7]) by dpdk.org (Postfix) with ESMTP id 1110C592E for ; Fri, 25 Jul 2014 00:54:31 +0200 (CEST) Received: from [127.0.0.1] (hutcs.cs.hut.fi [130.233.192.10]) by mail.cs.hut.fi (Postfix) with ESMTPS id 1E414308C98; Fri, 25 Jul 2014 01:56:00 +0300 (EEST) Message-ID: <53D18EFF.8080804@fixup.fi> Date: Thu, 24 Jul 2014 22:55:59 +0000 From: Antti Kantee MIME-Version: 1.0 To: Matthew Hall , "dev@dpdk.org" References: <20140724075918.GA21277@mhcomputing.net> In-Reply-To: <20140724075918.GA21277@mhcomputing.net> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [dpdk-dev] symbol conflicts between netinet/in.h, arpa/inet.h, and rte_ip.h X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 24 Jul 2014 22:54:31 -0000 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"