bond: add mode 4
authorPawel Wodkowski <pawelx.wodkowski@intel.com>
Thu, 27 Nov 2014 18:01:10 +0000 (18:01 +0000)
committerThomas Monjalon <thomas.monjalon@6wind.com>
Thu, 27 Nov 2014 20:20:58 +0000 (21:20 +0100)
commit46fb436836790ebcfb9779773ec827682ad05a43
treee888a77c467c285a8b751ee5438912bb61fb2e9f
parent80083092aa44a0582d8705656a280f3aa7e53817
bond: add mode 4

This patch set add support for dynamic link aggregation (mode 4) to the
librte_pmd_bond library. This mode provides auto negotiation/configuration
of peers and well as link status changes monitoring using out of band
LACP (link aggregation control protocol) messages. For further details of
LACP specification see the IEEE 802.3ad/802.1AX standards. It is also
described here
https://www.kernel.org/doc/Documentation/networking/bonding.txt.

In this implementation we have an array of mode 4 settings for each slave.
There is also assumption that for every port is one aggregator (it might
be unused if better is found).

Difference in this implementation vs Linux implementation:
- this implementation it is not directly based on state machines but current
  state is calculated from actor and partner states (and other things too).

Some implementation details:
- during rx burst every packet Is checked if this is LACP or marker packet.
  If it is LACP frame it is passed to mode 4 logic using slaves rx ring  and
  removed from rx buffer before it is returned
- in tx burst, packets from mode 4 (if any) are injected into each slave.
- there is a timer running in background to process/produce mode 4
  frames form rx/to tx functions.

Some requirements for this mode:
- for LACP mode to work rx and tx burst functions must be invoked
  at least in 100ms intervals
- provided buffer to rx burst should be at least 2x slave count size. This is
  not needed but might increase performance especially during initial
  handshake.

Signed-off-by: Pawel Wodkowski <pawelx.wodkowski@intel.com>
Acked-by: Declan Doherty <declan.doherty@intel.com>
lib/librte_ether/rte_ether.h
lib/librte_pmd_bond/Makefile
lib/librte_pmd_bond/rte_eth_bond.h
lib/librte_pmd_bond/rte_eth_bond_8023ad.c [new file with mode: 0644]
lib/librte_pmd_bond/rte_eth_bond_8023ad.h [new file with mode: 0644]
lib/librte_pmd_bond/rte_eth_bond_8023ad_private.h [new file with mode: 0644]
lib/librte_pmd_bond/rte_eth_bond_api.c
lib/librte_pmd_bond/rte_eth_bond_args.c
lib/librte_pmd_bond/rte_eth_bond_pmd.c
lib/librte_pmd_bond/rte_eth_bond_private.h