From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from out3-smtp.messagingengine.com (out3-smtp.messagingengine.com [66.111.4.27]) by dpdk.org (Postfix) with ESMTP id 0B486200 for ; Mon, 18 Dec 2017 22:03:58 +0100 (CET) Received: from compute1.internal (compute1.nyi.internal [10.202.2.41]) by mailout.nyi.internal (Postfix) with ESMTP id B0A5620B75; Mon, 18 Dec 2017 16:03:56 -0500 (EST) Received: from frontend1 ([10.202.2.160]) by compute1.internal (MEProxy); Mon, 18 Dec 2017 16:03:56 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=monjalon.net; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to:x-me-sender :x-me-sender:x-sasl-enc; s=mesmtp; bh=31VQFDq5+F0wfl5FQoJutn6BmJ XQ3IqhaPdR56wTDgc=; b=nQqlEiRK7/Q2ctY5xE2GbElUMhB8UoRIHEHdWv8YkA LErnelPpT+OQIJxWuIhRjlz5ipvsrXFLyCOZjrw2NP4PlRMu6/c5Pg8X8EEzHoBD sgjm86sdfg8T79v7XWe3d+braboQEYjSOnQgP2HkEEngKvOCrf8ec2DihQp8Ojye Y= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:content-type :date:from:in-reply-to:message-id:mime-version:references :subject:to:x-me-sender:x-me-sender:x-sasl-enc; s=fm1; bh=31VQFD q5+F0wfl5FQoJutn6BmJXQ3IqhaPdR56wTDgc=; b=AVZHgN5iZ9CPkJn2hNt0rQ xF6JCqAR7oa8lOB1bmM7T0t2Rp2r0fYOv5l9iaOdMBw1EFWRnhAL3aDHTSJab9hs Gv3nhMDbHhcxNiaeW//zhE4KD2LIRVEEo/CBj7ToIHyE8/Xap2JKrTvuXZK68OTI KWySB87ciBtEY7z8hyccQDEIS8dtTYOwQ5SUjWvQab/yXCIyfYpH4J8Q84P+aRKJ h7WfBBEUUkxQhuXtPs57pi5I+zfvGfLj9LhBUFm7Che4OF9icH33LrenLg35bXPX lboR7jwYv1MSBPKQXUlKyFs1hYogUAbvMy3mB6aGS9ebpTrG+0se3z9yvIAYrU3g == X-ME-Sender: Received: from xps.localnet (184.203.134.77.rev.sfr.net [77.134.203.184]) by mail.messagingengine.com (Postfix) with ESMTPA id 5A3357E17D; Mon, 18 Dec 2017 16:03:56 -0500 (EST) From: Thomas Monjalon To: Adrien Mazarguil Cc: dev@dpdk.org, Stephen Hemminger , Ferruh Yigit Date: Mon, 18 Dec 2017 22:03:55 +0100 Message-ID: <3086746.YUGYodTZhn@xps> In-Reply-To: <20171218202139.GE4062@6wind.com> References: <20171124172132.GW4062@6wind.com> <20171218102629.43798de2@xeon-e3> <20171218202139.GE4062@6wind.com> MIME-Version: 1.0 Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="us-ascii" Subject: Re: [dpdk-dev] [PATCH v1 2/3] net/hyperv: implement core functionality X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 18 Dec 2017 21:03:58 -0000 18/12/2017 21:21, Adrien Mazarguil: > On Mon, Dec 18, 2017 at 10:26:29AM -0800, Stephen Hemminger wrote: > > On Mon, 18 Dec 2017 17:46:23 +0100 > > Adrien Mazarguil wrote: > > > > > +static int > > > +ether_addr_from_str(struct ether_addr *eth_addr, const char *str) > > > +{ > > > + static const uint8_t conv[0x100] = { > > > + ['0'] = 0x80, ['1'] = 0x81, ['2'] = 0x82, ['3'] = 0x83, > > > + ['4'] = 0x84, ['5'] = 0x85, ['6'] = 0x86, ['7'] = 0x87, > > > + ['8'] = 0x88, ['9'] = 0x89, ['a'] = 0x8a, ['b'] = 0x8b, > > > + ['c'] = 0x8c, ['d'] = 0x8d, ['e'] = 0x8e, ['f'] = 0x8f, > > > + ['A'] = 0x8a, ['B'] = 0x8b, ['C'] = 0x8c, ['D'] = 0x8d, > > > + ['E'] = 0x8e, ['F'] = 0x8f, [':'] = 0x40, ['-'] = 0x40, > > > + ['\0'] = 0x60, > > > + }; > > > + uint64_t addr = 0; > > > + uint64_t buf = 0; > > > + unsigned int i = 0; > > > + unsigned int n = 0; > > > + uint8_t tmp; > > > + > > > + do { > > > + tmp = conv[(int)*(str++)]; > > > + if (!tmp) > > > + return -EINVAL; > > > + if (tmp & 0x40) { > > > + i += (i & 1) + (!i << 1); > > > + addr = (addr << (i << 2)) | buf; > > > + n += i; > > > + buf = 0; > > > + i = 0; > > > + } else { > > > + buf = (buf << 4) | (tmp & 0xf); > > > + ++i; > > > + } > > > + } while (!(tmp & 0x20)); > > > + if (n > 12) > > > + return -EINVAL; > > > + i = RTE_DIM(eth_addr->addr_bytes); > > > + while (i) { > > > + eth_addr->addr_bytes[--i] = addr & 0xff; > > > + addr >>= 8; > > > + } > > > + return 0; > > > +} > > > + > > > > > > Why not ether_ntoa? > > Good question. For the following reasons: > > - I forgot about the existence of ether_ntoa() and didn't look it up seeing > struct ether_addr is (re-)defined by rte_ether.h. What happens when one > includes netinet/ether.h together with that file results in various > conflicts that trigger a compilation error. This problem should be > addressed first. > > - ether_ntoa() returns a static buffer and is not reentrant, ether_ntoa_r() > is but as a GNU extension, I'm not sure it exists on other OSes. Even if > this driver is currently targeted at Linux, this is likely not the case > for other DPDK code relying on rte_ether.h. > > - I had ether_addr_from_str()'s code already ready and lying around for a > future update in testpmd's flow command parser. No other MAC-48 conversion > function I know of is as flexible as this version. The ability to omit ":" > and entering partial addresses is a big plus IMO. > > I think both can coexist on their own merits. Since rte_ether.h needs to be > fixed either way, how about I move this function in a separate commit and > address the conflict with netinet/ether.h while there? Looks to be a good plan.