net/bnxt: fail init when mbuf allocation fails
[dpdk.git] / drivers / net / bonding / rte_eth_bond_8023ad.c
index 67ca073..ca50583 100644 (file)
@@ -55,11 +55,11 @@ bond_print_lacp(struct lacpdu *l)
        uint8_t *addr;
 
        addr = l->actor.port_params.system.addr_bytes;
-       snprintf(a_address, sizeof(a_address), "%02X:%02X:%02X:%02X:%02X:%02X",
+       snprintf(a_address, sizeof(a_address), RTE_ETHER_ADDR_PRT_FMT,
                addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]);
 
        addr = l->partner.port_params.system.addr_bytes;
-       snprintf(p_address, sizeof(p_address), "%02X:%02X:%02X:%02X:%02X:%02X",
+       snprintf(p_address, sizeof(p_address), RTE_ETHER_ADDR_PRT_FMT,
                addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]);
 
        for (i = 0; i < 8; i++) {
@@ -587,8 +587,8 @@ tx_machine(struct bond_dev_private *internals, uint16_t slave_id)
        hdr = rte_pktmbuf_mtod(lacp_pkt, struct lacpdu_header *);
 
        /* Source and destination MAC */
-       rte_ether_addr_copy(&lacp_mac_addr, &hdr->eth_hdr.d_addr);
-       rte_eth_macaddr_get(slave_id, &hdr->eth_hdr.s_addr);
+       rte_ether_addr_copy(&lacp_mac_addr, &hdr->eth_hdr.dst_addr);
+       rte_eth_macaddr_get(slave_id, &hdr->eth_hdr.src_addr);
        hdr->eth_hdr.ether_type = rte_cpu_to_be_16(RTE_ETHER_TYPE_SLOW);
 
        lacpdu = &hdr->lacpdu;
@@ -770,25 +770,25 @@ link_speed_key(uint16_t speed) {
        uint16_t key_speed;
 
        switch (speed) {
-       case ETH_SPEED_NUM_NONE:
+       case RTE_ETH_SPEED_NUM_NONE:
                key_speed = 0x00;
                break;
-       case ETH_SPEED_NUM_10M:
+       case RTE_ETH_SPEED_NUM_10M:
                key_speed = BOND_LINK_SPEED_KEY_10M;
                break;
-       case ETH_SPEED_NUM_100M:
+       case RTE_ETH_SPEED_NUM_100M:
                key_speed = BOND_LINK_SPEED_KEY_100M;
                break;
-       case ETH_SPEED_NUM_1G:
+       case RTE_ETH_SPEED_NUM_1G:
                key_speed = BOND_LINK_SPEED_KEY_1000M;
                break;
-       case ETH_SPEED_NUM_10G:
+       case RTE_ETH_SPEED_NUM_10G:
                key_speed = BOND_LINK_SPEED_KEY_10G;
                break;
-       case ETH_SPEED_NUM_20G:
+       case RTE_ETH_SPEED_NUM_20G:
                key_speed = BOND_LINK_SPEED_KEY_20G;
                break;
-       case ETH_SPEED_NUM_40G:
+       case RTE_ETH_SPEED_NUM_40G:
                key_speed = BOND_LINK_SPEED_KEY_40G;
                break;
        default:
@@ -804,25 +804,61 @@ rx_machine_update(struct bond_dev_private *internals, uint16_t slave_id,
                struct rte_mbuf *lacp_pkt) {
        struct lacpdu_header *lacp;
        struct lacpdu_actor_partner_params *partner;
+       struct port *port, *agg;
 
        if (lacp_pkt != NULL) {
                lacp = rte_pktmbuf_mtod(lacp_pkt, struct lacpdu_header *);
                RTE_ASSERT(lacp->lacpdu.subtype == SLOW_SUBTYPE_LACP);
 
                partner = &lacp->lacpdu.partner;
+               port = &bond_mode_8023ad_ports[slave_id];
+               agg = &bond_mode_8023ad_ports[port->aggregator_port_id];
+
                if (rte_is_zero_ether_addr(&partner->port_params.system) ||
                        rte_is_same_ether_addr(&partner->port_params.system,
-                       &internals->mode4.mac_addr)) {
+                               &agg->actor.system)) {
                        /* This LACP frame is sending to the bonding port
                         * so pass it to rx_machine.
                         */
                        rx_machine(internals, slave_id, &lacp->lacpdu);
+               } else {
+                       char preferred_system_name[RTE_ETHER_ADDR_FMT_SIZE];
+                       char self_system_name[RTE_ETHER_ADDR_FMT_SIZE];
+
+                       rte_ether_format_addr(preferred_system_name,
+                               RTE_ETHER_ADDR_FMT_SIZE, &partner->port_params.system);
+                       rte_ether_format_addr(self_system_name,
+                               RTE_ETHER_ADDR_FMT_SIZE, &agg->actor.system);
+                       MODE4_DEBUG("preferred partner system %s "
+                               "is not equal with self system: %s\n",
+                               preferred_system_name, self_system_name);
                }
                rte_pktmbuf_free(lacp_pkt);
        } else
                rx_machine(internals, slave_id, NULL);
 }
 
+static void
+bond_mode_8023ad_dedicated_rxq_process(struct bond_dev_private *internals,
+                       uint16_t slave_id)
+{
+#define DEDICATED_QUEUE_BURST_SIZE 32
+       struct rte_mbuf *lacp_pkt[DEDICATED_QUEUE_BURST_SIZE];
+       uint16_t rx_count = rte_eth_rx_burst(slave_id,
+                               internals->mode4.dedicated_queues.rx_qid,
+                               lacp_pkt, DEDICATED_QUEUE_BURST_SIZE);
+
+       if (rx_count) {
+               uint16_t i;
+
+               for (i = 0; i < rx_count; i++)
+                       bond_mode_8023ad_handle_slow_pkt(internals, slave_id,
+                                       lacp_pkt[i]);
+       } else {
+               rx_machine_update(internals, slave_id, NULL);
+       }
+}
+
 static void
 bond_mode_8023ad_periodic_cb(void *arg)
 {
@@ -851,7 +887,7 @@ bond_mode_8023ad_periodic_cb(void *arg)
 
                if (ret >= 0 && link_info.link_status != 0) {
                        key = link_speed_key(link_info.link_speed) << 1;
-                       if (link_info.link_duplex == ETH_LINK_FULL_DUPLEX)
+                       if (link_info.link_duplex == RTE_ETH_LINK_FULL_DUPLEX)
                                key |= BOND_LINK_FULL_DUPLEX_KEY;
                } else {
                        key = 0;
@@ -911,15 +947,8 @@ bond_mode_8023ad_periodic_cb(void *arg)
 
                        rx_machine_update(internals, slave_id, lacp_pkt);
                } else {
-                       uint16_t rx_count = rte_eth_rx_burst(slave_id,
-                                       internals->mode4.dedicated_queues.rx_qid,
-                                       &lacp_pkt, 1);
-
-                       if (rx_count == 1)
-                               bond_mode_8023ad_handle_slow_pkt(internals,
-                                               slave_id, lacp_pkt);
-                       else
-                               rx_machine_update(internals, slave_id, NULL);
+                       bond_mode_8023ad_dedicated_rxq_process(internals,
+                                       slave_id);
                }
 
                periodic_machine(internals, slave_id);
@@ -1331,11 +1360,10 @@ bond_mode_8023ad_handle_slow_pkt(struct bond_dev_private *internals,
                } while (unlikely(retval == 0));
 
                m_hdr->marker.tlv_type_marker = MARKER_TLV_TYPE_RESP;
-               rte_eth_macaddr_get(slave_id, &m_hdr->eth_hdr.s_addr);
+               rte_eth_macaddr_get(slave_id, &m_hdr->eth_hdr.src_addr);
 
                if (internals->mode4.dedicated_queues.enabled == 0) {
-                       int retval = rte_ring_enqueue(port->tx_ring, pkt);
-                       if (retval != 0) {
+                       if (rte_ring_enqueue(port->tx_ring, pkt) != 0) {
                                /* reset timer */
                                port->rx_marker_timer = 0;
                                wrn = WRN_TX_QUEUE_FULL;
@@ -1355,8 +1383,7 @@ bond_mode_8023ad_handle_slow_pkt(struct bond_dev_private *internals,
                }
        } else if (likely(subtype == SLOW_SUBTYPE_LACP)) {
                if (internals->mode4.dedicated_queues.enabled == 0) {
-                       int retval = rte_ring_enqueue(port->rx_ring, pkt);
-                       if (retval != 0) {
+                       if (rte_ring_enqueue(port->rx_ring, pkt) != 0) {
                                /* If RX fing full free lacpdu message and drop packet */
                                wrn = WRN_RX_QUEUE_FULL;
                                goto free_out;