if ((rc = rte_eth_dev_set_mc_addr_list(port_id, port_cfg->mc_addr, port_cfg->nb_mc_addr + 1)) != 0) {
plog_err("rte_eth_dev_set_mc_addr_list returns %d on port %u\n", rc, port_id);
return rc;
if ((rc = rte_eth_dev_set_mc_addr_list(port_id, port_cfg->mc_addr, port_cfg->nb_mc_addr + 1)) != 0) {
plog_err("rte_eth_dev_set_mc_addr_list returns %d on port %u\n", rc, port_id);
return rc;
for (i = 0; i < port_cfg->nb_mc_addr; i++) {
if (is_same_ether_addr(addr, &port_cfg->mc_addr[i])) {
// Copy last address to the slot to be deleted
for (i = 0; i < port_cfg->nb_mc_addr; i++) {
if (is_same_ether_addr(addr, &port_cfg->mc_addr[i])) {
// Copy last address to the slot to be deleted
if ((rc = rte_eth_dev_set_mc_addr_list(port_id, port_cfg->mc_addr, port_cfg->nb_mc_addr - 1)) != 0) {
plog_err("rte_eth_dev_set_mc_addr_list returns %d on port %u\n", rc, port_id);
// When set failed, let restore the situation we were before calling the function...
if ((rc = rte_eth_dev_set_mc_addr_list(port_id, port_cfg->mc_addr, port_cfg->nb_mc_addr - 1)) != 0) {
plog_err("rte_eth_dev_set_mc_addr_list returns %d on port %u\n", rc, port_id);
// When set failed, let restore the situation we were before calling the function...