From: Chas Williams <ch...@att.com>

If a link is carrier down and using autonegotiation, then the PMD may not
have detected a speed yet.  In this case the best we can do is ignore the
link speed and duplex since they aren't valid.  To be completely correct,
there should be additional checks to prevent a slave that negotiates a
different speed from being activated.

Signed-off-by: Chas Williams <ch...@att.com>
---
 drivers/net/bonding/rte_eth_bond_pmd.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c 
b/drivers/net/bonding/rte_eth_bond_pmd.c
index 92ad688..5559879 100644
--- a/drivers/net/bonding/rte_eth_bond_pmd.c
+++ b/drivers/net/bonding/rte_eth_bond_pmd.c
@@ -1545,9 +1545,10 @@ link_properties_valid(struct rte_eth_dev *ethdev,
        if (bond_ctx->mode == BONDING_MODE_8023AD) {
                struct rte_eth_link *bond_link = &bond_ctx->mode4.slave_link;
 
-               if (bond_link->link_duplex != slave_link->link_duplex ||
-                       bond_link->link_autoneg != slave_link->link_autoneg ||
-                       bond_link->link_speed != slave_link->link_speed)
+               if (bond_link->link_autoneg != slave_link->link_autoneg ||
+                   (bond_link->link_autoneg != ETH_LINK_AUTONEG &&
+                    (bond_link->link_duplex != slave_link->link_duplex ||
+                     bond_link->link_speed != slave_link->link_speed)))
                        return -1;
        }
 
-- 
2.9.5

Reply via email to