From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-qg0-f42.google.com (mail-qg0-f42.google.com [209.85.192.42]) by dpdk.org (Postfix) with ESMTP id A9BF95917 for ; Thu, 15 May 2014 11:04:19 +0200 (CEST) Received: by mail-qg0-f42.google.com with SMTP id q107so1251197qgd.29 for ; Thu, 15 May 2014 02:04:27 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to:cc:content-type; bh=wGUR2TdEnIG9hfhYuBqcfN18CcAYvO5nadpvuKWcmnk=; b=iAiMZ+t+BNFEVQbezTxWMoJgp16jWdLzlvXzdvN8ikjm26M6AoMKY0vvUwpAsfxIJy CVyR+J4Wu8vHEklyH6BWvwP4lSoXxv2XeKQW/BuhrOsc+HxxVEWkAB8OLu2FY9nAvPwM 8R8b80St9BM/ZLDOknBD5xeGFpywYOWw6Wa4uA3J7R+NutjK/YIn/W0WpUIPXE51PnpY a7gj4xk14mbwhn4NoxdfOpLXSCwxNIJakB8Zwk1/+ued5ZgppQgFJe5WWVE6M2nQsvrv KIN8jFu62RYB9LK7gk1elFOE3dq+uz1zSa9lg1IIEgkDAbahhYC2UraQsL5KAaKkzaUU 1aAg== X-Gm-Message-State: ALoCoQli1I/qkyC9w8rWuutlv2fq03W6kkF5sr7LRkBe7etACs7GFn9iHGeM9BUPrzOdIoo+tr23 MIME-Version: 1.0 X-Received: by 10.140.19.133 with SMTP id 5mr12819833qgh.46.1400144667405; Thu, 15 May 2014 02:04:27 -0700 (PDT) Received: by 10.140.109.73 with HTTP; Thu, 15 May 2014 02:04:27 -0700 (PDT) In-Reply-To: <20140514185750.257523699@networkplumber.org> References: <20140514185527.771828962@networkplumber.org> <20140514185750.257523699@networkplumber.org> Date: Thu, 15 May 2014 11:04:27 +0200 Message-ID: From: Ivan Boule To: Stephen Hemminger Content-Type: text/plain; charset=UTF-8 X-Content-Filtered-By: Mailman/MimeDel 2.1.15 Cc: "dev@dpdk.org" Subject: Re: [dpdk-dev] [PATCH 5/6] ether: allow setting mac address X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 15 May 2014 09:04:20 -0000 Hi Stephen, By default, changing the [current] default MAC address of a device is not equivalent to adding a MAC address to it ! At least, the minimum to do should consist in: 1. checking that the PMD exports both mac_addr_remove() and mac_addr_add() functions, returning a NON_SUPPORTED error code otherwise, 2. removing the current default MAC address by invoking the PMD's mac_addr_remove() function, 3. adding the new MAC address by invoking the PMD's mac_addr_add() function. Regards, Ivan 2014-05-14 20:55 GMT+02:00 Stephen Hemminger : > Allow setting the default Ethernet address used on device. > The underlying drivers allow it but the DPDK was blocking any > attempts to change Ethernet address on device. > > For most devices, this is just the same as filling in address > in mac address table entry 0, but for some devices this requires > special override. > > Signed-off-by: Stephen Hemminger > > > --- a/lib/librte_ether/rte_ethdev.h 2014-05-14 11:44:27.373014227 -0700 > +++ b/lib/librte_ether/rte_ethdev.h 2014-05-14 11:44:27.373014227 -0700 > @@ -982,6 +982,11 @@ typedef void (*eth_mac_addr_add_t)(struc > struct ether_addr *mac_addr, > uint32_t index, > uint32_t vmdq); > +/**< @internal Change default MAC address */ > + > +typedef void (*eth_mac_addr_set_t)(struct rte_eth_dev *dev, > + struct ether_addr *mac_addr); > + > /**< @internal Set a MAC address into Receive Address Address Register */ > > typedef int (*eth_uc_hash_table_set_t)(struct rte_eth_dev *dev, > @@ -1114,6 +1119,7 @@ struct eth_dev_ops { > priority_flow_ctrl_set_t priority_flow_ctrl_set; /**< Setup > priority flow control.*/ > eth_mac_addr_remove_t mac_addr_remove; /**< Remove MAC > address */ > eth_mac_addr_add_t mac_addr_add; /**< Add a MAC address */ > + eth_mac_addr_set_t mac_addr_set; /**< Change default MAC > address */ > eth_uc_hash_table_set_t uc_hash_table_set; /**< Set Unicast > Table Array */ > eth_uc_all_hash_table_set_t uc_all_hash_table_set; /**< Set > Unicast hash bitmap */ > eth_mirror_rule_set_t mirror_rule_set; /**< Add a traffic > mirror rule.*/ > @@ -2538,6 +2544,21 @@ int rte_eth_dev_mac_addr_add(uint8_t por > int rte_eth_dev_mac_addr_remove(uint8_t port, struct ether_addr > *mac_addr); > > /** > + * Change the default MAC address > + * > + * @param port > + * The port identifier of the Ethernet device. > + * @param mac_addr > + * MAC address to remove. > + * @return > + * - (0) if successfully added or *mac_addr" was already added. > + * - (-ENOTSUP) if hardware doesn't support this feature. > + * - (-ENODEV) if *port* is invalid. > + * - (-EINVAL) if MAC address is invalid. > + */ > +int rte_eth_dev_macaddr_set(uint8_t port, struct ether_addr *mac_addr); > + > +/** > * Update Redirection Table(RETA) of Receive Side Scaling of Ethernet > device. > * > * @param port > --- a/lib/librte_ether/rte_ethdev.c 2014-05-14 11:44:27.373014227 -0700 > +++ b/lib/librte_ether/rte_ethdev.c 2014-05-14 11:44:27.373014227 -0700 > @@ -1059,6 +1059,33 @@ rte_eth_macaddr_get(uint8_t port_id, str > } > > int > +rte_eth_dev_macaddr_set(uint8_t port_id, struct ether_addr *addr) > +{ > + struct rte_eth_dev *dev; > + > + if (port_id >= nb_ports) { > + PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id); > + return (-ENODEV); > + } > + if (is_zero_ether_addr(addr)) { > + PMD_DEBUG_TRACE("port %d: Cannot add NULL MAC address\n", > port_id); > + return (-EINVAL); > + } > + dev = &rte_eth_devices[port_id]; > + > + if (*dev->dev_ops->mac_addr_set) > + (*dev->dev_ops->mac_addr_set)(dev, addr); > + else { > + FUNC_PTR_OR_ERR_RET(*dev->dev_ops->mac_addr_add, -ENOTSUP); > + (*dev->dev_ops->mac_addr_add)(dev, addr, 0, 0); > + } > + > + ether_addr_copy(addr, &dev->data->mac_addrs[0]); > + > + return 0; > +} > + > +int > rte_eth_dev_vlan_filter(uint8_t port_id, uint16_t vlan_id, int on) > { > struct rte_eth_dev *dev; > > -- Ivan BOULE 6WIND Software Engineer