http://bugs.dpdk.org/show_bug.cgi?id=1900
Bug ID: 1900
Summary: The DPDK bond driver does not support the secondary
process.
Product: DPDK
Version: unspecified
Hardware: All
OS: All
Status: UNCONFIRMED
Severity: normal
Priority: Normal
Component: ethdev
Assignee: [email protected]
Reporter: [email protected]
Target Milestone: ---
When I use the bond4 mode (dedicated_queues_enable), I find that DPDK does not
support the secondary mode.
1.bond_probe:
if (rte_eal_process_type() == RTE_PROC_SECONDARY) {
eth_dev = rte_eth_dev_attach_secondary(name);
if (!eth_dev) {
RTE_BOND_LOG(ERR, "Failed to probe %s", name);
return -1;
}
/* TODO: request info from primary to set up Rx and Tx */
eth_dev->dev_ops = &default_dev_ops;
eth_dev->device = &dev->device;
rte_eth_dev_probing_finish(eth_dev);
return 0;
}
Here don`t set eth_dev->tx_pkt_burst and eth_dev->rx_pkt_burst.
2.struct port bond_mode_8023ad_ports[RTE_MAX_ETHPORTS];
This is a global variable, and the content of the primary is not synchronized.
problem example:
rx_burst_8023ad:
...
collecting = ACTOR_STATE(&bond_mode_8023ad_ports[members[idx]],
COLLECTING);
...
/* Remove packet from array if:
* - it is slow packet but no dedicated rxq is present,
* - member is not in collecting state,
* - bonding interface is not in promiscuous mode and
* packet address isn't in mac_addrs array:
* - packet is unicast,
* - packet is multicast and bonding interface
* is not in allmulti,
*/
if (unlikely(
(!dedicated_rxq &&
is_lacp_packets(hdr->ether_type, subtype,
bufs[j])) ||
!collecting ||
(!promisc &&
!is_bond_mac_addr(&hdr->dst_addr, bond_mac,
BOND_MAX_MAC_ADDRS) &&
(rte_is_unicast_ether_addr(&hdr->dst_addr) ||
!allmulti)))) {
...
}
because the bond_mode_8023ad_ports is not synchronized to the primary process.
As a result, the value of collecting is 0, and non-LACP packets are discarded.
Why does the DPDK bond not support the secondary mode? When will the DPDK bond
support the secondary mode?
--
You are receiving this mail because:
You are the assignee for the bug.