From patchwork Thu May 16 18:04:21 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Stephen Hemminger X-Patchwork-Id: 53491 Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 3BBF8D195; Thu, 16 May 2019 20:04:40 +0200 (CEST) Received: from mail-pl1-f193.google.com (mail-pl1-f193.google.com [209.85.214.193]) by dpdk.org (Postfix) with ESMTP id 3608FD16D for ; Thu, 16 May 2019 20:04:38 +0200 (CEST) Received: by mail-pl1-f193.google.com with SMTP id f97so2001780plb.5 for ; Thu, 16 May 2019 11:04:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=networkplumber-org.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=lUUPGQiPXmD2nflMT0cY25tNA/8yBe9D8LYITGgxvy8=; b=XX0wHgbxfYTp0O7kG/Ryu3CK8DJ6ESBtDqGqjLPcuA5DCJUY2lkoQP/0bhSzNxmmMX H54JPjWzuuvqAZoEyjnpeGjRdvS5rgxDWAZn1FNJ6g3PfUQoUL9NUYTVKrgttz0kMqKT jI3kzxHbSpJ3/jhIF9LwCryy6RfiFUdq+RRPgvP0hc4h8YtJGw/KBULhe8LbC9PIUCMv Px7HnO574FBmeIELqxlf33kSiuj9+DAaMbelUGSZoDuh6N/Ho97BPy11ZH7v29wpBc8P 18vFu2rV1q8PTXRlj0j3TPrVQOou9oc2Iiz4NXLKzYQJvfelZy6hmMWM2H7kqfu2BNkh ZcAQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=lUUPGQiPXmD2nflMT0cY25tNA/8yBe9D8LYITGgxvy8=; b=VkwxKrfXHxXq0BaUqBkTB790ccH1ZwBwT97FyWMQfH05mp8um+uVxoXbSq1waN8/ll 8ZKGlVlDzR0qvP50O2Nbhu5q+VSZsatZxGn11soCySMgcpvUmMHgYgoS0TAhZ5szQl0+ wUfSwBdvLsjK3ZQ4H/aXIn3QzAcjl9SzGexDXv/44B8EkHsg3BsZ2DdZDyl7oYLdbNWC d22KXueA8313T6w3RxRFHYb3iOXbCjlMf7f211qlX2wlIWUNvLcTsKHbo0yumM4P49qH 7ScUgELhWin8+fDsy2Nh6pQ8IyjbCCjkm4oTS80IVcD8XfCFCss3XZUmiENTMAvunwh6 ksRA== X-Gm-Message-State: APjAAAUeD9ZuY20bVck9iQDr2PLaNUmcEr4ex1BdYAfbeu73/Wmr+RHe 5RsWdQyuJ/urxR1q0PvIE74YphBqeIM= X-Google-Smtp-Source: APXvYqx5zrGn6G1yBoYOZd6cHGSVs/y3B0QLZDl+naNj233MSHDMq2QRxi53c9YvTRHOs+JJZ23TFw== X-Received: by 2002:a17:902:184:: with SMTP id b4mr25506127plb.2.1558029877030; Thu, 16 May 2019 11:04:37 -0700 (PDT) Received: from hermes.lan (204-195-22-127.wavecable.com. [204.195.22.127]) by smtp.gmail.com with ESMTPSA id d67sm9376657pfa.35.2019.05.16.11.04.35 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 16 May 2019 11:04:35 -0700 (PDT) From: Stephen Hemminger To: dev@dpdk.org Cc: Bruce Richardson , Stephen Hemminger Date: Thu, 16 May 2019 11:04:21 -0700 Message-Id: <20190516180427.17270-2-stephen@networkplumber.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190516180427.17270-1-stephen@networkplumber.org> References: <20190516180427.17270-1-stephen@networkplumber.org> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v2 1/7] ether: mark ethernet addresses as being 2-byte aligned 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" From: Bruce Richardson When including the rte_ether.h header in applications with warnings enabled, a warning was given because of the assumption of 2-byte alignment of ethernet addresses when processing them. .../include/rte_ether.h:149:2: warning: converting a packed ‘const struct ether_addr’ pointer (alignment 1) to a ‘unaligned_uint16_t’ {aka ‘const short unsigned int’} pointer (alignment 2) may result in an unaligned pointer value [-Waddress-of-packed-member] 149 | const unaligned_uint16_t *ea_words = (const unaligned_uint16_t *)ea; | ^~~~~ Since ethernet addresses should always be aligned on a two-byte boundary, we can just inform the compiler of this assumption to remove the warnings and allow us to always access the addresses using 16-bit operations. Signed-off-by: Bruce Richardson Signed-off-by: Stephen Hemminger --- lib/librte_net/rte_ether.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/librte_net/rte_ether.h b/lib/librte_net/rte_ether.h index 3a87ff184900..ac8897681aca 100644 --- a/lib/librte_net/rte_ether.h +++ b/lib/librte_net/rte_ether.h @@ -55,7 +55,8 @@ extern "C" { * See http://standards.ieee.org/regauth/groupmac/tutorial.html */ struct ether_addr { - uint8_t addr_bytes[ETHER_ADDR_LEN]; /**< Addr bytes in tx order */ + /** Addr bytes in tx order */ + uint8_t addr_bytes[ETHER_ADDR_LEN] __rte_aligned(2); } __attribute__((__packed__)); #define ETHER_LOCAL_ADMIN_ADDR 0x02 /**< Locally assigned Eth. address. */ @@ -146,7 +147,7 @@ static inline int is_multicast_ether_addr(const struct ether_addr *ea) */ static inline int is_broadcast_ether_addr(const struct ether_addr *ea) { - const unaligned_uint16_t *ea_words = (const unaligned_uint16_t *)ea; + const uint16_t *ea_words = (const uint16_t *)ea; return (ea_words[0] == 0xFFFF && ea_words[1] == 0xFFFF && ea_words[2] == 0xFFFF); From patchwork Thu May 16 18:04:22 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stephen Hemminger X-Patchwork-Id: 53492 Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 6538CD19B; Thu, 16 May 2019 20:04:42 +0200 (CEST) Received: from mail-pl1-f195.google.com (mail-pl1-f195.google.com [209.85.214.195]) by dpdk.org (Postfix) with ESMTP id 353F1D179 for ; Thu, 16 May 2019 20:04:39 +0200 (CEST) Received: by mail-pl1-f195.google.com with SMTP id n8so1986362plp.10 for ; Thu, 16 May 2019 11:04:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=networkplumber-org.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=xtG/KhRwgWU2q8q7xbdYkEYheQnNyyATaCzY3kytBOc=; b=HJ4BP8DbGCxNOUoK1Flu8RK4k0NSOfYk48qBrqe6yUT/OVCKQPk4fec/rQOYB28Tpn I88lfFILNEoqvcpKWVK/diRBlVZTk+5ixXA+TRHRGEaaFttWOdT/LfxmhHZPgZtwfIJw laNJvffgFOSaShxwCA3QRkhoQ9YB1tJPdcwSUbcbf+0zhcTGUc0JYAVj4awNLOcTtCEP tfHl3xjdystpJYfvWM6MXQ0x1UTtHf8tbk875NGuptj9x9vEqSqEzTG91P/SIXOH7+iI +UBLhfvCdHn6cbp8BWatnfYspZEjB+ilDRdVNApouz0ZhQnurFIe4O+mX0BkPSmrQq1W f2Kg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=xtG/KhRwgWU2q8q7xbdYkEYheQnNyyATaCzY3kytBOc=; b=Z6/nt6HloGzqEqN9dKbmZk/fBzNb0b0okn2XtPzcfQU4pGN/GhbQBBRs1YOWG/3A+I 4HA1lujnJbWG5U0wXRL0hsiCKbeO457OFrbpF1/xiYuPFW7cWmHTgfCl+BR3HoL7Jsbr mhh3RSsylYadeddt4A+76US0+Ysf1IfKmJPZoGe58V86nc5MMX0DS1CpRxIHGqut193e twJVpDiBpxZ6NdXrOjKVR5z2H3HV5fM2BTW4dm3fNTiADuNWO+iLuUay5VdOLB6LC6yQ Wo0KIF5CZErV/cMnTIMQkNsjG8VTq6rdDzE9qFdK00bEzDMPUnMviBYFK114URrOvS9k Vvuw== X-Gm-Message-State: APjAAAVd2JM4TU4Mx5C7mXYSMYPztNQgmUKUPwzPYdpmMr4twb3xrYYh btj6ZKujF/w97yNwON+YwgQ/OsCZM7w= X-Google-Smtp-Source: APXvYqwOrPoB5RQHdwwG5Z6ZSsq5KcMmkD/oWJsGQ26rGlrE6/Qam0Cn3ugBhynXc96gn2fB6EaGDg== X-Received: by 2002:a17:902:8f98:: with SMTP id z24mr40140278plo.101.1558029878153; Thu, 16 May 2019 11:04:38 -0700 (PDT) Received: from hermes.lan (204-195-22-127.wavecable.com. [204.195.22.127]) by smtp.gmail.com with ESMTPSA id d67sm9376657pfa.35.2019.05.16.11.04.37 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 16 May 2019 11:04:37 -0700 (PDT) From: Stephen Hemminger To: dev@dpdk.org Cc: Stephen Hemminger , Bruce Richardson Date: Thu, 16 May 2019 11:04:22 -0700 Message-Id: <20190516180427.17270-3-stephen@networkplumber.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190516180427.17270-1-stephen@networkplumber.org> References: <20190516180427.17270-1-stephen@networkplumber.org> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v2 2/7] ether: do not mark ethernet address and header as packed 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Since the Ethernet address and header are naturally aligned correctly on all architectures, there is no need to mark them as packed. This results in faster code, and also gets rid of warnings with gcc-9 about getting address of packed structure. Suggested-by: Bruce Richardson Signed-off-by: Stephen Hemminger --- lib/librte_net/rte_ether.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/librte_net/rte_ether.h b/lib/librte_net/rte_ether.h index ac8897681aca..0954d183cca7 100644 --- a/lib/librte_net/rte_ether.h +++ b/lib/librte_net/rte_ether.h @@ -57,7 +57,7 @@ extern "C" { struct ether_addr { /** Addr bytes in tx order */ uint8_t addr_bytes[ETHER_ADDR_LEN] __rte_aligned(2); -} __attribute__((__packed__)); +}; #define ETHER_LOCAL_ADMIN_ADDR 0x02 /**< Locally assigned Eth. address. */ #define ETHER_GROUP_ADDR 0x01 /**< Multicast or broadcast Eth. address. */ @@ -273,7 +273,7 @@ struct ether_hdr { struct ether_addr d_addr; /**< Destination address. */ struct ether_addr s_addr; /**< Source address. */ uint16_t ether_type; /**< Frame type. */ -} __attribute__((__packed__)); +}; /** * Ethernet VLAN Header. @@ -283,7 +283,7 @@ struct ether_hdr { struct vlan_hdr { uint16_t vlan_tci; /**< Priority (3) + CFI (1) + Identifier Code (12) */ uint16_t eth_proto;/**< Ethernet type of encapsulated frame. */ -} __attribute__((__packed__)); +}; /** * VXLAN protocol header. @@ -293,7 +293,7 @@ struct vlan_hdr { struct vxlan_hdr { uint32_t vx_flags; /**< flag (8) + Reserved (24). */ uint32_t vx_vni; /**< VNI (24) + Reserved (8). */ -} __attribute__((__packed__)); +}; /* Ethernet frame types */ #define ETHER_TYPE_IPv4 0x0800 /**< IPv4 Protocol. */ @@ -325,7 +325,7 @@ struct vxlan_gpe_hdr { uint8_t reserved[2]; /**< Reserved (16). */ uint8_t proto; /**< next-protocol (8). */ uint32_t vx_vni; /**< VNI (24) + Reserved (8). */ -} __attribute__((__packed__)); +}; /* VXLAN-GPE next protocol types */ #define VXLAN_GPE_TYPE_IPV4 1 /**< IPv4 Protocol. */ From patchwork Thu May 16 18:04:23 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stephen Hemminger X-Patchwork-Id: 53493 Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id CD86EE3EE; Thu, 16 May 2019 20:04:44 +0200 (CEST) Received: from mail-pl1-f195.google.com (mail-pl1-f195.google.com [209.85.214.195]) by dpdk.org (Postfix) with ESMTP id 6717B5F1B for ; Thu, 16 May 2019 20:04:40 +0200 (CEST) Received: by mail-pl1-f195.google.com with SMTP id g5so2011031plt.2 for ; Thu, 16 May 2019 11:04:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=networkplumber-org.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=bfKwk9SuRceosz3HZshOVoHB2uA66ZXDogeYFXaBmdw=; b=TL1rSHStFitGmY4eGTq+3c3Od0MKgm9dHErUlN0ywd3wWjG4GZLn9zJjk1LuL25ry+ X3tsaO6bQUS7O2TllpAkGRNB5i71hm+jXerU2U8b41GsMm9N6vnXZf0J/85eCSCfnLVr GruQ5HGl5wwbegExQ1gTJJal1cqGhi+bOK/dFfpyjO91I9A/FQ7Hl2ary2iRS84oriPZ r/2FE3YwU9IfL3cimhY/es6W3l2CauJ3PVQIkjVjx50cVU76gbUUZ2clVLeSGl5q3zX1 okjDk6VU4s3ozhq0q3sP1PhcsEe32o7yD1M0rPXUS3VRPaJdjUkY1VVfEyIKZELTYy4s DqYg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=bfKwk9SuRceosz3HZshOVoHB2uA66ZXDogeYFXaBmdw=; b=W8N986OTBuQeNt4o0xMqKGPqWoYBSI8yAKPTFRUdrvtieCePRtnd80+klxdvgmTi6P mNE/HZEqaSUDnhX7scxK/HEnjVPDKlu9tYLdXIOdKXeE6H3+BAXWjvm9/8ZCbhzqUMqm I8tpOuv9iicKSQ/vTlOAfiOk6SEOlDVzoVeA2pUrD3mReC5jyjJB7cj4s08mnz/ThUu8 rmcbpD5iPTG2u4t4Y5gkQ/2rBDb+WkWA/6jgzT6lCAPaS8nfoQSafIYWH2IExBmKyTGo uQ+1OLX4WYFlCEzzg+52oSRB3WdKV7ALkca3HDjf7oDEGUnvHW7BONcpHpRx96TH/eCq kNzg== X-Gm-Message-State: APjAAAWCjYch0ldR93AUFGcU3I3hQx2TTxRunamm8tdnzqxuMb0EfVro kqpAO9EPyjhIRYfDKm73wP70GPh5dqs= X-Google-Smtp-Source: APXvYqz1nZn8URdIpKu6pm/hVGQnn3OeRR+yfuIjKY3bou6saISp5vg1aOLK+ew2oKlruxBxkwNyzw== X-Received: by 2002:a17:902:163:: with SMTP id 90mr52677575plb.212.1558029879359; Thu, 16 May 2019 11:04:39 -0700 (PDT) Received: from hermes.lan (204-195-22-127.wavecable.com. [204.195.22.127]) by smtp.gmail.com with ESMTPSA id d67sm9376657pfa.35.2019.05.16.11.04.38 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 16 May 2019 11:04:38 -0700 (PDT) From: Stephen Hemminger To: dev@dpdk.org Cc: Stephen Hemminger Date: Thu, 16 May 2019 11:04:23 -0700 Message-Id: <20190516180427.17270-4-stephen@networkplumber.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190516180427.17270-1-stephen@networkplumber.org> References: <20190516180427.17270-1-stephen@networkplumber.org> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v2 3/7] ether: deinline non-critical functions 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Formatting ethernet address and getting a random value are not in critical path so they should not be inlined. Signed-off-by: Stephen Hemminger Acked-by: Rami Rosen --- lib/librte_net/Makefile | 1 + lib/librte_net/rte_ether.c | 29 +++++++++++++++++++++++++++++ lib/librte_net/rte_ether.h | 24 ++++-------------------- lib/librte_net/rte_net_version.map | 8 ++++++++ 4 files changed, 42 insertions(+), 20 deletions(-) create mode 100644 lib/librte_net/rte_ether.c diff --git a/lib/librte_net/Makefile b/lib/librte_net/Makefile index c3082069ab50..b4900b44f4d0 100644 --- a/lib/librte_net/Makefile +++ b/lib/librte_net/Makefile @@ -15,6 +15,7 @@ LIBABIVER := 1 SRCS-$(CONFIG_RTE_LIBRTE_NET) := rte_net.c SRCS-$(CONFIG_RTE_LIBRTE_NET) += rte_net_crc.c SRCS-$(CONFIG_RTE_LIBRTE_NET) += rte_arp.c +SRCS-$(CONFIG_RTE_LIBRTE_NET) += rte_ether.c # install includes SYMLINK-$(CONFIG_RTE_LIBRTE_NET)-include := rte_ip.h rte_tcp.h rte_udp.h rte_esp.h diff --git a/lib/librte_net/rte_ether.c b/lib/librte_net/rte_ether.c new file mode 100644 index 000000000000..d4b41f122a16 --- /dev/null +++ b/lib/librte_net/rte_ether.c @@ -0,0 +1,29 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2010-2014 Intel Corporation + */ + +#include + +void +eth_random_addr(uint8_t *addr) +{ + uint64_t rand = rte_rand(); + uint8_t *p = (uint8_t *)&rand; + + rte_memcpy(addr, p, ETHER_ADDR_LEN); + addr[0] &= (uint8_t)~ETHER_GROUP_ADDR; /* clear multicast bit */ + addr[0] |= ETHER_LOCAL_ADMIN_ADDR; /* set local assignment bit */ +} + +void +ether_format_addr(char *buf, uint16_t size, + const struct ether_addr *eth_addr) +{ + snprintf(buf, size, "%02X:%02X:%02X:%02X:%02X:%02X", + eth_addr->addr_bytes[0], + eth_addr->addr_bytes[1], + eth_addr->addr_bytes[2], + eth_addr->addr_bytes[3], + eth_addr->addr_bytes[4], + eth_addr->addr_bytes[5]); +} diff --git a/lib/librte_net/rte_ether.h b/lib/librte_net/rte_ether.h index 0954d183cca7..ed178a1f1736 100644 --- a/lib/librte_net/rte_ether.h +++ b/lib/librte_net/rte_ether.h @@ -205,15 +205,8 @@ static inline int is_valid_assigned_ether_addr(const struct ether_addr *ea) * @param addr * A pointer to Ethernet address. */ -static inline void eth_random_addr(uint8_t *addr) -{ - uint64_t rand = rte_rand(); - uint8_t *p = (uint8_t *)&rand; - - rte_memcpy(addr, p, ETHER_ADDR_LEN); - addr[0] &= (uint8_t)~ETHER_GROUP_ADDR; /* clear multicast bit */ - addr[0] |= ETHER_LOCAL_ADMIN_ADDR; /* set local assignment bit */ -} +void +eth_random_addr(uint8_t *addr); /** * Fast copy an Ethernet address. @@ -252,18 +245,9 @@ static inline void ether_addr_copy(const struct ether_addr *ea_from, * @param eth_addr * A pointer to a ether_addr structure. */ -static inline void +void ether_format_addr(char *buf, uint16_t size, - const struct ether_addr *eth_addr) -{ - snprintf(buf, size, "%02X:%02X:%02X:%02X:%02X:%02X", - eth_addr->addr_bytes[0], - eth_addr->addr_bytes[1], - eth_addr->addr_bytes[2], - eth_addr->addr_bytes[3], - eth_addr->addr_bytes[4], - eth_addr->addr_bytes[5]); -} + const struct ether_addr *eth_addr); /** * Ethernet header: Contains the destination address, source address diff --git a/lib/librte_net/rte_net_version.map b/lib/librte_net/rte_net_version.map index 26c06e7c7ae7..49d34093781c 100644 --- a/lib/librte_net/rte_net_version.map +++ b/lib/librte_net/rte_net_version.map @@ -13,6 +13,14 @@ DPDK_17.05 { } DPDK_16.11; +DPDK_19.08 { + global: + + eth_random_addr; + eth_format_addr; +} DPDK_17.05; + + EXPERIMENTAL { global: From patchwork Thu May 16 18:04:24 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stephen Hemminger X-Patchwork-Id: 53494 Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 8619F199AD; Thu, 16 May 2019 20:04:46 +0200 (CEST) Received: from mail-pl1-f196.google.com (mail-pl1-f196.google.com [209.85.214.196]) by dpdk.org (Postfix) with ESMTP id 82ED8D19B for ; Thu, 16 May 2019 20:04:41 +0200 (CEST) Received: by mail-pl1-f196.google.com with SMTP id y3so2023433plp.0 for ; Thu, 16 May 2019 11:04:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=networkplumber-org.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=BYjakb7PAP91JdPTUe9cAmwAkDVj7D73o1Y9NuL3PYk=; b=NXGKDyPwcRnkneiuJ1FTrU0ElPaPg0MG81f/PsZrN/DPgeQS8uJpNDwhSUYd7kxuFW Gg2bKBqSed/je+h3VkJLnznzDOTMJFJcqm+ZcXkfoLYaUEnXWs8QBX3/2EvwrDifiU+L YechXeDi8WEweC/CEbRmXc9fKtX9DHerfWAAnDeWpEzLMmZ2JZyMM7vn1Yn0HYnnT9D4 vUQLHmcWm93XA94focnceuFOZg7U0XNnSAqwmfInuHTGlavuimr+wU5C3O/mUjRSw2xl TYHbSgvcfBOjZQxQyn0xDWviF1xUnpD7j88gyCW+x1KgQ9wAQ+ZWBHBForWKZTHVOenF +XIQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=BYjakb7PAP91JdPTUe9cAmwAkDVj7D73o1Y9NuL3PYk=; b=AqiMAoccFXOlMfxsoV95WS2yQUBAORd+Fuo70aNl1ZuwVyz9ikbFBAv6Al9ZR8JkK9 xAby0wuxbWd6pYG8Kdk/yYpbeLKj0krcdme65Aaar/xiB/6TX0joMzBSMBfH2L1QsEp6 1BmcOam0lb5KEFqhLGNyRsMGPC/+45TKwcCiGZYQ2SFA9Tzjy463/Z6dKXBfP433Px1/ wVO6Ia+XCws2bPFkNReb7fI9EMUSs/7Hd01fWvvc54AFVaoxRz/3C4DWVldub550W2G5 CYK9kKj26eM2pxyE7PMff7jRUNuy+ww67Un9HMDGUYFUEgPLLdleWnh1CQ8CMlMfbdIA OLaA== X-Gm-Message-State: APjAAAXY/WnBwznyGezMphzF+pRwzNGV9F75piNNbS49gPEddr0CB3xa SUhKRmbZ3+N3mnC8ZWnaKdGrjGXOeys= X-Google-Smtp-Source: APXvYqxHQBqHPafLoobq/AGlyH5fFQL9BToZqY1OdCxTpRec/pLMv5Tjfqls2I8ijxQ/xRLvbV1u7g== X-Received: by 2002:a17:902:868e:: with SMTP id g14mr52949264plo.183.1558029880487; Thu, 16 May 2019 11:04:40 -0700 (PDT) Received: from hermes.lan (204-195-22-127.wavecable.com. [204.195.22.127]) by smtp.gmail.com with ESMTPSA id d67sm9376657pfa.35.2019.05.16.11.04.39 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 16 May 2019 11:04:39 -0700 (PDT) From: Stephen Hemminger To: dev@dpdk.org Cc: Stephen Hemminger Date: Thu, 16 May 2019 11:04:24 -0700 Message-Id: <20190516180427.17270-5-stephen@networkplumber.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190516180427.17270-1-stephen@networkplumber.org> References: <20190516180427.17270-1-stephen@networkplumber.org> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v2 4/7] ether: add eth_unformat_addr 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Make a function that coresponds with eth_aton_r which can be used to convert string to ether_addr. This also allows rte_ethdev to no longer depend on the cmdline library. Signed-off-by: Stephen Hemminger --- lib/librte_net/rte_ether.c | 47 ++++++++++++++++++++++++++++++ lib/librte_net/rte_ether.h | 14 +++++++++ lib/librte_net/rte_net_version.map | 2 +- 3 files changed, 62 insertions(+), 1 deletion(-) diff --git a/lib/librte_net/rte_ether.c b/lib/librte_net/rte_ether.c index d4b41f122a16..12d9af58b5c3 100644 --- a/lib/librte_net/rte_ether.c +++ b/lib/librte_net/rte_ether.c @@ -27,3 +27,50 @@ ether_format_addr(char *buf, uint16_t size, eth_addr->addr_bytes[4], eth_addr->addr_bytes[5]); } + +/* + * Like ether_aton_r but can handle either + * XX:XX:XX:XX:XX:XX or XXXX:XXXX:XXXX + */ +int +ether_unformat_addr(const char *s, struct ether_addr *ea) +{ + unsigned int o0, o1, o2, o3, o4, o5; + int n; + + n = sscanf(s, "%x:%x:%x:%x:%x:%x", + &o0, &o1, &o2, &o3, &o4, &o5); + + if (n == 6) { + if (o0 > UINT8_MAX || o1 > UINT8_MAX || o2 > UINT8_MAX || + o3 > UINT8_MAX || o4 > UINT8_MAX || o5 > UINT8_MAX) + return -1; + + ea->addr_bytes[0] = o0; + ea->addr_bytes[1] = o1; + ea->addr_bytes[2] = o2; + ea->addr_bytes[3] = o3; + ea->addr_bytes[4] = o4; + ea->addr_bytes[5] = o5; + + return 0; + } + + /* Support the format XXXX:XXXX:XXXX */ + n = sscanf(s, "%x:%x:%x", &o0, &o1, &o2); + if (n == 3) { + if (o0 > UINT16_MAX || o1 > UINT16_MAX || o2 > UINT16_MAX) + return -1; + + ea->addr_bytes[0] = o0 >> 8; + ea->addr_bytes[1] = o0 & 0xff; + ea->addr_bytes[2] = o1 >> 8; + ea->addr_bytes[3] = o1 & 0xff; + ea->addr_bytes[4] = o2 >> 8; + ea->addr_bytes[5] = o2 & 0xff; + return 0; + } + /* unknown format */ + + return -1; +} diff --git a/lib/librte_net/rte_ether.h b/lib/librte_net/rte_ether.h index ed178a1f1736..0fa4481d266b 100644 --- a/lib/librte_net/rte_ether.h +++ b/lib/librte_net/rte_ether.h @@ -249,6 +249,20 @@ void ether_format_addr(char *buf, uint16_t size, const struct ether_addr *eth_addr); +/** + * Convert string with Ethernet address to an ether_addr. + * + * @param str + * A pointer to buffer contains the formatted MAC address. + * @param eth_addr + * A pointer to a ether_addr structure. + * @return + * 0 if successful + * -1 and sets rte_errno if invalid string + */ +int __rte_experimental +ether_unformat_addr(const char *str, struct ether_addr *eth_addr); + /** * Ethernet header: Contains the destination address, source address * and frame type. diff --git a/lib/librte_net/rte_net_version.map b/lib/librte_net/rte_net_version.map index 49d34093781c..41d6a5943515 100644 --- a/lib/librte_net/rte_net_version.map +++ b/lib/librte_net/rte_net_version.map @@ -20,10 +20,10 @@ DPDK_19.08 { eth_format_addr; } DPDK_17.05; - EXPERIMENTAL { global: rte_net_make_rarp_packet; rte_net_skip_ip6_ext; + eth_unformat_addr; }; From patchwork Thu May 16 18:04:25 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stephen Hemminger X-Patchwork-Id: 53495 Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id A0E4F1B101; Thu, 16 May 2019 20:04:48 +0200 (CEST) Received: from mail-pl1-f195.google.com (mail-pl1-f195.google.com [209.85.214.195]) by dpdk.org (Postfix) with ESMTP id C92AFD1A3 for ; Thu, 16 May 2019 20:04:42 +0200 (CEST) Received: by mail-pl1-f195.google.com with SMTP id p15so2009725pll.4 for ; Thu, 16 May 2019 11:04:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=networkplumber-org.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=yEaUpni5y7fsJISN4fFRnplwP0jzhBCZ/6W1TUBjg94=; b=MCFRyyyRC8n69pkn93mKpo81IyF66f4iBJB7gf+n/yD2r+EWs6lv8g27P6uhaSOl/B sATdP1vOLPAHL9sUaXngYG8XmMCByOkbGW9HYAR+QtzWyIe0ld5ed8lcPjEaX/Q93ElW X8XSrwTSv5Q4lNDSwB+fplDGQ2KNIFLa5X0p2N6/1IvyKqWwVRfAp9WKpJ4nlyaBjnsH SCalJTUTVCCetAydIkD6F1seSXZ4YzBJH+yfG+ZpFdw3XcL8Z6TIw8zN8D6d0j4nXtTZ q7D4Z5PtEGeWXZSfCYJLT2RHmBKCO4nLnYHd6pqPz9xWXx53C5xLsTsIcSL8ZgsZc2P3 mGFg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=yEaUpni5y7fsJISN4fFRnplwP0jzhBCZ/6W1TUBjg94=; b=EbYjf3uSRy+pFGHs5nMQD9K0dgCUNLFqrpQP2Dxz3AaRUbVpCRozduK6JPKwhtZKtW 7bRmovYgODq4ExxhcxP6PJzPEatDR0eETubg+gIIWtZiErxoDTnah17vGAJszsywDjQi +NrAYzYze3i640n6LCb3b6uEk4ikFQtxeBOGpkXIJihuyz2Ma1QZgV/wZnsj8Dxhfb5q S9JOjhKPm6X/PTOQ+/PvR1hw3YCGDQcfH/ceMiTCDOSFvAhAcJY94gAJGBP5HagTcXko K0hshbMyUYIY0qBCoD7PJsQN+p9oCVazQof1HM7aOWWQzoXiiXxLgVZUAGt19hHmnJPg GTLA== X-Gm-Message-State: APjAAAUs5phuCjSHOh27xwENbuhrPzSYBNlxvtlYOjrF1ok+QSUssNBy laKgPp4G9p/WNBEWF0pwVFK6xL+I5n8= X-Google-Smtp-Source: APXvYqyMGWP9dp85sCz1FSHq+1MfZ9NgW5y82tJkZ/mE7hI26ckWI8uyXsOot6FQErKTHJroZ+Wesw== X-Received: by 2002:a17:902:b18c:: with SMTP id s12mr33231259plr.181.1558029881695; Thu, 16 May 2019 11:04:41 -0700 (PDT) Received: from hermes.lan (204-195-22-127.wavecable.com. [204.195.22.127]) by smtp.gmail.com with ESMTPSA id d67sm9376657pfa.35.2019.05.16.11.04.40 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 16 May 2019 11:04:40 -0700 (PDT) From: Stephen Hemminger To: dev@dpdk.org Cc: Stephen Hemminger Date: Thu, 16 May 2019 11:04:25 -0700 Message-Id: <20190516180427.17270-6-stephen@networkplumber.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190516180427.17270-1-stephen@networkplumber.org> References: <20190516180427.17270-1-stephen@networkplumber.org> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v2 5/7] ethdev: use eth_unformat_addr 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Use eth_unformat_addr, so that ethdev can be built and work without the cmdline library. The dependency on cmdline was an arrangement of convenience anyway. Signed-off-by: Stephen Hemminger --- lib/Makefile | 1 - lib/librte_ethdev/Makefile | 2 +- lib/librte_ethdev/meson.build | 2 +- lib/librte_ethdev/rte_class_eth.c | 9 +-------- 4 files changed, 3 insertions(+), 11 deletions(-) diff --git a/lib/Makefile b/lib/Makefile index 791e0d9911d6..82b2c4bfa8ea 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -25,7 +25,6 @@ DIRS-$(CONFIG_RTE_LIBRTE_ETHER) += librte_ethdev DEPDIRS-librte_ethdev := librte_net librte_eal librte_mempool librte_ring DEPDIRS-librte_ethdev += librte_mbuf DEPDIRS-librte_ethdev += librte_kvargs -DEPDIRS-librte_ethdev += librte_cmdline DEPDIRS-librte_ethdev += librte_meter DIRS-$(CONFIG_RTE_LIBRTE_BBDEV) += librte_bbdev DEPDIRS-librte_bbdev := librte_eal librte_mempool librte_mbuf diff --git a/lib/librte_ethdev/Makefile b/lib/librte_ethdev/Makefile index 8d4a02630c4f..60bcc2227878 100644 --- a/lib/librte_ethdev/Makefile +++ b/lib/librte_ethdev/Makefile @@ -12,7 +12,7 @@ CFLAGS += -DALLOW_EXPERIMENTAL_API CFLAGS += -O3 CFLAGS += $(WERROR_FLAGS) LDLIBS += -lrte_net -lrte_eal -lrte_mempool -lrte_ring -LDLIBS += -lrte_mbuf -lrte_kvargs -lrte_cmdline -lrte_meter +LDLIBS += -lrte_mbuf -lrte_kvargs -lrte_meter EXPORT_MAP := rte_ethdev_version.map diff --git a/lib/librte_ethdev/meson.build b/lib/librte_ethdev/meson.build index 8d6165b2a7dd..f75d428c96d0 100644 --- a/lib/librte_ethdev/meson.build +++ b/lib/librte_ethdev/meson.build @@ -26,4 +26,4 @@ headers = files('rte_ethdev.h', 'rte_tm.h', 'rte_tm_driver.h') -deps += ['net', 'kvargs', 'cmdline', 'meter'] +deps += ['net', 'kvargs', 'meter'] diff --git a/lib/librte_ethdev/rte_class_eth.c b/lib/librte_ethdev/rte_class_eth.c index cb99c92ece93..40ca936230c6 100644 --- a/lib/librte_ethdev/rte_class_eth.c +++ b/lib/librte_ethdev/rte_class_eth.c @@ -4,7 +4,6 @@ #include -#include #include #include #include @@ -43,19 +42,13 @@ static int eth_mac_cmp(const char *key __rte_unused, const char *value, void *opaque) { - int ret; struct ether_addr mac; const struct rte_eth_dev_data *data = opaque; struct rte_eth_dev_info dev_info; uint32_t index; /* Parse devargs MAC address. */ - /* - * cannot use ether_aton_r(value, &mac) - * because of include conflict with rte_ether.h - */ - ret = cmdline_parse_etheraddr(NULL, value, &mac, sizeof(mac)); - if (ret < 0) + if (ether_unformat_addr(value, &mac) < 0) return -1; /* invalid devargs value */ /* Return 0 if devargs MAC is matching one of the device MACs. */ From patchwork Thu May 16 18:04:26 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stephen Hemminger X-Patchwork-Id: 53496 Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 28A411B108; Thu, 16 May 2019 20:04:50 +0200 (CEST) Received: from mail-pf1-f195.google.com (mail-pf1-f195.google.com [209.85.210.195]) by dpdk.org (Postfix) with ESMTP id 34C30E3EB for ; Thu, 16 May 2019 20:04:44 +0200 (CEST) Received: by mail-pf1-f195.google.com with SMTP id u17so2243529pfn.7 for ; Thu, 16 May 2019 11:04:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=networkplumber-org.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=1ICmW9YuE04Am3/8hB7X4T/qBkWnZRHwCB74spjpPtI=; b=DMX2KM5noFczZQ16Kq8AdMkUALweR7lAmxjWWWLTwupmVZJ9uE881slTpNQT6g4p14 POgE5itxTYRLVwgDjFImOjLSWO2cPufuDvxatlViE1ojp8xVUYURUBSnv1oijSy2e1iA bzhpcr8N+NSCwK2Zuxm3hPNdAodomHWf/hj/yUcReyek5yTtiMo0Wx7a+cb5RQ+mANAY ZxGUzaZP6iw1px50f7bg0NYNjXxraZ/w9DhgF+GGLR03MfvdaPNUdrwTeRg3yvO8HZHk QP+LpFRJaWNd9N+Nh3rHb+PkCoc3jPtW9Jx8PJb4CCRuRF0kXCzx9ss2k0qKlhwbsoWj SEGQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=1ICmW9YuE04Am3/8hB7X4T/qBkWnZRHwCB74spjpPtI=; b=VconHogzVWmJImWc2vVir2HZz9ocMbybMke8Rep22btJ5Gm1j6mx+cmqlKuBuo+VYk 3EdGrY3kPdyXB6BXAF535PY6NAOSxhfpgbbLIz61J1DcX77WBZLmDmQIuaTfOx/I5CZc oqEOVBvlF0Ktmyr74ALjWSNu+eB7f9CSZxgRT4RtTqq53wKOzKM3CRonO8YrBJT5xltQ E5XnmSZdf6zkVQn0ZwQRVAbcNFRtRG+NbfRH6viz4JkMWTTQkxqAT1AJ53SS7sG2swuB yj1ammKRoUOfKVJ7pEx949x1AMZVizPLDdRLYM8J1yc9Hx/QUuuiTWVKxcU+R/VfogDX tvvA== X-Gm-Message-State: APjAAAUwR6c7viEyOmyq7GXrsa6NvuWaKdnhIgjtFSVpImCGT0DhvGKB dbIjsilm1VaTjo0Q52X3vissUhyCAeA= X-Google-Smtp-Source: APXvYqwtcRrkfQHcvrCtE3r70tXXYISKlkqpk2RnMnGkLlHf8PZY5x+gHVPX1ttoKJkZF/BOnZ7aVw== X-Received: by 2002:a62:582:: with SMTP id 124mr55910928pff.209.1558029882834; Thu, 16 May 2019 11:04:42 -0700 (PDT) Received: from hermes.lan (204-195-22-127.wavecable.com. [204.195.22.127]) by smtp.gmail.com with ESMTPSA id d67sm9376657pfa.35.2019.05.16.11.04.41 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 16 May 2019 11:04:42 -0700 (PDT) From: Stephen Hemminger To: dev@dpdk.org Cc: Stephen Hemminger Date: Thu, 16 May 2019 11:04:26 -0700 Message-Id: <20190516180427.17270-7-stephen@networkplumber.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190516180427.17270-1-stephen@networkplumber.org> References: <20190516180427.17270-1-stephen@networkplumber.org> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v2 6/7] ether: use bitops to speedup comparison 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Using bit operations like or and xor is faster than a loop on all architectures. Really just explicit unrolling. Similar cast to uint16 unaligned is already done in other functions here. Signed-off-by: Stephen Hemminger --- lib/librte_net/rte_ether.h | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/lib/librte_net/rte_ether.h b/lib/librte_net/rte_ether.h index 0fa4481d266b..799996dc7e1b 100644 --- a/lib/librte_net/rte_ether.h +++ b/lib/librte_net/rte_ether.h @@ -79,11 +79,10 @@ struct ether_addr { static inline int is_same_ether_addr(const struct ether_addr *ea1, const struct ether_addr *ea2) { - int i; - for (i = 0; i < ETHER_ADDR_LEN; i++) - if (ea1->addr_bytes[i] != ea2->addr_bytes[i]) - return 0; - return 1; + const uint16_t *w1 = (const uint16_t *)ea1; + const uint16_t *w2 = (const uint16_t *)ea2; + + return ((w1[0] ^ w2[0]) | (w1[1] ^ w2[1]) | (w1[2] ^ w2[2])) == 0; } /** @@ -98,11 +97,9 @@ static inline int is_same_ether_addr(const struct ether_addr *ea1, */ static inline int is_zero_ether_addr(const struct ether_addr *ea) { - int i; - for (i = 0; i < ETHER_ADDR_LEN; i++) - if (ea->addr_bytes[i] != 0x00) - return 0; - return 1; + const uint16_t *w = (const uint16_t *)ea; + + return (w[0] | w[1] | w[2]) == 0; } /** From patchwork Thu May 16 18:04:27 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stephen Hemminger X-Patchwork-Id: 53497 Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 9A6351B114; Thu, 16 May 2019 20:04:51 +0200 (CEST) Received: from mail-pf1-f193.google.com (mail-pf1-f193.google.com [209.85.210.193]) by dpdk.org (Postfix) with ESMTP id A52F1E3EB for ; Thu, 16 May 2019 20:04:44 +0200 (CEST) Received: by mail-pf1-f193.google.com with SMTP id g9so2233451pfo.11 for ; Thu, 16 May 2019 11:04:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=networkplumber-org.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Nb6q/fgxdbKmGAd57UFtM9Hr3OsljJL5p2+aKfTU5Nk=; b=eA+93IlCa9DhE8NfpEv3VqZoA7uVo+AxLsWC1T08u2j8rw7/F1BVnvULFdJ5MdDPLX UeXJvVE2ZWH4ysJSJ9blyEsvpPwbVgRwI9Jzjzy6og9NP5vEh2IkdKUlaqLjVd5hKjf3 rmNbT62qUBbehd5so8Pq4WwNASqAObb43jRAHW78OPdxq4sQLWn5CAZaZTLes+FQtvUt a0WZ8gwy6xIRO/F2DFMGyg8SmCkDJG8VtTZVVogGB1hu/fAA5GjhoR9Ttx48MiIskKqp D7fHtKlYSnz8eUEdxatzVUAXDzyWiZ0Q9Mvvwtd/YtdDuYd9p2r+Q36m4v2msxkN4fG8 kwLQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Nb6q/fgxdbKmGAd57UFtM9Hr3OsljJL5p2+aKfTU5Nk=; b=oiQbRr8XTleyZ8q4OvSZ6HpEDCxWpFpeyHwzeZhBL9Ev+KB+B2qDQCp6Twr9rTeG3g wi1yC5WL9CkX2c9tLJzCGCyle687Bahquf5XHBY2jDxZr50M7QsEFPE8drT4p5u42UXq BKw9bjJU1L+Y4J6rh5A2E+PPmm1Oc6ZacPNV+5e6i+XPiBk28Hn8jyYKiGcTT50Hk7ti /+IWMvN+KTSCSLAk5+RxNXRh5naeV+4UzCLJDKTd/16qjMUy3eJMvk+MB+RGyP+hwdfV 5O5tHfXjKdx6/50bEuOT5utkLQcgE2+nZ/JOX1kQ0zeFKS4XRnDpGQzAtRoLqIvfUI7g RLuQ== X-Gm-Message-State: APjAAAUgB7TLS7UzYFxC8qfX8IoWYhV8xjlBv9cpx8un+1v8o3zc1mCU Lj8BnulvhxWNv7NO+cqdikPih1ApIaE= X-Google-Smtp-Source: APXvYqzombjM+zpb77J9Je+x5HJM/cxGL1hmCK22wcRSgaf2dT/VW/mlpPNqn1rMtddAzLw+iyfL7w== X-Received: by 2002:a62:5f02:: with SMTP id t2mr15525655pfb.7.1558029883581; Thu, 16 May 2019 11:04:43 -0700 (PDT) Received: from hermes.lan (204-195-22-127.wavecable.com. [204.195.22.127]) by smtp.gmail.com with ESMTPSA id d67sm9376657pfa.35.2019.05.16.11.04.42 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 16 May 2019 11:04:43 -0700 (PDT) From: Stephen Hemminger To: dev@dpdk.org Cc: Stephen Hemminger Date: Thu, 16 May 2019 11:04:27 -0700 Message-Id: <20190516180427.17270-8-stephen@networkplumber.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190516180427.17270-1-stephen@networkplumber.org> References: <20190516180427.17270-1-stephen@networkplumber.org> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v2 7/7] cmdline: use ether_unformat_addr 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Now that there is a version of ether_aton in rte_ether, it can be used by the cmdline ethernet address parser. Signed-off-by: Stephen Hemminger --- lib/Makefile | 2 +- lib/librte_cmdline/Makefile | 3 +- lib/librte_cmdline/cmdline_parse_etheraddr.c | 69 ++------------------ lib/librte_cmdline/meson.build | 3 + 4 files changed, 13 insertions(+), 64 deletions(-) diff --git a/lib/Makefile b/lib/Makefile index 82b2c4bfa8ea..cc36fe7591f0 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -20,7 +20,7 @@ DIRS-$(CONFIG_RTE_LIBRTE_TIMER) += librte_timer DEPDIRS-librte_timer := librte_eal DIRS-$(CONFIG_RTE_LIBRTE_CFGFILE) += librte_cfgfile DIRS-$(CONFIG_RTE_LIBRTE_CMDLINE) += librte_cmdline -DEPDIRS-librte_cmdline := librte_eal +DEPDIRS-librte_cmdline := librte_eal librte_net DIRS-$(CONFIG_RTE_LIBRTE_ETHER) += librte_ethdev DEPDIRS-librte_ethdev := librte_net librte_eal librte_mempool librte_ring DEPDIRS-librte_ethdev += librte_mbuf diff --git a/lib/librte_cmdline/Makefile b/lib/librte_cmdline/Makefile index c64142b8d5a0..04057d7c671f 100644 --- a/lib/librte_cmdline/Makefile +++ b/lib/librte_cmdline/Makefile @@ -7,6 +7,7 @@ include $(RTE_SDK)/mk/rte.vars.mk LIB = librte_cmdline.a CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR) -O3 +CFLAGS += -DALLOW_EXPERIMENTAL_API EXPORT_MAP := rte_cmdline_version.map @@ -25,7 +26,7 @@ SRCS-$(CONFIG_RTE_LIBRTE_CMDLINE) += cmdline_vt100.c SRCS-$(CONFIG_RTE_LIBRTE_CMDLINE) += cmdline_socket.c SRCS-$(CONFIG_RTE_LIBRTE_CMDLINE) += cmdline_parse_portlist.c -LDLIBS += -lrte_eal +LDLIBS += -lrte_net -lrte_eal # install includes INCS := cmdline.h cmdline_parse.h cmdline_parse_num.h cmdline_parse_ipaddr.h diff --git a/lib/librte_cmdline/cmdline_parse_etheraddr.c b/lib/librte_cmdline/cmdline_parse_etheraddr.c index 24e04755cd9e..f9ba31b49447 100644 --- a/lib/librte_cmdline/cmdline_parse_etheraddr.c +++ b/lib/librte_cmdline/cmdline_parse_etheraddr.c @@ -12,9 +12,9 @@ #include #include #include -#include #include +#include #include "cmdline_parse.h" #include "cmdline_parse_etheraddr.h" @@ -26,67 +26,13 @@ struct cmdline_token_ops cmdline_token_etheraddr_ops = { .get_help = cmdline_get_help_etheraddr, }; -/* the format can be either XX:XX:XX:XX:XX:XX or XXXX:XXXX:XXXX */ -#define ETHER_ADDRSTRLENLONG 18 -#define ETHER_ADDRSTRLENSHORT 15 - -#ifdef __linux__ -#define ea_oct ether_addr_octet -#else -#define ea_oct octet -#endif - - -static struct ether_addr * -my_ether_aton(const char *a) -{ - int i; - char *end; - unsigned long o[ETHER_ADDR_LEN]; - static struct ether_addr ether_addr; - - i = 0; - do { - errno = 0; - o[i] = strtoul(a, &end, 16); - if (errno != 0 || end == a || (end[0] != ':' && end[0] != 0)) - return NULL; - a = end + 1; - } while (++i != sizeof (o) / sizeof (o[0]) && end[0] != 0); - - /* Junk at the end of line */ - if (end[0] != 0) - return NULL; - - /* Support the format XX:XX:XX:XX:XX:XX */ - if (i == ETHER_ADDR_LEN) { - while (i-- != 0) { - if (o[i] > UINT8_MAX) - return NULL; - ether_addr.ea_oct[i] = (uint8_t)o[i]; - } - /* Support the format XXXX:XXXX:XXXX */ - } else if (i == ETHER_ADDR_LEN / 2) { - while (i-- != 0) { - if (o[i] > UINT16_MAX) - return NULL; - ether_addr.ea_oct[i * 2] = (uint8_t)(o[i] >> 8); - ether_addr.ea_oct[i * 2 + 1] = (uint8_t)(o[i] & 0xff); - } - /* unknown format */ - } else - return NULL; - - return (struct ether_addr *)ðer_addr; -} - int cmdline_parse_etheraddr(__attribute__((unused)) cmdline_parse_token_hdr_t *tk, const char *buf, void *res, unsigned ressize) { unsigned int token_len = 0; - char ether_str[ETHER_ADDRSTRLENLONG+1]; - struct ether_addr *tmp; + char ether_str[ETHER_ADDR_FMT_SIZE]; + struct ether_addr tmp; if (res && ressize < sizeof(struct ether_addr)) return -1; @@ -98,17 +44,16 @@ cmdline_parse_etheraddr(__attribute__((unused)) cmdline_parse_token_hdr_t *tk, token_len++; /* if token doesn't match possible string lengths... */ - if ((token_len != ETHER_ADDRSTRLENLONG - 1) && - (token_len != ETHER_ADDRSTRLENSHORT - 1)) + if (token_len >= ETHER_ADDR_FMT_SIZE) return -1; strlcpy(ether_str, buf, token_len + 1); - tmp = my_ether_aton(ether_str); - if (tmp == NULL) + if (ether_unformat_addr(ether_str, &tmp) < 0) return -1; + if (res) - memcpy(res, tmp, sizeof(struct ether_addr)); + memcpy(res, &tmp, sizeof(struct ether_addr)); return token_len; } diff --git a/lib/librte_cmdline/meson.build b/lib/librte_cmdline/meson.build index 0fa61385fccf..c01033fd796f 100644 --- a/lib/librte_cmdline/meson.build +++ b/lib/librte_cmdline/meson.build @@ -4,6 +4,8 @@ # This library is processed before EAL includes = [global_inc] +cflags += '-DALLOW_EXPERIMENTAL_API' + version = 2 sources = files('cmdline.c', 'cmdline_cirbuf.c', @@ -28,3 +30,4 @@ headers = files('cmdline.h', 'cmdline_socket.h', 'cmdline_cirbuf.h', 'cmdline_parse_portlist.h') +deps += ['net']