From: Huisong Li Date: Fri, 22 Oct 2021 09:19:55 +0000 (+0800) Subject: net/hns3: extract common interface to check duplicates X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=3d491e5531a1d631f464ab31e139132d0e531198;p=dpdk.git net/hns3: extract common interface to check duplicates Extract a common interface for PF and VF to check whether the configured multicast MAC address from rte_eth_dev_mac_addr_add() is the same as the multicast MAC address from rte_eth_dev_set_mc_addr_list(). Signed-off-by: Huisong Li Signed-off-by: Min Hu (Connor) --- diff --git a/drivers/net/hns3/hns3_ethdev.c b/drivers/net/hns3/hns3_ethdev.c index 4d692639f1..ba21c81947 100644 --- a/drivers/net/hns3/hns3_ethdev.c +++ b/drivers/net/hns3/hns3_ethdev.c @@ -1609,27 +1609,38 @@ hns3_add_uc_mac_addr(struct hns3_hw *hw, struct rte_ether_addr *mac_addr) return ret; } -static int -hns3_add_mc_addr_common(struct hns3_hw *hw, struct rte_ether_addr *mac_addr) +bool +hns3_find_duplicate_mc_addr(struct hns3_hw *hw, struct rte_ether_addr *mc_addr) { char mac_str[RTE_ETHER_ADDR_FMT_SIZE]; struct rte_ether_addr *addr; - int ret; int i; for (i = 0; i < hw->mc_addrs_num; i++) { addr = &hw->mc_addrs[i]; - /* Check if there are duplicate addresses */ - if (rte_is_same_ether_addr(addr, mac_addr)) { + /* Check if there are duplicate addresses in mc_addrs[] */ + if (rte_is_same_ether_addr(addr, mc_addr)) { hns3_ether_format_addr(mac_str, RTE_ETHER_ADDR_FMT_SIZE, - addr); + addr); hns3_err(hw, "failed to add mc mac addr, same addrs" "(%s) is added by the set_mc_mac_addr_list " "API", mac_str); - return -EINVAL; + return true; } } + return false; +} + +static int +hns3_add_mc_addr_common(struct hns3_hw *hw, struct rte_ether_addr *mac_addr) +{ + char mac_str[RTE_ETHER_ADDR_FMT_SIZE]; + int ret; + + if (hns3_find_duplicate_mc_addr(hw, mac_addr)) + return -EINVAL; + ret = hns3_add_mc_mac_addr(hw, mac_addr); if (ret) { hns3_ether_format_addr(mac_str, RTE_ETHER_ADDR_FMT_SIZE, diff --git a/drivers/net/hns3/hns3_ethdev.h b/drivers/net/hns3/hns3_ethdev.h index 6e13e74a10..b3ab17240b 100644 --- a/drivers/net/hns3/hns3_ethdev.h +++ b/drivers/net/hns3/hns3_ethdev.h @@ -1048,6 +1048,10 @@ void hns3vf_update_link_status(struct hns3_hw *hw, uint8_t link_status, uint32_t link_speed, uint8_t link_duplex); void hns3_parse_devargs(struct rte_eth_dev *dev); void hns3vf_update_push_lsc_cap(struct hns3_hw *hw, bool supported); + +bool hns3_find_duplicate_mc_addr(struct hns3_hw *hw, + struct rte_ether_addr *mc_addr); + int hns3_restore_ptp(struct hns3_adapter *hns); int hns3_mbuf_dyn_rx_timestamp_register(struct rte_eth_dev *dev, struct rte_eth_conf *conf); diff --git a/drivers/net/hns3/hns3_ethdev_vf.c b/drivers/net/hns3/hns3_ethdev_vf.c index 873924927c..d3b082bd81 100644 --- a/drivers/net/hns3/hns3_ethdev_vf.c +++ b/drivers/net/hns3/hns3_ethdev_vf.c @@ -208,22 +208,10 @@ static int hns3vf_add_mc_addr_common(struct hns3_hw *hw, struct rte_ether_addr *mac_addr) { char mac_str[RTE_ETHER_ADDR_FMT_SIZE]; - struct rte_ether_addr *addr; int ret; - int i; - for (i = 0; i < hw->mc_addrs_num; i++) { - addr = &hw->mc_addrs[i]; - /* Check if there are duplicate addresses */ - if (rte_is_same_ether_addr(addr, mac_addr)) { - hns3_ether_format_addr(mac_str, RTE_ETHER_ADDR_FMT_SIZE, - addr); - hns3_err(hw, "failed to add mc mac addr, same addrs" - "(%s) is added by the set_mc_mac_addr_list " - "API", mac_str); - return -EINVAL; - } - } + if (hns3_find_duplicate_mc_addr(hw, mac_addr)) + return -EINVAL; ret = hns3vf_add_mc_mac_addr(hw, mac_addr); if (ret) {