From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <3chas3@gmail.com> Received: from mail-io0-f193.google.com (mail-io0-f193.google.com [209.85.223.193]) by dpdk.org (Postfix) with ESMTP id 1E3CF5F4D for ; Mon, 4 Jun 2018 15:23:38 +0200 (CEST) Received: by mail-io0-f193.google.com with SMTP id d22-v6so23415432iof.13 for ; Mon, 04 Jun 2018 06:23:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=R+4OhkEdeSRaiox1DtnN04n+sJb7CAoLexcy/htBaaY=; b=gxiSCZa7SgYlYUbpTtDEnjssqM7HL2SNxBLcqPBdoxD6IRTOURMZcMpdYu23CMZAeY 5oyzmwkRyqGJOGQVt/A2Vd83EG85vlbmBAg/RHp92XLeMHbKyQmWI+epPsxp/h085MmX F+TvcMFhPZq2/S8L1lmdHs2ZT4++JtbqDS7whPAHc7uiIKT8+r+XZ+S7/bfGEpFN0LAD h4xiTQ6F2b2rlcfkoO4wJ3sY+Sy4HWmCr4OvDhwh7MNLpX/0AXi1y42BLEjJI4D0XqxG 9FKos2GNVy+mfnNhP6HV0MNvzONfUR8tjduRzMNmizUDw4Tz/DOJ8QDo48UVY2qUaAYm A2yQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=R+4OhkEdeSRaiox1DtnN04n+sJb7CAoLexcy/htBaaY=; b=QNav6Gik2/LSHJ6xrWRtSZbKJhuhYmsAI+YO0nMe1arhAjr2zNKhe+cz1T0i2yV3cD 16PomNlhaNaAWL38FeuQ02Y5nN/Ydhixr4RFAGKMH+S5VxbX/q2RIwYqmuJ9Evj8vnAf hPnaHKwwZzb8Bmnh2FRXpKrca50+45q0TZfUtVqtc0vpueaYNhR5i+sDlXSe6ZAXsHY3 NIhX9CnqKsDYSxTwrYzwv14F90ZbZkkE3cJ9DeObYPDkSUGjMA1N/w37NffOwkh13ZR0 3auifoBRWrf4SDLs1MLbBukHigleEACEPvX0nak9kecRbmuOcLWipKwCeaDnfP4K7PrW 4TOg== X-Gm-Message-State: ALKqPwfSZREOERW7xvtsFK/ChFIdr3dEDuQtXfqKA1sPuBlr/5nWTxsK exXjGNV7bUEKVcUOBeZ2MyFdgL+sNWXrHW8TW8A= X-Google-Smtp-Source: ADUXVKIl7CemPU/djCwfBg6MlKLukkuDxL8aILjYG9hZaFHEDInS+TzYWFWPBvLK4W2UhAiCqXMffYUNLqvtLwe4rb4= X-Received: by 2002:a6b:f10f:: with SMTP id e15-v6mr19349783iog.155.1528118617387; Mon, 04 Jun 2018 06:23:37 -0700 (PDT) MIME-Version: 1.0 Received: by 2002:a6b:e90e:0:0:0:0:0 with HTTP; Mon, 4 Jun 2018 06:23:36 -0700 (PDT) In-Reply-To: <20180525164451.B3EF22C72@dpdk.org> References: <20180525164451.B3EF22C72@dpdk.org> From: Chas Williams <3chas3@gmail.com> Date: Mon, 4 Jun 2018 09:23:36 -0400 Message-ID: To: Alex Kiselev Cc: dev@dpdk.org Content-Type: text/plain; charset="UTF-8" X-Content-Filtered-By: Mailman/MimeDel 2.1.15 Subject: Re: [dpdk-dev] [PATCH] net/bonding: add add/remove mac addrs 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, 04 Jun 2018 13:23:38 -0000 This is fine but you are missing one bit. If a slave is added after you can configured the MAC addresses, you will need to replay the configured MAC addresses into that slave. It's not clear to me what the contract is between bonding and DPDK as far as slave removal. Just looking at the behavior with the default MAC address, I would guess that bonding also needs to remove extra MAC addresses it added during slave remove. Bonding is a PMD but also an application. On Fri, May 25, 2018 at 12:21 PM, Alex Kiselev wrote: > add functions to add/remove MAC addresses > > Signed-off-by: Alex Kiselev > --- > drivers/net/bonding/rte_eth_bond_pmd.c | 76 > +++++++++++++++++++++++++++++++--- > 1 file changed, 71 insertions(+), 5 deletions(-) > > diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c > b/drivers/net/bonding/rte_eth_bond_pmd.c > index 02d94b1..835b4e3 100644 > --- a/drivers/net/bonding/rte_eth_bond_pmd.c > +++ b/drivers/net/bonding/rte_eth_bond_pmd.c > @@ -25,6 +25,7 @@ > > #define REORDER_PERIOD_MS 10 > #define DEFAULT_POLLING_INTERVAL_10_MS (10) > +#define BOND_MAX_MAC_ADDRS 16 > > #define HASH_L4_PORTS(h) ((h)->src_port ^ (h)->dst_port) > > @@ -2219,7 +2220,7 @@ bond_ethdev_info(struct rte_eth_dev *dev, struct > rte_eth_dev_info *dev_info) > uint16_t max_nb_rx_queues = UINT16_MAX; > uint16_t max_nb_tx_queues = UINT16_MAX; > > - dev_info->max_mac_addrs = 1; > + dev_info->max_mac_addrs = BOND_MAX_MAC_ADDRS; > > dev_info->max_rx_pktlen = internals->candidate_max_rx_pktlen ? > internals->candidate_max_rx_pktlen : > @@ -2905,6 +2906,65 @@ bond_filter_ctrl(struct rte_eth_dev *dev > __rte_unused, > return -ENOTSUP; > } > > +static int > +bond_ethdev_mac_addr_add(struct rte_eth_dev *dev, struct ether_addr > *mac_addr, > + __rte_unused uint32_t index, uint32_t vmdq) > +{ > + struct rte_eth_dev *slave_eth_dev; > + struct bond_dev_private *internals = dev->data->dev_private; > + int ret, i; > + > + rte_spinlock_lock(&internals->lock); > + > + for (i = 0; i < internals->slave_count; i++) { > + slave_eth_dev = &rte_eth_devices[internals-> > slaves[i].port_id]; > + if (*slave_eth_dev->dev_ops->mac_addr_add == NULL) { > + ret = -ENOTSUP; > + goto end; > + } > + } > + > + for (i = 0; i < internals->slave_count; i++) { > + ret = rte_eth_dev_mac_addr_add(internals->slaves[i].port_id, > mac_addr, > + vmdq); > + if (ret < 0) > + goto end; > + } > + > + ret = 0; > +end: > + rte_spinlock_unlock(&internals->lock); > + return ret; > +} > + > +static void > +bond_ethdev_mac_addr_remove(struct rte_eth_dev *dev, uint32_t index) > +{ > + struct rte_eth_dev *slave_eth_dev; > + struct bond_dev_private *internals = dev->data->dev_private; > + int ret, i; > + > + rte_spinlock_lock(&internals->lock); > + > + for (i = 0; i < internals->slave_count; i++) { > + slave_eth_dev = &rte_eth_devices[internals-> > slaves[i].port_id]; > + if (*slave_eth_dev->dev_ops->mac_addr_remove == NULL) > + goto end; > + } > + > + struct ether_addr *mac_addr = &dev->data->mac_addrs[index]; > + > + for (i = 0; i < internals->slave_count; i++) { > + ret = rte_eth_dev_mac_addr_remove( > internals->slaves[i].port_id, > + mac_addr); > + if (ret < 0) > + goto end; > + } > + > +end: > + rte_spinlock_unlock(&internals->lock); > +} > + > const struct eth_dev_ops default_dev_ops = { > .dev_start = bond_ethdev_start, > .dev_stop = bond_ethdev_stop, > @@ -2927,7 +2987,9 @@ const struct eth_dev_ops default_dev_ops = { > .rss_hash_conf_get = bond_ethdev_rss_hash_conf_get, > .mtu_set = bond_ethdev_mtu_set, > .mac_addr_set = bond_ethdev_mac_address_set, > - .filter_ctrl = bond_filter_ctrl > + .filter_ctrl = bond_filter_ctrl, > + .mac_addr_add = bond_ethdev_mac_addr_add, > + .mac_addr_remove = bond_ethdev_mac_addr_remove > }; > > static int > @@ -2954,10 +3016,14 @@ bond_alloc(struct rte_vdev_device *dev, uint8_t > mode) > eth_dev->data->nb_rx_queues = (uint16_t)1; > eth_dev->data->nb_tx_queues = (uint16_t)1; > > - eth_dev->data->mac_addrs = rte_zmalloc_socket(name, > ETHER_ADDR_LEN, 0, > - socket_id); > + /* Allocate memory for storing MAC addresses */ > + eth_dev->data->mac_addrs = rte_zmalloc_socket(name, ETHER_ADDR_LEN > * > + BOND_MAX_MAC_ADDRS, 0, > socket_id); > if (eth_dev->data->mac_addrs == NULL) { > - RTE_BOND_LOG(ERR, "Unable to malloc mac_addrs"); > + RTE_BOND_LOG(ERR, > + "Failed to allocate %u bytes needed to store " > + "MAC addresses", > + ETHER_ADDR_LEN * BOND_MAX_MAC_ADDRS); > goto err; > } > > -- > 2.7.3 > >