[dpdk-dev] [PATCH 4/4] Add Link Bonding Library to Doxygen
From: Declan Doherty Signed-off-by: Declan Doherty --- doc/doxy-api-index.md | 1 + doc/doxy-api.conf | 1 + 2 files changed, 2 insertions(+) diff --git a/doc/doxy-api-index.md b/doc/doxy-api-index.md index 2825c08..2206c68 100644 --- a/doc/doxy-api-index.md +++ b/doc/doxy-api-index.md @@ -36,6 +36,7 @@ API {#index} There are many libraries, so their headers may be grouped by topics: - **device**: + [bond] (@ref rte_bond.h), [ethdev] (@ref rte_ethdev.h), [devargs](@ref rte_devargs.h), [KNI](@ref rte_kni.h), diff --git a/doc/doxy-api.conf b/doc/doxy-api.conf index 642f77a..a9c5b30 100644 --- a/doc/doxy-api.conf +++ b/doc/doxy-api.conf @@ -30,6 +30,7 @@ PROJECT_NAME= DPDK INPUT = doc/doxy-api-index.md \ + lib/librte_bond \ lib/librte_eal/common/include \ lib/librte_ether \ lib/librte_hash \ -- 1.8.5.3
[dpdk-dev] [PATCH 0/4] Link Bonding Library
From: Declan Doherty Initial release of Link Bonding Library (lib/librte_bond) with support for bonding modes : 0 - Round Robin 1 - Active Backup 2 - Balance l2 / l23 / l34 3 - Broadcast patches split: 1 - library + makefile changes 2 - Unit test suite, including code to generate packet bursts for testing rx and tx functionality of bonded device and a virtual/stubbed out ethdev for use as slave ethdev in testing 3 - Link bonding integration into testpmd, including : - Includes the ability to create new bonded devices. - Add /remove bonding slave devices. - Interogate bonded device stats/configuration - Change bonding modes and select balance transmit polices 4 - Add Link Bonding Library to Doxygen app/test-pmd/cmdline.c| 550 + app/test-pmd/parameters.c |4 +- app/test-pmd/testpmd.c| 28 +- app/test-pmd/testpmd.h|2 + app/test/Makefile |3 + app/test/commands.c |3 + app/test/packet_burst_generator.c | 276 +++ app/test/packet_burst_generator.h | 85 + app/test/test.h |1 + app/test/test_link_bonding.c | 4007 + app/test/virtual_pmd.c| 580 ++ app/test/virtual_pmd.h| 74 + config/common_bsdapp |5 + config/common_linuxapp|5 + doc/doxy-api-index.md |1 + doc/doxy-api.conf |1 + lib/Makefile |1 + lib/librte_bond/Makefile | 28 + lib/librte_bond/rte_bond.c| 1679 lib/librte_bond/rte_bond.h| 228 +++ mk/rte.app.mk |5 + 21 files changed, 7564 insertions(+), 2 deletions(-) create mode 100644 app/test/packet_burst_generator.c create mode 100644 app/test/packet_burst_generator.h create mode 100644 app/test/test_link_bonding.c create mode 100644 app/test/virtual_pmd.c create mode 100644 app/test/virtual_pmd.h create mode 100644 lib/librte_bond/Makefile create mode 100644 lib/librte_bond/rte_bond.c create mode 100644 lib/librte_bond/rte_bond.h -- 1.8.5.3
[dpdk-dev] [PATCH 1/4] Link Bonding Library
From: Declan Doherty Link Bonding Library (lib/librte_bond) initial release with support for Mode 0 - Round Robin Mode 1 - Active Backup Mode 2 - Balance -> Supports 3 transmit polices (layer 2, layer 2+3, layer Mode 3 - Broadcast Signed-off-by: Declan Doherty --- config/common_bsdapp |5 + config/common_linuxapp |5 + lib/Makefile |1 + lib/librte_bond/Makefile | 28 + lib/librte_bond/rte_bond.c | 1679 lib/librte_bond/rte_bond.h | 228 ++ mk/rte.app.mk |5 + 7 files changed, 1951 insertions(+) create mode 100644 lib/librte_bond/Makefile create mode 100644 lib/librte_bond/rte_bond.c create mode 100644 lib/librte_bond/rte_bond.h diff --git a/config/common_bsdapp b/config/common_bsdapp index 2cc7b80..53ed8b9 100644 --- a/config/common_bsdapp +++ b/config/common_bsdapp @@ -187,6 +187,11 @@ CONFIG_RTE_PMD_RING_MAX_TX_RINGS=16 CONFIG_RTE_LIBRTE_PMD_PCAP=y # +# Compile link bonding library +# +CONFIG_RTE_LIBRTE_BOND=y + +# # Do prefetch of packet data within PMD driver receive function # CONFIG_RTE_PMD_PACKET_PREFETCH=y diff --git a/config/common_linuxapp b/config/common_linuxapp index 62619c6..35b525a 100644 --- a/config/common_linuxapp +++ b/config/common_linuxapp @@ -211,6 +211,11 @@ CONFIG_RTE_PMD_RING_MAX_TX_RINGS=16 CONFIG_RTE_LIBRTE_PMD_PCAP=n +# +# Compile link bonding library +# +CONFIG_RTE_LIBRTE_BOND=y + CONFIG_RTE_LIBRTE_PMD_XENVIRT=n # diff --git a/lib/Makefile b/lib/Makefile index b92b392..9995ba8 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -47,6 +47,7 @@ DIRS-$(CONFIG_RTE_LIBRTE_PMD_PCAP) += librte_pmd_pcap DIRS-$(CONFIG_RTE_LIBRTE_VIRTIO_PMD) += librte_pmd_virtio DIRS-$(CONFIG_RTE_LIBRTE_VMXNET3_PMD) += librte_pmd_vmxnet3 DIRS-$(CONFIG_RTE_LIBRTE_PMD_XENVIRT) += librte_pmd_xenvirt +DIRS-$(CONFIG_RTE_LIBRTE_BOND) += librte_bond DIRS-$(CONFIG_RTE_LIBRTE_HASH) += librte_hash DIRS-$(CONFIG_RTE_LIBRTE_LPM) += librte_lpm DIRS-$(CONFIG_RTE_LIBRTE_NET) += librte_net diff --git a/lib/librte_bond/Makefile b/lib/librte_bond/Makefile new file mode 100644 index 000..7514378 --- /dev/null +++ b/lib/librte_bond/Makefile @@ -0,0 +1,28 @@ +# + +include $(RTE_SDK)/mk/rte.vars.mk + +# +# library name +# +LIB = librte_bond.a + +CFLAGS += -O3 +CFLAGS += $(WERROR_FLAGS) + +# +# all source are stored in SRCS-y +# +SRCS-$(CONFIG_RTE_LIBRTE_BOND) += rte_bond.c + + +# +# Export include files +# +SYMLINK-y-include += rte_bond.h + +# this lib depends upon: +DEPDIRS-$(CONFIG_RTE_LIBRTE_BOND) += lib/librte_mbuf lib/librte_ether +DEPDIRS-$(CONFIG_RTE_LIBRTE_BOND) += lib/librte_malloc + +include $(RTE_SDK)/mk/rte.lib.mk diff --git a/lib/librte_bond/rte_bond.c b/lib/librte_bond/rte_bond.c new file mode 100644 index 000..35dff25 --- /dev/null +++ b/lib/librte_bond/rte_bond.c @@ -0,0 +1,1679 @@ +/*- + * BSD LICENSE + * + * Copyright(c) 2010-2014 Intel Corporation. All rights reserved. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Intel Corporation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "rte_bond.h" + +static const char *driver_name = "Link Bonding PMD"; + +/** Port Queue Mapping Structure */ +struct bond_rx_queue { + int queue_id; /**< Queue Id */ +
[dpdk-dev] [PATCH 2/4] Link bonding unit tests
From: Declan Doherty Link bonding unit tests, including code to generate packet bursts for testing rx and tx functionality of bonded device and a virtual/stubbed out ethdev for use as slave ethdev in testing Signed-off-by: Declan Doherty --- app/test/Makefile |3 + app/test/commands.c |3 + app/test/packet_burst_generator.c | 276 +++ app/test/packet_burst_generator.h | 85 + app/test/test.h |1 + app/test/test_link_bonding.c | 4007 + app/test/virtual_pmd.c| 580 ++ app/test/virtual_pmd.h| 74 + 8 files changed, 5029 insertions(+) create mode 100644 app/test/packet_burst_generator.c create mode 100644 app/test/packet_burst_generator.h create mode 100644 app/test/test_link_bonding.c create mode 100644 app/test/virtual_pmd.c create mode 100644 app/test/virtual_pmd.h diff --git a/app/test/Makefile b/app/test/Makefile index b49785e..ac55a11 100644 --- a/app/test/Makefile +++ b/app/test/Makefile @@ -56,6 +56,7 @@ SRCS-$(CONFIG_RTE_APP_TEST) += test_ring_perf.c SRCS-$(CONFIG_RTE_APP_TEST) += test_rwlock.c SRCS-$(CONFIG_RTE_APP_TEST) += test_timer.c SRCS-$(CONFIG_RTE_APP_TEST) += test_mempool.c +SRCS-$(CONFIG_RTE_APP_TEST) += test_link_bonding.c SRCS-$(CONFIG_RTE_APP_TEST) += test_mempool_perf.c SRCS-$(CONFIG_RTE_APP_TEST) += test_mbuf.c SRCS-$(CONFIG_RTE_APP_TEST) += test_logs.c @@ -94,6 +95,8 @@ SRCS-$(CONFIG_RTE_APP_TEST) += test_common.c SRCS-$(CONFIG_RTE_APP_TEST) += test_timer_perf.c SRCS-$(CONFIG_RTE_APP_TEST) += test_ivshmem.c SRCS-$(CONFIG_RTE_APP_TEST) += test_devargs.c +SRCS-$(CONFIG_RTE_APP_TEST) += virtual_pmd.c +SRCS-$(CONFIG_RTE_APP_TEST) += packet_burst_generator.c ifeq ($(CONFIG_RTE_APP_TEST),y) SRCS-$(CONFIG_RTE_LIBRTE_ACL) += test_acl.c diff --git a/app/test/commands.c b/app/test/commands.c index efa8566..4d0ec3b 100644 --- a/app/test/commands.c +++ b/app/test/commands.c @@ -157,6 +157,8 @@ static void cmd_autotest_parsed(void *parsed_result, ret = test_timer(); if (!strcmp(res->autotest, "timer_perf_autotest")) ret = test_timer_perf(); + if (!strcmp(res->autotest, "link_bonding_autotest")) + ret = test_link_bonding(); if (!strcmp(res->autotest, "mempool_autotest")) ret = test_mempool(); if (!strcmp(res->autotest, "mempool_perf_autotest")) @@ -221,6 +223,7 @@ cmdline_parse_token_string_t cmd_autotest_autotest = "alarm_autotest#interrupt_autotest#" "version_autotest#eal_fs_autotest#" "cmdline_autotest#func_reentrancy_autotest#" + "link_bonding_autotest#" "mempool_perf_autotest#hash_perf_autotest#" "memcpy_perf_autotest#ring_perf_autotest#" "red_autotest#meter_autotest#sched_autotest#" diff --git a/app/test/packet_burst_generator.c b/app/test/packet_burst_generator.c new file mode 100644 index 000..8838068 --- /dev/null +++ b/app/test/packet_burst_generator.c @@ -0,0 +1,276 @@ +/*- + * BSD LICENSE + * + * Copyright(c) 2010-2014 Intel Corporation. All rights reserved. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Intel Corporation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include + +#include "packet_burst_generator.h" + +#define UDP_SRC_PORT 1024 +#define UDP_DST_PORT
[dpdk-dev] [PATCH 3/4] Link bonding integration into testpmd
From: Declan Doherty Adding link bonding support to testpmd. - Includes the ability to create new bonded devices. - Add /remove bonding slave devices. - Interogate bonded device stats/configuration - Change bonding modes and select balance transmit polices Signed-off-by: Declan Doherty --- app/test-pmd/cmdline.c| 550 ++ app/test-pmd/parameters.c | 4 +- app/test-pmd/testpmd.c| 28 ++- app/test-pmd/testpmd.h| 2 + 4 files changed, 582 insertions(+), 2 deletions(-) diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index 0be28f6..7c7c9f3 100644 --- a/app/test-pmd/cmdline.c +++ b/app/test-pmd/cmdline.c @@ -84,6 +84,9 @@ #include #include #include +#ifdef RTE_LIBRTE_BOND +#include +#endif #include "testpmd.h" @@ -393,6 +396,31 @@ static void cmd_help_long_parsed(void *parsed_result, " Show the bypass configuration for a bypass enabled NIC" " using the lowest port on the NIC.\n\n" #endif +#ifdef RTE_LIBRTE_BOND + "create bonded device (mode) (socket)\n" + " Create a new bonded device with specific bonding mode and socket.\n\n" + + "add bonding slave (slave_id) (port_id)\n" + " Add a slave device to a bonded device.\n\n" + + "remove bonding slave (slave_id) (port_id)\n" + " Remove a slave device from a bonded device.\n\n" + + "set bonding mode (value) (port_id)\n" + " Set the bonding mode on a bonded device.\n\n" + + "set bonding primary (slave_id) (port_id)\n" + " Set the primary slave for a bonded device.\n\n" + + "show bonding config (port_id)\n" + " Show the bonding config for port_id.\n\n" + + "set bonding mac_addr (port_id) (address)\n" + " Set the MAC address of a bonded device.\n\n" + + "set bonding xmit_balance_policy (port_id) (l2|l23|l34)\n" + " Set the transmit balance policy for bonded device running in balance mode.\n\n" +#endif , list_pkt_forwarding_modes() ); @@ -2849,6 +2877,518 @@ cmdline_parse_inst_t cmd_show_bypass_config = { }; #endif +#ifdef RTE_LIBRTE_BOND +/* *** SET BONDING MODE *** */ +struct cmd_set_bonding_mode_result { + cmdline_fixed_string_t set; + cmdline_fixed_string_t bonding; + cmdline_fixed_string_t mode; + uint8_t value; + uint8_t port_id; +}; + +static void cmd_set_bonding_mode_parsed(void *parsed_result, + __attribute__((unused)) struct cmdline *cl, + __attribute__((unused)) void *data) +{ + struct cmd_set_bonding_mode_result *res = parsed_result; + portid_t port_id = res->port_id; + + /* Set the bonding mode for the relevant port. */ + if (0 != rte_eth_bond_mode_set(port_id, res->value)) { + printf("\t Failed to set bonding mode for port = %d.\n", port_id); + } +} + +cmdline_parse_token_string_t cmd_setbonding_mode_set = +TOKEN_STRING_INITIALIZER(struct cmd_set_bonding_mode_result, + set, "set"); +cmdline_parse_token_string_t cmd_setbonding_mode_bonding = +TOKEN_STRING_INITIALIZER(struct cmd_set_bonding_mode_result, + bonding, "bonding"); +cmdline_parse_token_string_t cmd_setbonding_mode_mode = +TOKEN_STRING_INITIALIZER(struct cmd_set_bonding_mode_result, + mode, "mode"); +cmdline_parse_token_num_t cmd_setbonding_mode_value = +TOKEN_NUM_INITIALIZER(struct cmd_set_bonding_mode_result, + value, UINT8); +cmdline_parse_token_num_t cmd_setbonding_mode_port = +TOKEN_NUM_INITIALIZER(struct cmd_set_bonding_mode_result, + port_id, UINT8); + +cmdline_parse_inst_t cmd_set_bonding_mode = { .f = cmd_set_bonding_mode_parsed, + .help_str = "set bonding mode (mode_value) (port_id): " + "Set the bonding mode for port_id", .data = NULL, .tokens = { + (void *) &cmd_setbonding_mode_set, + (void *) &cmd_setbonding_mode_bonding, + (void *) &cmd_setbonding_mode_mode, + (void *) &cmd_setbonding_mode_value, + (void *) &cmd_setbonding_mode_port, + NULL, }, }; + +/* *** SET BALANCE XMIT POLICY *** */ +struct cmd_set_bonding_balance_xmit_policy_result { + cmdline_fixed_string_t set; + cmdline_fixed_string_t bonding; + cmdline_fixed_string_t balance_xmit_policy; + uint8_t port_id; + cmdline_fixed_string_t policy; +}; + +static void cmd_set_bonding_balance_xmit_policy_parsed(void *parsed_
[dpdk-dev] [PATCH v2 1/4] Link Bonding Library
From: Declan Doherty - Broadcast TX burst broadcast bug fix - Add/remove slave behavior fix - Checkpatch fixes Signed-off-by: Declan Doherty --- config/common_bsdapp |5 + config/common_linuxapp |5 + lib/Makefile |1 + lib/librte_bond/Makefile | 28 + lib/librte_bond/rte_bond.c | 1682 lib/librte_bond/rte_bond.h | 228 ++ mk/rte.app.mk |5 + 7 files changed, 1954 insertions(+) create mode 100644 lib/librte_bond/Makefile create mode 100644 lib/librte_bond/rte_bond.c create mode 100644 lib/librte_bond/rte_bond.h diff --git a/config/common_bsdapp b/config/common_bsdapp index 2cc7b80..53ed8b9 100644 --- a/config/common_bsdapp +++ b/config/common_bsdapp @@ -187,6 +187,11 @@ CONFIG_RTE_PMD_RING_MAX_TX_RINGS=16 CONFIG_RTE_LIBRTE_PMD_PCAP=y # +# Compile link bonding library +# +CONFIG_RTE_LIBRTE_BOND=y + +# # Do prefetch of packet data within PMD driver receive function # CONFIG_RTE_PMD_PACKET_PREFETCH=y diff --git a/config/common_linuxapp b/config/common_linuxapp index 62619c6..35b525a 100644 --- a/config/common_linuxapp +++ b/config/common_linuxapp @@ -211,6 +211,11 @@ CONFIG_RTE_PMD_RING_MAX_TX_RINGS=16 CONFIG_RTE_LIBRTE_PMD_PCAP=n +# +# Compile link bonding library +# +CONFIG_RTE_LIBRTE_BOND=y + CONFIG_RTE_LIBRTE_PMD_XENVIRT=n # diff --git a/lib/Makefile b/lib/Makefile index b92b392..9995ba8 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -47,6 +47,7 @@ DIRS-$(CONFIG_RTE_LIBRTE_PMD_PCAP) += librte_pmd_pcap DIRS-$(CONFIG_RTE_LIBRTE_VIRTIO_PMD) += librte_pmd_virtio DIRS-$(CONFIG_RTE_LIBRTE_VMXNET3_PMD) += librte_pmd_vmxnet3 DIRS-$(CONFIG_RTE_LIBRTE_PMD_XENVIRT) += librte_pmd_xenvirt +DIRS-$(CONFIG_RTE_LIBRTE_BOND) += librte_bond DIRS-$(CONFIG_RTE_LIBRTE_HASH) += librte_hash DIRS-$(CONFIG_RTE_LIBRTE_LPM) += librte_lpm DIRS-$(CONFIG_RTE_LIBRTE_NET) += librte_net diff --git a/lib/librte_bond/Makefile b/lib/librte_bond/Makefile new file mode 100644 index 000..7514378 --- /dev/null +++ b/lib/librte_bond/Makefile @@ -0,0 +1,28 @@ +# + +include $(RTE_SDK)/mk/rte.vars.mk + +# +# library name +# +LIB = librte_bond.a + +CFLAGS += -O3 +CFLAGS += $(WERROR_FLAGS) + +# +# all source are stored in SRCS-y +# +SRCS-$(CONFIG_RTE_LIBRTE_BOND) += rte_bond.c + + +# +# Export include files +# +SYMLINK-y-include += rte_bond.h + +# this lib depends upon: +DEPDIRS-$(CONFIG_RTE_LIBRTE_BOND) += lib/librte_mbuf lib/librte_ether +DEPDIRS-$(CONFIG_RTE_LIBRTE_BOND) += lib/librte_malloc + +include $(RTE_SDK)/mk/rte.lib.mk diff --git a/lib/librte_bond/rte_bond.c b/lib/librte_bond/rte_bond.c new file mode 100644 index 000..c079b89 --- /dev/null +++ b/lib/librte_bond/rte_bond.c @@ -0,0 +1,1682 @@ +/*- + * BSD LICENSE + * + * Copyright(c) 2010-2014 Intel Corporation. All rights reserved. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Intel Corporation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "rte_bond.h" + +static const char *driver_name = "Link Bonding PMD"; + +/** Port Queue Mapping Structure */ +struct bond_rx_queue { + int queue_id; /**< Queue Id */ + struct bond_dev_private *dev_private; /**< Reference to eth_dev private +
[dpdk-dev] [PATCH v2 0/4] Link Bonding Library
From: Declan Doherty v2 patch additions, fix for tx burst broadcast, incrementing the reference count on each mbuf by the number of slaves - 1 add/remove slave behavior chnange to fix primary slave port assignment patchcheck code fixes Initial release of Link Bonding Library (lib/librte_bond) with support for bonding modes : 0 - Round Robin 1 - Active Backup 2 - Balance l2 / l23 / l34 3 - Broadcast patches split: 1 - library + makefile changes 2 - Unit test suite, including code to generate packet bursts for testing rx and tx functionality of bonded device and a virtual/stubbed out ethdev for use as slave ethdev in testing 3 - Link bonding integration into testpmd, including : - Includes the ability to create new bonded devices. - Add /remove bonding slave devices. - Interogate bonded device stats/configuration - Change bonding modes and select balance transmit polices 4 - Add Link Bonding Library to Doxygen app/test-pmd/cmdline.c| 570 ++ app/test-pmd/config.c |4 +- app/test-pmd/parameters.c |4 +- app/test-pmd/testpmd.c| 37 +- app/test-pmd/testpmd.h|2 + app/test/Makefile |3 + app/test/commands.c |3 + app/test/packet_burst_generator.c | 289 +++ app/test/packet_burst_generator.h | 78 + app/test/test.h |1 + app/test/test_link_bonding.c | 3943 + app/test/virtual_pmd.c| 574 ++ app/test/virtual_pmd.h| 74 + config/common_bsdapp |5 + config/common_linuxapp|5 + doc/doxy-api-index.md |1 + doc/doxy-api.conf |1 + lib/Makefile |1 + lib/librte_bond/Makefile | 28 + lib/librte_bond/rte_bond.c| 1682 lib/librte_bond/rte_bond.h| 228 +++ mk/rte.app.mk |5 + 22 files changed, 7531 insertions(+), 7 deletions(-) create mode 100644 app/test/packet_burst_generator.c create mode 100644 app/test/packet_burst_generator.h create mode 100644 app/test/test_link_bonding.c create mode 100644 app/test/virtual_pmd.c create mode 100644 app/test/virtual_pmd.h create mode 100644 lib/librte_bond/Makefile create mode 100644 lib/librte_bond/rte_bond.c create mode 100644 lib/librte_bond/rte_bond.h -- 1.8.5.3
[dpdk-dev] [PATCH v2 2/4] Link bonding unit tests, including: - code to generate packet bursts for testing rx and tx functionality of bonded device - virtual/stubbed out ethdev for use as slave ethdev
From: Declan Doherty Signed-off-by: Declan Doherty --- app/test/Makefile |3 + app/test/commands.c |3 + app/test/packet_burst_generator.c | 289 +++ app/test/packet_burst_generator.h | 78 + app/test/test.h |1 + app/test/test_link_bonding.c | 3943 + app/test/virtual_pmd.c| 574 ++ app/test/virtual_pmd.h| 74 + 8 files changed, 4965 insertions(+) create mode 100644 app/test/packet_burst_generator.c create mode 100644 app/test/packet_burst_generator.h create mode 100644 app/test/test_link_bonding.c create mode 100644 app/test/virtual_pmd.c create mode 100644 app/test/virtual_pmd.h diff --git a/app/test/Makefile b/app/test/Makefile index b49785e..ac55a11 100644 --- a/app/test/Makefile +++ b/app/test/Makefile @@ -56,6 +56,7 @@ SRCS-$(CONFIG_RTE_APP_TEST) += test_ring_perf.c SRCS-$(CONFIG_RTE_APP_TEST) += test_rwlock.c SRCS-$(CONFIG_RTE_APP_TEST) += test_timer.c SRCS-$(CONFIG_RTE_APP_TEST) += test_mempool.c +SRCS-$(CONFIG_RTE_APP_TEST) += test_link_bonding.c SRCS-$(CONFIG_RTE_APP_TEST) += test_mempool_perf.c SRCS-$(CONFIG_RTE_APP_TEST) += test_mbuf.c SRCS-$(CONFIG_RTE_APP_TEST) += test_logs.c @@ -94,6 +95,8 @@ SRCS-$(CONFIG_RTE_APP_TEST) += test_common.c SRCS-$(CONFIG_RTE_APP_TEST) += test_timer_perf.c SRCS-$(CONFIG_RTE_APP_TEST) += test_ivshmem.c SRCS-$(CONFIG_RTE_APP_TEST) += test_devargs.c +SRCS-$(CONFIG_RTE_APP_TEST) += virtual_pmd.c +SRCS-$(CONFIG_RTE_APP_TEST) += packet_burst_generator.c ifeq ($(CONFIG_RTE_APP_TEST),y) SRCS-$(CONFIG_RTE_LIBRTE_ACL) += test_acl.c diff --git a/app/test/commands.c b/app/test/commands.c index efa8566..4d0ec3b 100644 --- a/app/test/commands.c +++ b/app/test/commands.c @@ -157,6 +157,8 @@ static void cmd_autotest_parsed(void *parsed_result, ret = test_timer(); if (!strcmp(res->autotest, "timer_perf_autotest")) ret = test_timer_perf(); + if (!strcmp(res->autotest, "link_bonding_autotest")) + ret = test_link_bonding(); if (!strcmp(res->autotest, "mempool_autotest")) ret = test_mempool(); if (!strcmp(res->autotest, "mempool_perf_autotest")) @@ -221,6 +223,7 @@ cmdline_parse_token_string_t cmd_autotest_autotest = "alarm_autotest#interrupt_autotest#" "version_autotest#eal_fs_autotest#" "cmdline_autotest#func_reentrancy_autotest#" + "link_bonding_autotest#" "mempool_perf_autotest#hash_perf_autotest#" "memcpy_perf_autotest#ring_perf_autotest#" "red_autotest#meter_autotest#sched_autotest#" diff --git a/app/test/packet_burst_generator.c b/app/test/packet_burst_generator.c new file mode 100644 index 000..8c535f6 --- /dev/null +++ b/app/test/packet_burst_generator.c @@ -0,0 +1,289 @@ +/*- + * BSD LICENSE + * + * Copyright(c) 2010-2014 Intel Corporation. All rights reserved. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Intel Corporation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include + +#include "packet_burst_generator.h" + +#define UDP_SRC_PORT 1024 +#define UDP_DST_PORT 1024 + + +#define IP_DEFTTL 64 /* from RFC 1340. */ +#define IP_VERSION 0x40 +#define IP_HDRLEN 0x05 /* default IP header length == five 32-bits words. */ +#define IP_VHL_DEF (IP_VERSION
[dpdk-dev] [PATCH v2 4/4] Add Link Bonding Library to Doxygen
From: Declan Doherty Signed-off-by: Declan Doherty --- doc/doxy-api-index.md | 1 + doc/doxy-api.conf | 1 + 2 files changed, 2 insertions(+) diff --git a/doc/doxy-api-index.md b/doc/doxy-api-index.md index 2825c08..2206c68 100644 --- a/doc/doxy-api-index.md +++ b/doc/doxy-api-index.md @@ -36,6 +36,7 @@ API {#index} There are many libraries, so their headers may be grouped by topics: - **device**: + [bond] (@ref rte_bond.h), [ethdev] (@ref rte_ethdev.h), [devargs](@ref rte_devargs.h), [KNI](@ref rte_kni.h), diff --git a/doc/doxy-api.conf b/doc/doxy-api.conf index 642f77a..a9c5b30 100644 --- a/doc/doxy-api.conf +++ b/doc/doxy-api.conf @@ -30,6 +30,7 @@ PROJECT_NAME= DPDK INPUT = doc/doxy-api-index.md \ + lib/librte_bond \ lib/librte_eal/common/include \ lib/librte_ether \ lib/librte_hash \ -- 1.8.5.3
[dpdk-dev] [PATCH v2 3/4] Adding link bonding support to testpmd. - Includes the ability to create new bonded devices. - Add /remove bonding slave devices. - Interogate bonded device stats/configurati
From: Declan Doherty - Display of port mac address fix - Checkpatch fixes Signed-off-by: Declan Doherty --- app/test-pmd/cmdline.c| 570 ++ app/test-pmd/config.c | 4 +- app/test-pmd/parameters.c | 4 +- app/test-pmd/testpmd.c| 37 ++- app/test-pmd/testpmd.h| 2 + 5 files changed, 610 insertions(+), 7 deletions(-) diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index 0be28f6..27909f3 100644 --- a/app/test-pmd/cmdline.c +++ b/app/test-pmd/cmdline.c @@ -84,6 +84,9 @@ #include #include #include +#ifdef RTE_LIBRTE_BOND +#include +#endif #include "testpmd.h" @@ -393,6 +396,31 @@ static void cmd_help_long_parsed(void *parsed_result, " Show the bypass configuration for a bypass enabled NIC" " using the lowest port on the NIC.\n\n" #endif +#ifdef RTE_LIBRTE_BOND + "create bonded device (mode) (socket)\n" + " Create a new bonded device with specific bonding mode and socket.\n\n" + + "add bonding slave (slave_id) (port_id)\n" + " Add a slave device to a bonded device.\n\n" + + "remove bonding slave (slave_id) (port_id)\n" + " Remove a slave device from a bonded device.\n\n" + + "set bonding mode (value) (port_id)\n" + " Set the bonding mode on a bonded device.\n\n" + + "set bonding primary (slave_id) (port_id)\n" + " Set the primary slave for a bonded device.\n\n" + + "show bonding config (port_id)\n" + " Show the bonding config for port_id.\n\n" + + "set bonding mac_addr (port_id) (address)\n" + " Set the MAC address of a bonded device.\n\n" + + "set bonding xmit_balance_policy (port_id) (l2|l23|l34)\n" + " Set the transmit balance policy for bonded device running in balance mode.\n\n" +#endif , list_pkt_forwarding_modes() ); @@ -2849,6 +2877,538 @@ cmdline_parse_inst_t cmd_show_bypass_config = { }; #endif +#ifdef RTE_LIBRTE_BOND +/* *** SET BONDING MODE *** */ +struct cmd_set_bonding_mode_result { + cmdline_fixed_string_t set; + cmdline_fixed_string_t bonding; + cmdline_fixed_string_t mode; + uint8_t value; + uint8_t port_id; +}; + +static void cmd_set_bonding_mode_parsed(void *parsed_result, + __attribute__((unused)) struct cmdline *cl, + __attribute__((unused)) void *data) +{ + struct cmd_set_bonding_mode_result *res = parsed_result; + portid_t port_id = res->port_id; + + /* Set the bonding mode for the relevant port. */ + if (0 != rte_eth_bond_mode_set(port_id, res->value)) + printf("\t Failed to set bonding mode for port = %d.\n", port_id); +} + +cmdline_parse_token_string_t cmd_setbonding_mode_set = +TOKEN_STRING_INITIALIZER(struct cmd_set_bonding_mode_result, + set, "set"); +cmdline_parse_token_string_t cmd_setbonding_mode_bonding = +TOKEN_STRING_INITIALIZER(struct cmd_set_bonding_mode_result, + bonding, "bonding"); +cmdline_parse_token_string_t cmd_setbonding_mode_mode = +TOKEN_STRING_INITIALIZER(struct cmd_set_bonding_mode_result, + mode, "mode"); +cmdline_parse_token_num_t cmd_setbonding_mode_value = +TOKEN_NUM_INITIALIZER(struct cmd_set_bonding_mode_result, + value, UINT8); +cmdline_parse_token_num_t cmd_setbonding_mode_port = +TOKEN_NUM_INITIALIZER(struct cmd_set_bonding_mode_result, + port_id, UINT8); + +cmdline_parse_inst_t cmd_set_bonding_mode = { + .f = cmd_set_bonding_mode_parsed, + .help_str = "set bonding mode (mode_value) (port_id): Set the bonding mode for port_id", + .data = NULL, + .tokens = { + (void *) &cmd_setbonding_mode_set, + (void *) &cmd_setbonding_mode_bonding, + (void *) &cmd_setbonding_mode_mode, + (void *) &cmd_setbonding_mode_value, + (void *) &cmd_setbonding_mode_port, + NULL + } +}; + +/* *** SET BALANCE XMIT POLICY *** */ +struct cmd_set_bonding_balance_xmit_policy_result { + cmdline_fixed_string_t set; + cmdline_fixed_string_t bonding; + cmdline_fixed_string_t balance_xmit_policy; + uint8_t port_id; + cmdline_fixed_string_t policy; +}; + +static void cmd_set_bonding_balance_xmit_policy_parsed(void *parsed_result, + __attribute__((unused)) struct cmdline *cl, + __attribute__((unused)) void *data) +{ + struct cmd_set_bo