From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by dpdk.org (Postfix) with ESMTP id 012242E8B for ; Wed, 26 Nov 2014 12:06:32 +0100 (CET) Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga102.fm.intel.com with ESMTP; 26 Nov 2014 03:17:28 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.07,462,1413270000"; d="scan'208";a="638344340" Received: from irvmail001.ir.intel.com ([163.33.26.43]) by fmsmga002.fm.intel.com with ESMTP; 26 Nov 2014 03:17:27 -0800 Received: from sivswdev01.ir.intel.com (sivswdev01.ir.intel.com [10.237.217.45]) by irvmail001.ir.intel.com (8.14.3/8.13.6/MailSET/Hub) with ESMTP id sAQBHQ8a006103; Wed, 26 Nov 2014 11:17:26 GMT Received: from sivswdev01.ir.intel.com (localhost [127.0.0.1]) by sivswdev01.ir.intel.com with ESMTP id sAQBHQ3M028149; Wed, 26 Nov 2014 11:17:26 GMT Received: (from mkjastrx@localhost) by sivswdev01.ir.intel.com with id sAQBHPCT028145; Wed, 26 Nov 2014 11:17:25 GMT From: Michal Jastrzebski To: dev@dpdk.org Date: Wed, 26 Nov 2014 11:17:21 +0000 Message-Id: <1417000643-26885-1-git-send-email-michalx.k.jastrzebski@intel.com> X-Mailer: git-send-email 1.7.4.1 Subject: [dpdk-dev] [PATCH v6 0/2] bond: mode 4 support X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 26 Nov 2014 11:06:33 -0000 v6 changes - add commit log description to link bondig mode 4 v5 changes - fix compilation errors when CONFIG_RTE_LIBRTE_PMD_BOND=n v4 changes: - fix compilation error when building without mbuf refcnt - testpmd: add slave state information in "show bonding config X" command - change patch dependency to Declan Doherty v6 v3 changes: This is a rework of previous patchset. Basic functionality is the same but contain following changes: - use one global array of slaves instead separate instance for every bonded device (reduce memory usage). This also allow use of port id instead of offsetting to current active slaves. - make mode 4 immune to partner timings standard violation. - fix possible buffer overflow in RX function if caller provide buffer that is less than received packets (additional slow packets). - change/fix promiscus mode and MAC management. - fix compiling issues on gcc version less than 4.5 - bring API for tunig mode 4 parameters and expose mode 4 frames structure. - prevent console flood with warning messages if mode 4 RX/TX buffers are full. test-pmd: - add mode 4 support (force periodic TX if no packets received during 100ms period). Some forwardning modes (ex. rx only) does not allow mode 4 usage. - 'port start X' - check if X is valid value v2 changes: New version handles race issues with setting/cancelin callbacks, fixes promiscus mode setting in mode 4 and some other minor errors in mode 4 implementation. changes not related to mode 4: - fix memcpy() usage in bond_ethdev_tx_burst_balance() (OOM/undfined behaviour if TX burst fail) 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 (testpmd modified to satisfy this requirement) - 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. Pawel Wodkowski (2): bond: add mode 4 support v6 testpmd: add mode 4 support v6 app/test-pmd/cmdline.c | 28 +- app/test-pmd/csumonly.c | 9 + app/test-pmd/icmpecho.c | 21 +- app/test-pmd/iofwd.c | 9 + app/test-pmd/macfwd-retry.c | 9 + app/test-pmd/macfwd.c | 9 + app/test-pmd/macswap.c | 9 + app/test-pmd/testpmd.c | 50 +- app/test-pmd/testpmd.h | 11 +- lib/librte_ether/rte_ether.h | 1 + lib/librte_pmd_bond/Makefile | 2 + lib/librte_pmd_bond/rte_eth_bond.h | 5 + lib/librte_pmd_bond/rte_eth_bond_8023ad.c | 1216 +++++++++++++++++++++ lib/librte_pmd_bond/rte_eth_bond_8023ad.h | 214 ++++ lib/librte_pmd_bond/rte_eth_bond_8023ad_private.h | 308 ++++++ lib/librte_pmd_bond/rte_eth_bond_api.c | 91 +- lib/librte_pmd_bond/rte_eth_bond_args.c | 1 + lib/librte_pmd_bond/rte_eth_bond_pmd.c | 262 ++++- lib/librte_pmd_bond/rte_eth_bond_private.h | 31 +- 19 files changed, 2227 insertions(+), 59 deletions(-) create mode 100644 lib/librte_pmd_bond/rte_eth_bond_8023ad.c create mode 100644 lib/librte_pmd_bond/rte_eth_bond_8023ad.h create mode 100644 lib/librte_pmd_bond/rte_eth_bond_8023ad_private.h -- 1.7.9.5