net: align ethdev and eal driver names
[dpdk.git] / drivers / net / bonding / rte_eth_bond_pmd.c
index 9df245e..02e3448 100644 (file)
@@ -122,6 +122,15 @@ bond_ethdev_rx_burst_active_backup(void *queue, struct rte_mbuf **bufs,
                        bd_rx_q->queue_id, bufs, nb_pkts);
 }
 
+static inline uint8_t
+is_lacp_packets(uint16_t ethertype, uint8_t subtype, uint16_t vlan_tci)
+{
+       const uint16_t ether_type_slow_be = rte_be_to_cpu_16(ETHER_TYPE_SLOW);
+
+       return !vlan_tci && (ethertype == ether_type_slow_be &&
+               (subtype == SLOW_SUBTYPE_MARKER || subtype == SLOW_SUBTYPE_LACP));
+}
+
 static uint16_t
 bond_ethdev_rx_burst_8023ad(void *queue, struct rte_mbuf **bufs,
                uint16_t nb_pkts)
@@ -141,6 +150,7 @@ bond_ethdev_rx_burst_8023ad(void *queue, struct rte_mbuf **bufs,
        uint8_t collecting;  /* current slave collecting status */
        const uint8_t promisc = internals->promiscuous_en;
        uint8_t i, j, k;
+       uint8_t subtype;
 
        rte_eth_macaddr_get(internals->port_id, &bond_mac);
        /* Copy slave list to protect against slave up/down changes during tx
@@ -166,10 +176,12 @@ bond_ethdev_rx_burst_8023ad(void *queue, struct rte_mbuf **bufs,
                                rte_prefetch0(rte_pktmbuf_mtod(bufs[j + 3], void *));
 
                        hdr = rte_pktmbuf_mtod(bufs[j], struct ether_hdr *);
+                       subtype = ((struct slow_protocol_frame *)hdr)->slow_protocol.subtype;
+
                        /* Remove packet from array if it is slow packet or slave is not
                         * in collecting state or bondign interface is not in promiscus
                         * mode and packet address does not match. */
-                       if (unlikely(hdr->ether_type == ether_type_slow_be ||
+                       if (unlikely(is_lacp_packets(hdr->ether_type, subtype, bufs[j]->vlan_tci) ||
                                !collecting || (!promisc &&
                                        !is_multicast_ether_addr(&hdr->d_addr) &&
                                        !is_same_ether_addr(&bond_mac, &hdr->d_addr)))) {
@@ -1305,8 +1317,6 @@ slave_configure(struct rte_eth_dev *bonded_eth_dev,
        struct bond_rx_queue *bd_rx_q;
        struct bond_tx_queue *bd_tx_q;
 
-       uint16_t old_nb_tx_queues = slave_eth_dev->data->nb_tx_queues;
-       uint16_t old_nb_rx_queues = slave_eth_dev->data->nb_rx_queues;
        int errval;
        uint16_t q_id;
 
@@ -1350,9 +1360,7 @@ slave_configure(struct rte_eth_dev *bonded_eth_dev,
        }
 
        /* Setup Rx Queues */
-       /* Use existing queues, if any */
-       for (q_id = old_nb_rx_queues;
-            q_id < bonded_eth_dev->data->nb_rx_queues; q_id++) {
+       for (q_id = 0; q_id < bonded_eth_dev->data->nb_rx_queues; q_id++) {
                bd_rx_q = (struct bond_rx_queue *)bonded_eth_dev->data->rx_queues[q_id];
 
                errval = rte_eth_rx_queue_setup(slave_eth_dev->data->port_id, q_id,
@@ -1368,9 +1376,7 @@ slave_configure(struct rte_eth_dev *bonded_eth_dev,
        }
 
        /* Setup Tx Queues */
-       /* Use existing queues, if any */
-       for (q_id = old_nb_tx_queues;
-            q_id < bonded_eth_dev->data->nb_tx_queues; q_id++) {
+       for (q_id = 0; q_id < bonded_eth_dev->data->nb_tx_queues; q_id++) {
                bd_tx_q = (struct bond_tx_queue *)bonded_eth_dev->data->tx_queues[q_id];
 
                errval = rte_eth_tx_queue_setup(slave_eth_dev->data->port_id, q_id,
@@ -1442,6 +1448,9 @@ slave_remove(struct bond_dev_private *internals,
                                (internals->slave_count - i - 1));
 
        internals->slave_count--;
+
+       /* force reconfiguration of slave interfaces */
+       _rte_eth_dev_reset(slave_eth_dev);
 }
 
 static void
@@ -1663,7 +1672,6 @@ bond_ethdev_info(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)
        dev_info->max_tx_queues = (uint16_t)512;
 
        dev_info->min_rx_bufsize = 0;
-       dev_info->pci_dev = NULL;
 
        dev_info->rx_offload_capa = internals->rx_offload_capa;
        dev_info->tx_offload_capa = internals->tx_offload_capa;
@@ -2554,12 +2562,12 @@ bond_ethdev_configure(struct rte_eth_dev *dev)
        return 0;
 }
 
-static struct rte_vdev_driver bond_drv = {
+struct rte_vdev_driver pmd_bond_drv = {
        .probe = bond_probe,
        .remove = bond_remove,
 };
 
-RTE_PMD_REGISTER_VDEV(net_bonding, bond_drv);
+RTE_PMD_REGISTER_VDEV(net_bonding, pmd_bond_drv);
 RTE_PMD_REGISTER_ALIAS(net_bonding, eth_bond);
 
 RTE_PMD_REGISTER_PARAM_STRING(net_bonding,