ethdev: use constants for link state
[dpdk.git] / drivers / net / bonding / rte_eth_bond_api.c
index a0995ec..e9247b5 100644 (file)
@@ -205,7 +205,7 @@ rte_eth_bond_create(const char *name, uint8_t mode, uint8_t socket_id)
 
        TAILQ_INIT(&(eth_dev->link_intr_cbs));
 
-       eth_dev->data->dev_link.link_status = 0;
+       eth_dev->data->dev_link.link_status = ETH_LINK_DOWN;
 
        eth_dev->data->mac_addrs = rte_zmalloc_socket(name, ETHER_ADDR_LEN, 0,
                        socket_id);
@@ -231,7 +231,7 @@ rte_eth_bond_create(const char *name, uint8_t mode, uint8_t socket_id)
 
        internals->port_id = eth_dev->data->port_id;
        internals->mode = BONDING_MODE_INVALID;
-       internals->current_primary_port = 0;
+       internals->current_primary_port = RTE_MAX_ETHPORTS + 1;
        internals->balance_xmit_policy = BALANCE_XMIT_POLICY_LAYER2;
        internals->xmit_hash = xmit_l2_hash;
        internals->user_defined_mac = 0;
@@ -352,6 +352,7 @@ __eth_bond_slave_add_lock_free(uint8_t bonded_port_id, uint8_t slave_port_id)
 
                /* Make primary slave */
                internals->primary_port = slave_port_id;
+               internals->current_primary_port = slave_port_id;
 
                /* Inherit queues settings from first slave */
                internals->nb_rx_queues = slave_eth_dev->data->nb_rx_queues;
@@ -419,8 +420,17 @@ __eth_bond_slave_add_lock_free(uint8_t bonded_port_id, uint8_t slave_port_id)
        if (bonded_eth_dev->data->dev_started) {
                rte_eth_link_get_nowait(slave_port_id, &link_props);
 
-                if (link_props.link_status == 1)
-                       activate_slave(bonded_eth_dev, slave_port_id);
+                if (link_props.link_status == ETH_LINK_UP) {
+                       if (internals->active_slave_count == 0 &&
+                           !internals->user_defined_primary_port)
+                               bond_ethdev_primary_set(internals,
+                                                       slave_port_id);
+
+                       if (find_slave_by_id(internals->active_slaves,
+                                            internals->active_slave_count,
+                                            slave_port_id) == internals->active_slave_count)
+                               activate_slave(bonded_eth_dev, slave_port_id);
+               }
        }
        return 0;