From patchwork Wed Jun 5 18:09:41 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stephen Hemminger X-Patchwork-Id: 54425 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 2135D1B9AB; Wed, 5 Jun 2019 20:09:56 +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 A60B11B96E for ; Wed, 5 Jun 2019 20:09:53 +0200 (CEST) Received: by mail-pf1-f195.google.com with SMTP id y11so15268718pfm.13 for ; Wed, 05 Jun 2019 11:09:53 -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=j/c+ewlm2tKY5YTeBCf1pQHycxEMdrRChnVoFr1WJtg=; b=LmJe3l0GAcv/AhStzNJfs/KezS8MgEz5lW1IGfwJ5mJbGU5T7Yy6RgJDRAIo3MGM5G 4zeJQURkpnoyas7zzwYuJtfVRgQ4423WSRRO1Fut6u1D9+Q0SMqQTJdItRAz2SJ9OtEC dujrmn99Xr2McYyj04B9YKr12b8nihYWtBXjAcxn+crq2i5qUa98gHMdqCOgZBfBNEs7 ghjlTj4bty3HVWzFgkbVcEw1uFw1hQajlhIaFIRH/fCDW9OwmMe/SqUXoI3Xiig4VONa OWLPa+hsxgX2uddDjnQNWZUj8SxGAhsSSGLdQDq1vy0XMR1SrB3XyaVXaVvH+P+8gnAQ jjLQ== 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=j/c+ewlm2tKY5YTeBCf1pQHycxEMdrRChnVoFr1WJtg=; b=UP0UkcBRyHLgEHh8JhTP/VUAOrtT9tKzzDXHd9N1+aSvbxqnpLLmDuH36MhT9525aG vPzfEJLxo63XLyP9rqWAKgGDIQnaOE5/81PEVZZNqdlrs7QwN6L5eExI02Hv+quWJCg3 wvoI7Erg8lkQFIT0jDYjwXlGtcVycz9gtjyfDBCP6YDt8byX/Q+COsYkAkhDwA2sSTSp 6GtxcG8T126DUoG/fFFARQ8pgutG1LmwYcu1zG3mvfnCxqGL8NT/YtkQlfuUHzYfAK2T IPOMdj8D5Cdt+IIAFnobjpUKlqd1CYhKZjGfYm3R/y46G+myKx28DwMb7LIV2ZmnMOtX G0WQ== X-Gm-Message-State: APjAAAX26mtVFbruCagM7m/jQ+qFZOiTtdrI1ZK4Es44XSh60eo01qLQ rL7JlVAgFGLbchO8DI1NkCH4RMmwDHY= X-Google-Smtp-Source: APXvYqwNuuDzm09oxQ5xMmiqYhW5Ayan1gpoE6NqqMFveHSQeDtKwXRB4EuEuglc4jcwgmJnePSs4w== X-Received: by 2002:a63:6685:: with SMTP id a127mr27971pgc.22.1559758192421; Wed, 05 Jun 2019 11:09:52 -0700 (PDT) Received: from hermes.lan (204-195-22-127.wavecable.com. [204.195.22.127]) by smtp.gmail.com with ESMTPSA id a7sm19081888pgj.42.2019.06.05.11.09.50 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 05 Jun 2019 11:09:51 -0700 (PDT) From: Stephen Hemminger To: dev@dpdk.org Cc: Stephen Hemminger , Rami Rosen , Andrew Rybchenko Date: Wed, 5 Jun 2019 11:09:41 -0700 Message-Id: <20190605180948.22414-2-stephen@networkplumber.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190605180948.22414-1-stephen@networkplumber.org> References: <20190516180427.17270-1-stephen@networkplumber.org> <20190605180948.22414-1-stephen@networkplumber.org> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v4 1/8] net/rte_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 Reviewed-by: Andrew Rybchenko Reviewed-by: Maxime Coquelin --- lib/librte_net/Makefile | 1 + lib/librte_net/meson.build | 2 +- lib/librte_net/rte_ether.c | 29 +++++++++++++++++++++++++++++ lib/librte_net/rte_ether.h | 25 ++++--------------------- lib/librte_net/rte_net_version.map | 7 +++++++ 5 files changed, 42 insertions(+), 22 deletions(-) create mode 100644 lib/librte_net/rte_ether.c diff --git a/lib/librte_net/Makefile b/lib/librte_net/Makefile index c3082069ab50..1244c9fd54c9 100644 --- a/lib/librte_net/Makefile +++ b/lib/librte_net/Makefile @@ -14,6 +14,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_ether.c SRCS-$(CONFIG_RTE_LIBRTE_NET) += rte_arp.c # install includes diff --git a/lib/librte_net/meson.build b/lib/librte_net/meson.build index 7d66f693cbf3..868a93fd6b6b 100644 --- a/lib/librte_net/meson.build +++ b/lib/librte_net/meson.build @@ -16,5 +16,5 @@ headers = files('rte_ip.h', 'rte_net_crc.h', 'rte_mpls.h') -sources = files('rte_arp.c', 'rte_net.c', 'rte_net_crc.c') +sources = files('rte_arp.c', 'rte_ether.c', 'rte_net.c', 'rte_net_crc.c') deps += ['mbuf'] diff --git a/lib/librte_net/rte_ether.c b/lib/librte_net/rte_ether.c new file mode 100644 index 000000000000..974fe815b335 --- /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 +rte_eth_random_addr(uint8_t *addr) +{ + uint64_t rand = rte_rand(); + uint8_t *p = (uint8_t *)&rand; + + rte_memcpy(addr, p, RTE_ETHER_ADDR_LEN); + addr[0] &= (uint8_t)~RTE_ETHER_GROUP_ADDR; /* clear multicast bit */ + addr[0] |= RTE_ETHER_LOCAL_ADMIN_ADDR; /* set local assignment bit */ +} + +void +rte_ether_format_addr(char *buf, uint16_t size, + const struct rte_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 7be9b4890af7..3caae0d98f6d 100644 --- a/lib/librte_net/rte_ether.h +++ b/lib/librte_net/rte_ether.h @@ -207,15 +207,8 @@ static inline int rte_is_valid_assigned_ether_addr(const struct rte_ether_addr * * @param addr * A pointer to Ethernet address. */ -static inline void rte_eth_random_addr(uint8_t *addr) -{ - uint64_t rand = rte_rand(); - uint8_t *p = (uint8_t *)&rand; - - rte_memcpy(addr, p, RTE_ETHER_ADDR_LEN); - addr[0] &= (uint8_t)~RTE_ETHER_GROUP_ADDR; /* clear multicast bit */ - addr[0] |= RTE_ETHER_LOCAL_ADMIN_ADDR; /* set local assignment bit */ -} +void +rte_eth_random_addr(uint8_t *addr); /** * Fast copy an Ethernet address. @@ -254,19 +247,9 @@ static inline void rte_ether_addr_copy(const struct rte_ether_addr *ea_from, * @param eth_addr * A pointer to a ether_addr structure. */ -static inline void +void rte_ether_format_addr(char *buf, uint16_t size, - const struct rte_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 rte_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 26c06e7c7ae7..f1e1b84ab491 100644 --- a/lib/librte_net/rte_net_version.map +++ b/lib/librte_net/rte_net_version.map @@ -13,6 +13,13 @@ DPDK_17.05 { } DPDK_16.11; +DPDK_19.08 { + global: + + rte_eth_random_addr; + rte_ether_format_addr; +} DPDK_17.05; + EXPERIMENTAL { global: From patchwork Wed Jun 5 18:09:42 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stephen Hemminger X-Patchwork-Id: 54426 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 3A3DB1B9B7; Wed, 5 Jun 2019 20:09:58 +0200 (CEST) Received: from mail-pg1-f174.google.com (mail-pg1-f174.google.com [209.85.215.174]) by dpdk.org (Postfix) with ESMTP id D0A1B1B9A6 for ; Wed, 5 Jun 2019 20:09:54 +0200 (CEST) Received: by mail-pg1-f174.google.com with SMTP id 196so12838157pgc.6 for ; Wed, 05 Jun 2019 11:09:54 -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=HT7fgvqo3DxGVdfkCgxmfvm3m5YXMqttimfnKXT3DRU=; b=x6ZwWYoLjDiPQPEVrplfB5l7oW3Llcav5aaoc29oLZCwVrTs1ubY/m2gF/mY2SAKTD 1yhuhw8cmkWdz299HE1vpKm2Cc7/ZgtJEG1iqh/e3LgzAvsF3yn+iRqAjv9N6RgrvQle 8crs5KJbnHfRu9YeUW5AjqPc5bOQQWK619doBWHm6046dYmn0Qm/EySk7rQyljbmLV0F wdSl0Qx07UspiaSAiG4WeRK8VX273UTf8pVYfdvcbNBzR48+l0Nmj2NH9SmIIS6oIodV v+pfXI01JxmqKPchC1ZewDo/zEukeFggMW7QIZ7e2TjZL79H99sU4i0oSBHrPDpC3uGs xbKA== 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=HT7fgvqo3DxGVdfkCgxmfvm3m5YXMqttimfnKXT3DRU=; b=DYGyQYaXX6rNx8LEmaHFOKYvJwqvMBbF5Vo+C2GSIT9QdzVK0IhLHJGvA5gaW4L1N1 wwopAXaJEZ0lIFY9roFQkLjhYWlZmndz5YV06pLGVBKv5mUCOfj9JIgP8OHszC4ktSD2 e8vZlztmOX9bO5ZssOUx7skT6DCkvkLHnmSNLLhk5H0LCxfA833a427/njPaPPdkQ09X GjvMHveKl3ePL+RD7HxrkPHEIDyNoyYv4eqo1Q7Ln0cdPggX6WwmERnlFFcb/dFfJ8JS Ksm1ZgLu0tFaNz0Re0qF5Oy+y1sTVZ5peST5EMas9NBqSPdnOZZQjYyEYcmczRAqsI4h 7Vyg== X-Gm-Message-State: APjAAAWh/9Nsji991Ir0ulvT+x/zNKtOLF9EBzt6/vZuoWjQ4DufwI15 dmLd2vOXQF1FWgUVAokjYGoNUK6jquk= X-Google-Smtp-Source: APXvYqwfA0SvedLftN6uwBYhcbV2ZpCW8odASMdQ771zdE5q0e8WvQN/2UR6zcfHnGrhUd4ra/CF7g== X-Received: by 2002:a62:e511:: with SMTP id n17mr41663512pff.181.1559758193717; Wed, 05 Jun 2019 11:09:53 -0700 (PDT) Received: from hermes.lan (204-195-22-127.wavecable.com. [204.195.22.127]) by smtp.gmail.com with ESMTPSA id a7sm19081888pgj.42.2019.06.05.11.09.52 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 05 Jun 2019 11:09:52 -0700 (PDT) From: Stephen Hemminger To: dev@dpdk.org Cc: Stephen Hemminger , Andrew Rybchenko Date: Wed, 5 Jun 2019 11:09:42 -0700 Message-Id: <20190605180948.22414-3-stephen@networkplumber.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190605180948.22414-1-stephen@networkplumber.org> References: <20190516180427.17270-1-stephen@networkplumber.org> <20190605180948.22414-1-stephen@networkplumber.org> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v4 2/8] net/ether: add rte_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 can be used in place of eth_aton_r to convert a string to rte_ether_addr. This function allows both byte (xx:xx:xx:xx:xx:xx) and word (XXXX:XXXX:XXXX) format and has the same lack of error handling as the original. This also allows ethdev to no longer have a hard dependency on the cmdline library. Signed-off-by: Stephen Hemminger Reviewed-by: Andrew Rybchenko --- lib/librte_net/rte_ether.c | 47 ++++++++++++++++++++++++++++++ lib/librte_net/rte_ether.h | 14 +++++++++ lib/librte_net/rte_net_version.map | 1 + 3 files changed, 62 insertions(+) diff --git a/lib/librte_net/rte_ether.c b/lib/librte_net/rte_ether.c index 974fe815b335..acc8a0e938c5 100644 --- a/lib/librte_net/rte_ether.c +++ b/lib/librte_net/rte_ether.c @@ -27,3 +27,50 @@ rte_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 +rte_ether_unformat_addr(const char *s, struct rte_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 3caae0d98f6d..8edc7e217b25 100644 --- a/lib/librte_net/rte_ether.h +++ b/lib/librte_net/rte_ether.h @@ -250,6 +250,20 @@ static inline void rte_ether_addr_copy(const struct rte_ether_addr *ea_from, void rte_ether_format_addr(char *buf, uint16_t size, const struct rte_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 +rte_ether_unformat_addr(const char *str, struct rte_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 f1e1b84ab491..f4c915069d57 100644 --- a/lib/librte_net/rte_net_version.map +++ b/lib/librte_net/rte_net_version.map @@ -25,4 +25,5 @@ EXPERIMENTAL { rte_net_make_rarp_packet; rte_net_skip_ip6_ext; + rte_ether_unformat_addr; }; From patchwork Wed Jun 5 18:09:43 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stephen Hemminger X-Patchwork-Id: 54427 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 130AA1B9BD; Wed, 5 Jun 2019 20:10:00 +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 28FF71B9AE for ; Wed, 5 Jun 2019 20:09:56 +0200 (CEST) Received: by mail-pf1-f195.google.com with SMTP id u22so15299968pfm.3 for ; Wed, 05 Jun 2019 11:09:56 -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=LJP5NUGKYyva7BnvgS/UxCqLM/1j8w47JpFJi1u1tNU=; b=rYVH4Cf8umwngtqXAmn6Q6jQKgn5Bb6wmthwfvKDBPurCPTyazy/thyOAmm3AXmMy6 7ofLDkUEIAeCMcagobmOPGF/stEbweUvAzqgXEPDKOa9QmzJjDDyR2OZCn8ECPC2WdHH +lpVlQFPXJ51XPiLo+3GQ7WcRyxiL7EVGVKsNnLGvwS8GN3HKOrGXeL1D8LmzdrOWQb3 B2ywGQG7Nbzo3reFKvxTVCwxjeJgcr6eygE94XCijlaFDo/Pcmm3SzExZ6QmutuwDR5+ FWz8MrTiQFL46D1nL2E+1PwJWK1EfSu6+WsoiW9f5WFcESNYbYV1UF7NXmlI8M/5rsGs 7+eg== 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=LJP5NUGKYyva7BnvgS/UxCqLM/1j8w47JpFJi1u1tNU=; b=LrCj6KNDLJweFHTpjSYdNGZbvMqeGwaZi0kMexhA0z8XhyelPr858mNbhFNxmkDYjx Blh6nzmaKQOQrgbn3NBMo55oGokjF1tdCUEzWmNCSxqnGGNu8wbMhQ/TfquwHvnHCHGD 9CFW7Ox0kscUjc1Wae/BIUrC5uOnEpjyY9YzszRIp6T2AWTj4m1RYEqpVHeK+v6/bjJw lqCgA6uLbkZu9l/oN1YAWa6caUN8bXV+RegkLpFYR0KSNH7xjYdMKGsHUujcB4JAce19 lGvMuGh7TFtqMq0cuQAsB4WDtB+6f/nkGqXIBWHJqAxOZEtAf56iLioKIzB8pmG6BB6X PXGA== X-Gm-Message-State: APjAAAUZe/C3IxJi3b4zOHctSRKj2yNItG3kuLk/MY1gv6hNbTJ8rmiH nCPWqd8y2FBdpbIdX7dynGMwiOjl/is= X-Google-Smtp-Source: APXvYqyw09IEFqu6ZB2o38tyJtCA2X0YsMgtPo2dyZRLcYIgwquWPZDIi5dEHlzJgbv1PXfX4o9dsw== X-Received: by 2002:a65:4b88:: with SMTP id t8mr6544282pgq.374.1559758195076; Wed, 05 Jun 2019 11:09:55 -0700 (PDT) Received: from hermes.lan (204-195-22-127.wavecable.com. [204.195.22.127]) by smtp.gmail.com with ESMTPSA id a7sm19081888pgj.42.2019.06.05.11.09.53 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 05 Jun 2019 11:09:53 -0700 (PDT) From: Stephen Hemminger To: dev@dpdk.org Cc: Stephen Hemminger Date: Wed, 5 Jun 2019 11:09:43 -0700 Message-Id: <20190605180948.22414-4-stephen@networkplumber.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190605180948.22414-1-stephen@networkplumber.org> References: <20190516180427.17270-1-stephen@networkplumber.org> <20190605180948.22414-1-stephen@networkplumber.org> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v4 3/8] ethdev: use rte_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 rte_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 873a653532ad..6338355e2557 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 rte_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 (rte_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 Wed Jun 5 18:09:44 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stephen Hemminger X-Patchwork-Id: 54428 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 341BD1B9CC; Wed, 5 Jun 2019 20:10:02 +0200 (CEST) Received: from mail-pg1-f196.google.com (mail-pg1-f196.google.com [209.85.215.196]) by dpdk.org (Postfix) with ESMTP id 89A861B9B1 for ; Wed, 5 Jun 2019 20:09:57 +0200 (CEST) Received: by mail-pg1-f196.google.com with SMTP id 196so12838215pgc.6 for ; Wed, 05 Jun 2019 11:09:57 -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=8fFcBaPZKjQQPsKQQeFeSAG72mshjjR9mGZfTCJM/8s=; b=LgWCBk+CmM8yaiNrkPlToltHnZRe7RVYPwzwwksgZ0QrygDFw1VhmUS9jf/qx8Hnqh VWSPw5PYTxk+UyL8TwKlYQiAHbe2yT8VqSntM0ECuM1IeZUxNnXXC71StU6g4O9CwTVv anLBGHF5+2F1A+/69ccROmV149kiNd+KUWkIhifwF8BMUmsqvcTHYilGwkqNXaBwgKm6 LGRgI7fUCujNS91LMJejNb4uB7+KQidakVCnftzXFinpxe94ygPacAYirLxwPs6zP8fc KYj9S2EJB4q/g1gxsviOUt/onozLWvpQS3PZBGUyTa6LUiU6LFXoe3G4nMppVUABPquD a1Sw== 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=8fFcBaPZKjQQPsKQQeFeSAG72mshjjR9mGZfTCJM/8s=; b=Gi1KFwXOp+o+BAOFSWNbdlc6ebE+V6n0qbO7yPeH2IyeUmBb/Qd2gkC5zKqImfVpmw tDzdhQTmZ/Uj4pqxOBumNBN1BLlbBPdLeML3K0Te+bKkVEkFmiN5S4YNNoBmnSDcKPBx xb5u3aFK3Z8Y71kYtGlKQyKmPMp9Lt98GTnau+7Brr4WqeGcFhZrG/S9hfyAH2RXkOVp feJFp8apu+pE/j0Gvlhr3/o5LiB9ZwJ6g/idJvRn4nJ01NMW8FvtPKlpN3lCZPjJ5K8l xH6fZTi9Y69ynWTPYKdk4zY6j+Zmk80TdEzZ2UHFBQKUz1KRdDxFORIIsXDbVryPrUN6 nL1A== X-Gm-Message-State: APjAAAUkuAP8Wr0MsMWprYPd5bpYLUADqNOd/wepHdxSpcqYOeLYFdW8 bJOHOdxrURKtWk8PjemMW70sxat0/O0= X-Google-Smtp-Source: APXvYqybI2/9FPZMXyLAwScy6moHPB9T6Ha4YI/P+5mGCNaQpQ+B9Qn5twjWn3c5u3j7oIJ4YuL6hw== X-Received: by 2002:a62:6454:: with SMTP id y81mr10566137pfb.13.1559758196517; Wed, 05 Jun 2019 11:09:56 -0700 (PDT) Received: from hermes.lan (204-195-22-127.wavecable.com. [204.195.22.127]) by smtp.gmail.com with ESMTPSA id a7sm19081888pgj.42.2019.06.05.11.09.55 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 05 Jun 2019 11:09:55 -0700 (PDT) From: Stephen Hemminger To: dev@dpdk.org Cc: Stephen Hemminger , Andrew Rybchenko Date: Wed, 5 Jun 2019 11:09:44 -0700 Message-Id: <20190605180948.22414-5-stephen@networkplumber.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190605180948.22414-1-stephen@networkplumber.org> References: <20190516180427.17270-1-stephen@networkplumber.org> <20190605180948.22414-1-stephen@networkplumber.org> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v4 4/8] net/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 Reviewed-by: Andrew Rybchenko --- 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 8edc7e217b25..feb35a33c94b 100644 --- a/lib/librte_net/rte_ether.h +++ b/lib/librte_net/rte_ether.h @@ -81,11 +81,10 @@ struct rte_ether_addr { static inline int rte_is_same_ether_addr(const struct rte_ether_addr *ea1, const struct rte_ether_addr *ea2) { - int i; - for (i = 0; i < RTE_ETHER_ADDR_LEN; i++) - if (ea1->addr_bytes[i] != ea2->addr_bytes[i]) - return 0; - return 1; + const unaligned_uint16_t *w1 = (const uint16_t *)ea1; + const unaligned_uint16_t *w2 = (const uint16_t *)ea2; + + return ((w1[0] ^ w2[0]) | (w1[1] ^ w2[1]) | (w1[2] ^ w2[2])) == 0; } /** @@ -100,11 +99,9 @@ static inline int rte_is_same_ether_addr(const struct rte_ether_addr *ea1, */ static inline int rte_is_zero_ether_addr(const struct rte_ether_addr *ea) { - int i; - for (i = 0; i < RTE_ETHER_ADDR_LEN; i++) - if (ea->addr_bytes[i] != 0x00) - return 0; - return 1; + const unaligned_uint16_t *w = (const uint16_t *)ea; + + return (w[0] | w[1] | w[2]) == 0; } /** From patchwork Wed Jun 5 18:09:45 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Stephen Hemminger X-Patchwork-Id: 54429 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 8A4011B9D5; Wed, 5 Jun 2019 20:10:04 +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 706431B9BB for ; Wed, 5 Jun 2019 20:09:59 +0200 (CEST) Received: by mail-pf1-f193.google.com with SMTP id a186so14590394pfa.5 for ; Wed, 05 Jun 2019 11:09:59 -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=5jmpHlnhidg0ShQ7XItCpgaXpVK1xXtowoDpbYktXUk=; b=XadfSMOizEdSDgaqiHAT8iH8ENYyMvZq9NMxBxgaSUglWCR6SJXOPL1HlXsgzeGPZo hyfc3q0SGOz10hsHveX/mhh3O0J8I2qZ8wzgf5viQ0Rs0oLagYn+0kalRiKyh5cfVuAz URkZjTcdvEwqHuxH3FF9Vo+4dom2pxikDbdMxo96likOdphKWMDjNlhtgIvxpC6Ls7TV KzvH2j/xFF46zt34GUVSihEYA/GUgZb4ud9ko6AWhAi43QtnHtjZH6WfmG9XC+Ht0FE2 QmRz9n3WBog3SnNKyWXWQtVtEtjjUO67cLh2QWZnP4UBRSHL2DYLuwlBdMlP7kRpkZ12 fMmA== 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=5jmpHlnhidg0ShQ7XItCpgaXpVK1xXtowoDpbYktXUk=; b=DtA5zx3mtx3hhqVuowUkT+61TBIcJpOtE8rZo04Mh+I9eH5zt7i6Rs5pPqe8HBXjP4 s/nyNjHK+DOs26vd+aP2KzkFG/PcLfGqGwWoUuCZqwWvTdwFLRrMqL7tWBJ/NsO6C84i uVaGSlFCSLulODChk8yD145p5EB/IRwLeAV16eDgwJRzoyt8iGTn8lzq7boajohfrWHu QNeYEGmOT8wtjbKrkXz6Mkw2203LZxsBLrcjxq/S/G+o7/FBqfCs8pPJIbtKNdWdGASD v8k75iyPWtNSpppdkb1O6GXHmkcuzhzfwQIr7cLkrJIw91cWyHwRc4gDnhCb3IcbjQId fWBQ== X-Gm-Message-State: APjAAAW6WuuJDYpMtER2l04povpZ+hOUrXy/lNG/rhh3NwYxZV5Axf+M hG1h5tLwkKXdJXpEP0WlRUYkU6N5Ndo= X-Google-Smtp-Source: APXvYqzxxeHi2d1blocFiU2ylXXXz4WW9B8hZLOlUzGHqdTPkqVToSYmcyoKdFQjPdS1DdlxeHb+Bg== X-Received: by 2002:a63:c744:: with SMTP id v4mr6290398pgg.370.1559758197893; Wed, 05 Jun 2019 11:09:57 -0700 (PDT) Received: from hermes.lan (204-195-22-127.wavecable.com. [204.195.22.127]) by smtp.gmail.com with ESMTPSA id a7sm19081888pgj.42.2019.06.05.11.09.56 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 05 Jun 2019 11:09:57 -0700 (PDT) From: Stephen Hemminger To: dev@dpdk.org Cc: Bruce Richardson , Stephen Hemminger , Andrew Rybchenko Date: Wed, 5 Jun 2019 11:09:45 -0700 Message-Id: <20190605180948.22414-6-stephen@networkplumber.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190605180948.22414-1-stephen@networkplumber.org> References: <20190516180427.17270-1-stephen@networkplumber.org> <20190605180948.22414-1-stephen@networkplumber.org> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v4 5/8] net/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 Reviewed-by: Andrew Rybchenko --- lib/librte_net/rte_ether.h | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/lib/librte_net/rte_ether.h b/lib/librte_net/rte_ether.h index feb35a33c94b..d7b76ddf63eb 100644 --- a/lib/librte_net/rte_ether.h +++ b/lib/librte_net/rte_ether.h @@ -58,7 +58,8 @@ extern "C" { * See http://standards.ieee.org/regauth/groupmac/tutorial.html */ struct rte_ether_addr { - uint8_t addr_bytes[RTE_ETHER_ADDR_LEN]; /**< Addr bytes in tx order */ + uint8_t addr_bytes[RTE_ETHER_ADDR_LEN] __rte_aligned(2); + /**< Addr bytes in tx order */ } __attribute__((__packed__)); #define RTE_ETHER_LOCAL_ADMIN_ADDR 0x02 /**< Locally assigned Eth. address. */ @@ -81,8 +82,8 @@ struct rte_ether_addr { static inline int rte_is_same_ether_addr(const struct rte_ether_addr *ea1, const struct rte_ether_addr *ea2) { - const unaligned_uint16_t *w1 = (const uint16_t *)ea1; - const unaligned_uint16_t *w2 = (const uint16_t *)ea2; + 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; } @@ -99,7 +100,7 @@ static inline int rte_is_same_ether_addr(const struct rte_ether_addr *ea1, */ static inline int rte_is_zero_ether_addr(const struct rte_ether_addr *ea) { - const unaligned_uint16_t *w = (const uint16_t *)ea; + const uint16_t *w = (const uint16_t *)ea; return (w[0] | w[1] | w[2]) == 0; } @@ -146,7 +147,7 @@ static inline int rte_is_multicast_ether_addr(const struct rte_ether_addr *ea) */ static inline int rte_is_broadcast_ether_addr(const struct rte_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 Wed Jun 5 18:09:46 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stephen Hemminger X-Patchwork-Id: 54430 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 4BC101B9DF; Wed, 5 Jun 2019 20:10:06 +0200 (CEST) Received: from mail-pl1-f194.google.com (mail-pl1-f194.google.com [209.85.214.194]) by dpdk.org (Postfix) with ESMTP id C77511B9C1 for ; Wed, 5 Jun 2019 20:10:00 +0200 (CEST) Received: by mail-pl1-f194.google.com with SMTP id s24so9837537plr.8 for ; Wed, 05 Jun 2019 11:10:00 -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=RgUUuxMckAV5y0zFZFrtB+KkjwKo7Fjy96+Uqx7Le3U=; b=IdFfX8k1/qGT80LiJWtpG4pavgQifjui+9p3wd+7ryaicm7QPMmm6w19Zs1Om8amk2 pnW7XVZgrAlKqqN255P9G/4VQ5JE9h2S7/YEJ5wgBw9MCKfDE8LaHmAqcyrl7tys/YcL k5tOQH/NuebrwGgamps/ijKJhSuybki7QOAKeqUMT/VWb2SjcrypurLnP/9kDsTRopHt elyA6EhqJqksGotPkwp1w4JFjthfKoyQinlctiV2ew0aIxghq8BB0HB2Zo3zT+oidBME /6ydwGI7+Zxfp32xrTFZ1I/V09KRTqKSPPR/kNiUe6v9sYK+aFqnjqUx/m/B/YDKokeI C7Aw== 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=RgUUuxMckAV5y0zFZFrtB+KkjwKo7Fjy96+Uqx7Le3U=; b=MGf3Bw+b6vmoN4YwiENfo/gzOWKsNv20vQkASlSGQOvRZtoXMxRlrNEkR08mfJmczR uNcFkCFx4OxItmb4jPHYP4EFkKfjH0n9xS50XU8KL5EdmW6cDXP4bCI2ZfIBCzT2Wju/ xPHGYUVwGtF8D42/+qu5swd2eeIQJY+eenUM6bBXpCzsOFCZY6iHVZnDesNe1kHtCzWW e1sdYUOLom2pi0KKJWPE8TEMg1ZyPYHIxs/Lgm6PLNKdn5rD0xCcOrGr7tPLHdLE/gf8 p7PKYkemJpEg3P/9rcODd3hBLz2z8x+gyVIiqklQChQd2VYC3jrmsDNlYZoSy738qPL3 SOkw== X-Gm-Message-State: APjAAAXCVLfE1uSdUNVwMTPI6v/ENtGnYeNYbRemjMfKIEe+60g6LSer bi8BQhnJkpK2TB2IGEDUeqN+VYFO55Y= X-Google-Smtp-Source: APXvYqxwwaaD1F/p0V4BxTpjNC3+xsCzf61nGLHDbDYbCBs3YITZKgU6G9pn94z38c+HZr0IrEAgBA== X-Received: by 2002:a17:902:8f87:: with SMTP id z7mr19678261plo.65.1559758199683; Wed, 05 Jun 2019 11:09:59 -0700 (PDT) Received: from hermes.lan (204-195-22-127.wavecable.com. [204.195.22.127]) by smtp.gmail.com with ESMTPSA id a7sm19081888pgj.42.2019.06.05.11.09.57 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 05 Jun 2019 11:09:58 -0700 (PDT) From: Stephen Hemminger To: dev@dpdk.org Cc: Stephen Hemminger Date: Wed, 5 Jun 2019 11:09:46 -0700 Message-Id: <20190605180948.22414-7-stephen@networkplumber.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190605180948.22414-1-stephen@networkplumber.org> References: <20190516180427.17270-1-stephen@networkplumber.org> <20190605180948.22414-1-stephen@networkplumber.org> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v4 6/8] cmdline: use rte_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. Note: ether_aton_r can not be used in cmdline because the old code would accept either bytes XX:XX:XX:XX:XX:XX or words XXXX:XXXX:XXXX and we need to keep compatiablity. Signed-off-by: Stephen Hemminger --- lib/Makefile | 2 +- lib/librte_cmdline/Makefile | 3 +- lib/librte_cmdline/cmdline_parse_etheraddr.c | 71 +++----------------- lib/librte_cmdline/meson.build | 6 +- lib/meson.build | 2 +- 5 files changed, 15 insertions(+), 69 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..2cb8dd2a1267 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,69 +26,15 @@ 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[RTE_ETHER_ADDR_FMT_SIZE]; + struct rte_ether_addr tmp; - if (res && ressize < sizeof(struct ether_addr)) + if (res && ressize < sizeof(tmp)) return -1; if (!buf || ! *buf) @@ -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 >= RTE_ETHER_ADDR_FMT_SIZE) return -1; strlcpy(ether_str, buf, token_len + 1); - tmp = my_ether_aton(ether_str); - if (tmp == NULL) + if (rte_ether_unformat_addr(ether_str, &tmp) < 0) return -1; + if (res) - memcpy(res, tmp, sizeof(struct ether_addr)); + memcpy(res, &tmp, sizeof(tmp)); return token_len; } diff --git a/lib/librte_cmdline/meson.build b/lib/librte_cmdline/meson.build index 0fa61385fccf..07334c1b0956 100644 --- a/lib/librte_cmdline/meson.build +++ b/lib/librte_cmdline/meson.build @@ -1,10 +1,8 @@ # SPDX-License-Identifier: BSD-3-Clause # Copyright(c) 2017 Intel Corporation -# This library is processed before EAL -includes = [global_inc] - version = 2 +allow_experimental_apis = true sources = files('cmdline.c', 'cmdline_cirbuf.c', 'cmdline_parse.c', @@ -28,3 +26,5 @@ headers = files('cmdline.h', 'cmdline_socket.h', 'cmdline_cirbuf.h', 'cmdline_parse_portlist.h') + +deps += ['net'] diff --git a/lib/meson.build b/lib/meson.build index e067ce5ea349..fc57fec1908a 100644 --- a/lib/meson.build +++ b/lib/meson.build @@ -11,8 +11,8 @@ libraries = [ 'kvargs', # eal depends on kvargs 'eal', # everything depends on eal - 'cmdline', # ethdev depends on cmdline for parsing functions 'ring', 'mempool', 'mbuf', 'net', 'meter', 'ethdev', 'pci', # core + 'cmdline', 'metrics', # bitrate/latency stats depends on this 'hash', # efd depends on this 'timer', # eventdev depends on this From patchwork Wed Jun 5 18:09:47 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stephen Hemminger X-Patchwork-Id: 54431 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 B553F1B9E5; Wed, 5 Jun 2019 20:10:07 +0200 (CEST) Received: from mail-pl1-f194.google.com (mail-pl1-f194.google.com [209.85.214.194]) by dpdk.org (Postfix) with ESMTP id 0E5181B9C8 for ; Wed, 5 Jun 2019 20:10:02 +0200 (CEST) Received: by mail-pl1-f194.google.com with SMTP id g9so9978245plm.6 for ; Wed, 05 Jun 2019 11:10:01 -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=i8sEf2BqVxRRW7Hf5r4EMIM/xDPKtZVL0Pik8O21io8=; b=ogndnz/zRfgrUUIHW0MA9aQ9C17XBMreWgHh/U/vmnkvk7BrvAwK6/dULtuYA21zzN mng8gZsPkzxzYX2X8X+cJpTCzANGPp4TdBEmQUmdnoynyK1jVQH6Rve3GwGMTS9TauF6 +Tw4e7+Xazxq7Ebz6TUjIJeuT/G0brKkZ6eneh1aVSOMi8noi3pfQBJEA0c/RYY6+vFc 6LZCm2Muf6otC3oPVPxzWvmAIOx9RCOd6Tbwg6ofKjqGUbl5VkrLP1pwEpAmfi64fauP FYqpfJpiRquz+klNGttcMkJmUg9UeP5BIXI+Se0nwCxy6496BOY32uTSvoFoyK60iE4O d8uw== 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=i8sEf2BqVxRRW7Hf5r4EMIM/xDPKtZVL0Pik8O21io8=; b=og2oy4H6b/TzebMIUwLXQznizmOMeCs/Astzjfd/4/hqE1wItB35Py7o8RYCa5EvEo NPD7JGiOJeNrBZITlz1aedhgV3REx34VTW74/a3WRtqrS+8eSHUf4m+zpVJtyo2soMTB mmhFYDBZTZ5hp2jJ+bTrdMBCEYoCREAzwbD2AonOdYm+A6X6X3x9ZjDUqtjJER//fmNi MFZ/UxNmhoOwAmzAmbinHPNWTSxyenhJnwtU6cmmApP3YUmRqQhTyWz+Kd8O90/kpF/+ Kz7RHKaszOp2ySG6uhRCzO+7MsYNuyPLAJJQJxR2Qv1JdlMIMZ7vH4YsyAiS9DEe+CU/ aGWQ== X-Gm-Message-State: APjAAAWL+DRd3KMgPrMMHg+0oNex+Rh+dkrll67FR7lP6ZgKux7uUe+o 262Hfdae3oO03XX1KPkV8cWRdV9OKBw= X-Google-Smtp-Source: APXvYqy2PqdtlYLod5xjnb7ToBAI5fUc8cCdp81UVksD/RDMx3fhcwySIPQJhb50wXlZc+Ctf/iT7Q== X-Received: by 2002:a17:902:aa0a:: with SMTP id be10mr38353191plb.27.1559758200962; Wed, 05 Jun 2019 11:10:00 -0700 (PDT) Received: from hermes.lan (204-195-22-127.wavecable.com. [204.195.22.127]) by smtp.gmail.com with ESMTPSA id a7sm19081888pgj.42.2019.06.05.11.09.59 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 05 Jun 2019 11:09:59 -0700 (PDT) From: Stephen Hemminger To: dev@dpdk.org Cc: Stephen Hemminger Date: Wed, 5 Jun 2019 11:09:47 -0700 Message-Id: <20190605180948.22414-8-stephen@networkplumber.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190605180948.22414-1-stephen@networkplumber.org> References: <20190516180427.17270-1-stephen@networkplumber.org> <20190605180948.22414-1-stephen@networkplumber.org> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v4 7/8] net/bonding: use rte_ether_unformat_addr rather than cmdline_parse 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" The cmdline library used to be the only way to parse a mac address. Now there is rte_ether_unformat_addr. Signed-off-by: Stephen Hemminger --- drivers/net/bonding/Makefile | 2 +- drivers/net/bonding/meson.build | 2 +- drivers/net/bonding/rte_eth_bond_args.c | 6 +----- 3 files changed, 3 insertions(+), 7 deletions(-) diff --git a/drivers/net/bonding/Makefile b/drivers/net/bonding/Makefile index 1893e3cad313..26c1782554cd 100644 --- a/drivers/net/bonding/Makefile +++ b/drivers/net/bonding/Makefile @@ -12,7 +12,7 @@ CFLAGS += -DALLOW_EXPERIMENTAL_API CFLAGS += -O3 CFLAGS += $(WERROR_FLAGS) LDLIBS += -lrte_eal -lrte_mbuf -lrte_mempool -lrte_ring -LDLIBS += -lrte_ethdev -lrte_net -lrte_kvargs -lrte_cmdline +LDLIBS += -lrte_ethdev -lrte_net -lrte_kvargs LDLIBS += -lrte_pci -lrte_bus_pci LDLIBS += -lrte_bus_vdev diff --git a/drivers/net/bonding/meson.build b/drivers/net/bonding/meson.build index 00374edb2a9d..6267210adf5f 100644 --- a/drivers/net/bonding/meson.build +++ b/drivers/net/bonding/meson.build @@ -8,6 +8,6 @@ sources = files('rte_eth_bond_api.c', 'rte_eth_bond_pmd.c', 'rte_eth_bond_flow.c 'rte_eth_bond_args.c', 'rte_eth_bond_8023ad.c', 'rte_eth_bond_alb.c') deps += 'sched' # needed for rte_bitmap.h -deps += ['ip_frag', 'cmdline'] +deps += ['ip_frag'] install_headers('rte_eth_bond.h', 'rte_eth_bond_8023ad.h') diff --git a/drivers/net/bonding/rte_eth_bond_args.c b/drivers/net/bonding/rte_eth_bond_args.c index 01bbb06c1a84..936440fb8491 100644 --- a/drivers/net/bonding/rte_eth_bond_args.c +++ b/drivers/net/bonding/rte_eth_bond_args.c @@ -7,9 +7,6 @@ #include #include -#include -#include - #include "rte_eth_bond.h" #include "rte_eth_bond_private.h" @@ -281,8 +278,7 @@ bond_ethdev_parse_bond_mac_addr_kvarg(const char *key __rte_unused, return -1; /* Parse MAC */ - return cmdline_parse_etheraddr(NULL, value, extra_args, - sizeof(struct rte_ether_addr)); + return rte_ether_unformat_addr(value, extra_args); } int From patchwork Wed Jun 5 18:09:48 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stephen Hemminger X-Patchwork-Id: 54432 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 4334D1B9EB; Wed, 5 Jun 2019 20:10:09 +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 54E9D1B9BC for ; Wed, 5 Jun 2019 20:10:03 +0200 (CEST) Received: by mail-pl1-f196.google.com with SMTP id x7so8990388plr.12 for ; Wed, 05 Jun 2019 11:10:03 -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=xdUsjvA+XM/A8lvdK1H1mldU1CJ2JFzy3kElJGpilZc=; b=SbmtxByho++T/git7LJLpHg6h9B8iK+L82H87gk7dQfWcaXB5wQ+qskhl29I7tR/oI CyvjOMn3vJdjmu2+3M7+rBWZ1tJlZk2pf52idh44VNJwCQAIQh0nAS89crnPYgVFAs0j +4DGSeYDb0H416stwzeE6IF3+EyyYxJrdeA6ZuVvmXXaFjXLDif3dfQ9oeYDaaPqxEsz BaOAo+UCdNu+TjdQEP8CLv4s+zir3FbomXqQhGYvcTex83Yr7rGBs4kKlTjiX/3COgAQ bBL7BI+fPkls6S+239kTuD1Crgmlu5fIkpOcSLcSycqqb57NPa6WbUl8oyuZh04V36cu jeTQ== 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=xdUsjvA+XM/A8lvdK1H1mldU1CJ2JFzy3kElJGpilZc=; b=XS+5cMWjNKJ4dTML8tIzOUYoXaSXCWI9m8rsHcbFzhzb5h6MWNDvvH/5fK66WDexd5 I8wsbeDDeLxhKVWrq17J4u9yXLRtYxo0Yb60KBSi6gA20Ph/GKR5iTA05wqb7z9nlXwU N9vyWIEtSvL1a7R4cAXybjtVwjlQ/WRio5uFBwc7UFN9lESVPJv3X0Jas9pD5TVLjbVn rXrMVkLfMMUN/sWApWjW98KdtPe21ZmGLSiNm0xPErWWUdqTgi5b4jGxeL5HD7yKfR8Z HsbUnBMZ5IbQDEy+9HuYAsKiWrLxV5ya1pRbWjyyspTiC7BSrwgb6ZzDvXuH04Lv86bY E08g== X-Gm-Message-State: APjAAAXeOQRZRqESFNqE2TpiiFk8qBRhXAUwJGA/vBO+KJShETEprcTN 9mQ+elb3844WFWZdQDmsaWwMcXMTF/4= X-Google-Smtp-Source: APXvYqwjwmQN9Bf44C2eWcZEhMFpvzQAMnwe0nnFC592qnrr9C1X3lwYnIuHnxS339yPX1JpvvI4GQ== X-Received: by 2002:a17:902:20ec:: with SMTP id v41mr43147565plg.142.1559758202204; Wed, 05 Jun 2019 11:10:02 -0700 (PDT) Received: from hermes.lan (204-195-22-127.wavecable.com. [204.195.22.127]) by smtp.gmail.com with ESMTPSA id a7sm19081888pgj.42.2019.06.05.11.10.01 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 05 Jun 2019 11:10:01 -0700 (PDT) From: Stephen Hemminger To: dev@dpdk.org Cc: Stephen Hemminger Date: Wed, 5 Jun 2019 11:09:48 -0700 Message-Id: <20190605180948.22414-9-stephen@networkplumber.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190605180948.22414-1-stephen@networkplumber.org> References: <20190516180427.17270-1-stephen@networkplumber.org> <20190605180948.22414-1-stephen@networkplumber.org> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v4 8/8] app/testpmd: use rte_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" The cmdline_parse_ether_addr does not need to be used everywhere in testpmd. Can use rte_ether_unformat_addr instead. As an added bonus it eliminates some code for copying. Signed-off-by: Stephen Hemminger --- app/test-pmd/cmdline_flow.c | 5 ++--- app/test-pmd/config.c | 10 +++------- app/test-pmd/parameters.c | 15 +++------------ 3 files changed, 8 insertions(+), 22 deletions(-) diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c index 201bd9de56e0..2b02ca29b7ac 100644 --- a/app/test-pmd/cmdline_flow.c +++ b/app/test-pmd/cmdline_flow.c @@ -18,7 +18,6 @@ #include #include #include -#include #include #include "testpmd.h" @@ -4627,8 +4626,8 @@ parse_mac_addr(struct context *ctx, const struct token *token, /* Only network endian is supported. */ if (!arg->hton) goto error; - ret = cmdline_parse_etheraddr(NULL, str, &tmp, size); - if (ret < 0 || (unsigned int)ret != len) + ret = rte_ether_unformat_addr(str, &tmp); + if (ret < 0) goto error; if (!ctx->object) return len; diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c index ab458c8d2837..1d804705d96c 100644 --- a/app/test-pmd/config.c +++ b/app/test-pmd/config.c @@ -49,7 +49,6 @@ #include #endif #include -#include #include #include "testpmd.h" @@ -2278,19 +2277,16 @@ pkt_fwd_config_display(struct fwd_config *cfg) void set_fwd_eth_peer(portid_t port_id, char *peer_addr) { - uint8_t c, new_peer_addr[6]; + struct rte_ether_addr new_peer_addr; if (!rte_eth_dev_is_valid_port(port_id)) { printf("Error: Invalid port number %i\n", port_id); return; } - if (cmdline_parse_etheraddr(NULL, peer_addr, &new_peer_addr, - sizeof(new_peer_addr)) < 0) { + if (rte_ether_unformat_addr(peer_addr, &new_peer_addr) < 0) { printf("Error: Invalid ethernet address: %s\n", peer_addr); return; } - for (c = 0; c < 6; c++) - peer_eth_addrs[port_id].addr_bytes[c] = - new_peer_addr[c]; + peer_eth_addrs[port_id] = new_peer_addr; } int diff --git a/app/test-pmd/parameters.c b/app/test-pmd/parameters.c index 245b610641ee..975a97807009 100644 --- a/app/test-pmd/parameters.c +++ b/app/test-pmd/parameters.c @@ -39,10 +39,6 @@ #include #include #include -#ifdef RTE_LIBRTE_CMDLINE -#include -#include -#endif #ifdef RTE_LIBRTE_PMD_BOND #include #endif @@ -227,8 +223,7 @@ init_peer_eth_addrs(char *config_filename) if (fgets(buf, sizeof(buf), config_file) == NULL) break; - if (cmdline_parse_etheraddr(NULL, buf, &peer_eth_addrs[i], - sizeof(peer_eth_addrs[i])) < 0) { + if (rte_ether_unformat_addr(buf, &peer_eth_addrs[i]) < 0) { printf("Bad MAC address format on line %d\n", i+1); fclose(config_file); return -1; @@ -727,7 +722,6 @@ launch_args_parse(int argc, char** argv) } if (!strcmp(lgopts[opt_idx].name, "eth-peer")) { char *port_end; - uint8_t c, peer_addr[6]; errno = 0; n = strtoul(optarg, &port_end, 10); @@ -739,14 +733,11 @@ launch_args_parse(int argc, char** argv) "eth-peer: port %d >= RTE_MAX_ETHPORTS(%d)\n", n, RTE_MAX_ETHPORTS); - if (cmdline_parse_etheraddr(NULL, port_end, - &peer_addr, sizeof(peer_addr)) < 0) + if (rte_ether_unformat_addr(port_end, + &peer_eth_addrs[n]) < 0) rte_exit(EXIT_FAILURE, "Invalid ethernet address: %s\n", port_end); - for (c = 0; c < 6; c++) - peer_eth_addrs[n].addr_bytes[c] = - peer_addr[c]; nb_peer_eth_addrs++; } #endif