#include <rte_string_fns.h>
#include "rte_eth_bond.h"
-#include "rte_eth_bond_private.h"
-#include "rte_eth_bond_8023ad_private.h"
+#include "eth_bond_private.h"
+#include "eth_bond_8023ad_private.h"
#define REORDER_PERIOD_MS 10
#define DEFAULT_POLLING_INTERVAL_10_MS (10)
bond_ctx->mode4.slave_link.link_autoneg;
ethdev->data->dev_link.link_duplex =
bond_ctx->mode4.slave_link.link_duplex;
- /* fall through to update link speed */
+ /* fall through */
+ /* to update link speed */
case BONDING_MODE_ROUND_ROBIN:
case BONDING_MODE_BALANCE:
case BONDING_MODE_TLB:
return ret;
}
-static void
+static int
bond_ethdev_allmulticast_enable(struct rte_eth_dev *eth_dev)
{
struct bond_dev_private *internals = eth_dev->data->dev_private;
int i;
- int ret;
+ int ret = 0;
uint16_t port_id;
switch (internals->mode) {
case BONDING_MODE_ROUND_ROBIN:
case BONDING_MODE_BALANCE:
case BONDING_MODE_BROADCAST:
- case BONDING_MODE_8023AD:
+ case BONDING_MODE_8023AD: {
+ unsigned int slave_ok = 0;
+
for (i = 0; i < internals->slave_count; i++) {
port_id = internals->slaves[i].port_id;
RTE_BOND_LOG(ERR,
"Failed to enable allmulti mode for port %u: %s",
port_id, rte_strerror(-ret));
+ else
+ slave_ok++;
}
+ /*
+ * Report success if operation is successful on at least
+ * on one slave. Otherwise return last error code.
+ */
+ if (slave_ok > 0)
+ ret = 0;
break;
+ }
/* allmulti mode is propagated only to primary slave */
case BONDING_MODE_ACTIVE_BACKUP:
case BONDING_MODE_TLB:
"Failed to enable allmulti mode for port %u: %s",
port_id, rte_strerror(-ret));
}
+
+ return ret;
}
-static void
+static int
bond_ethdev_allmulticast_disable(struct rte_eth_dev *eth_dev)
{
struct bond_dev_private *internals = eth_dev->data->dev_private;
int i;
- int ret;
+ int ret = 0;
uint16_t port_id;
switch (internals->mode) {
case BONDING_MODE_ROUND_ROBIN:
case BONDING_MODE_BALANCE:
case BONDING_MODE_BROADCAST:
- case BONDING_MODE_8023AD:
+ case BONDING_MODE_8023AD: {
+ unsigned int slave_ok = 0;
+
for (i = 0; i < internals->slave_count; i++) {
uint16_t port_id = internals->slaves[i].port_id;
RTE_BOND_LOG(ERR,
"Failed to disable allmulti mode for port %u: %s",
port_id, rte_strerror(-ret));
+ else
+ slave_ok++;
}
+ /*
+ * Report success if operation is successful on at least
+ * on one slave. Otherwise return last error code.
+ */
+ if (slave_ok > 0)
+ ret = 0;
break;
+ }
/* allmulti mode is propagated only to primary slave */
case BONDING_MODE_ACTIVE_BACKUP:
case BONDING_MODE_TLB:
"Failed to disable allmulti mode for port %u: %s",
port_id, rte_strerror(-ret));
}
+
+ return ret;
}
static void