From: Neil Horman <nhorman@tuxdriver.com> To: Declan Doherty <declan.doherty@intel.com> Cc: dev@dpdk.org Subject: Re: [dpdk-dev] [PATCH v3 2/5] Link Bonding PMD Library (librte_eal/librte_ether link bonding support changes) Date: Fri, 13 Jun 2014 12:08:07 -0400 Message-ID: <20140613160807.GD22451@hmsreliant.think-freely.org> (raw) In-Reply-To: <258914f35917ae07dddc991ac9726542964dce44.1402662300.git.declan.doherty@intel.com> On Fri, Jun 13, 2014 at 03:41:59PM +0100, Declan Doherty wrote: > Updating functionality in EAL to support adding link bonding > devices via –vdev option. Link bonding devices will be > initialized after all physical devices have been probed and > initialized. > > Signed-off-by: Declan Doherty <declan.doherty@intel.com> > --- > lib/librte_eal/common/eal_common_dev.c | 66 +++++++++++++++++++++++++++-- > lib/librte_eal/common/eal_common_pci.c | 6 +++ > lib/librte_eal/common/include/eal_private.h | 7 +++ > lib/librte_eal/common/include/rte_dev.h | 1 + > lib/librte_ether/rte_ethdev.c | 34 +++++++++++++-- > lib/librte_ether/rte_ethdev.h | 7 ++- > lib/librte_pmd_pcap/rte_eth_pcap.c | 22 +++++----- > lib/librte_pmd_ring/rte_eth_ring.c | 32 +++++++------- > lib/librte_pmd_ring/rte_eth_ring.h | 3 +- > lib/librte_pmd_xenvirt/rte_eth_xenvirt.c | 2 +- > 10 files changed, 144 insertions(+), 36 deletions(-) > > diff --git a/lib/librte_eal/common/eal_common_dev.c b/lib/librte_eal/common/eal_common_dev.c > index eae5656..b50c908 100644 > --- a/lib/librte_eal/common/eal_common_dev.c > +++ b/lib/librte_eal/common/eal_common_dev.c > @@ -75,14 +75,28 @@ rte_eal_dev_init(void) > > /* call the init function for each virtual device */ > TAILQ_FOREACH(devargs, &devargs_list, next) { > + uint8_t bdev = 0; > > if (devargs->type != RTE_DEVTYPE_VIRTUAL) > continue; > > TAILQ_FOREACH(driver, &dev_driver_list, next) { > - if (driver->type != PMD_VDEV) > + /* RTE_DEVTYPE_VIRTUAL can only be a virtual or bonded device*/ > + if (driver->type != PMD_VDEV && driver->type != PMD_BDEV) > continue; > > + /* > + * Bonded devices are not initialize here, we do it later in > + * rte_eal_bonded_dev_init() after all physical devices have been > + * probed and initialized > + */ > + if (driver->type == PMD_BDEV && > + !strncmp(driver->name, devargs->virtual.drv_name, > + strlen(driver->name))) { > + bdev = 1; > + break; > + } > + I really don't think you need to add a new device type for bonded devs. Its got no specific hardware that it drives, and you configure it with a --vdev command, so treat it as one here. I understand that you need to pass additional information about slaves to a bonded device, which is fine, but you can do that with kvargs pretty easily, at which point its just another vdev. The only other requirement is that you initilize the bonded vdev after the slave vdevs have been created, which you can do by any of several methods (a priority field to indicate that bonded drivers should be initilized last/later, a deferral return code from the init routine, or by dead reckoning via the careful construction of the application command line (placed the bonded --vdev option last on the command line argument list at run time). > /* search a driver prefix in virtual device name */ > if (!strncmp(driver->name, devargs->virtual.drv_name, > strlen(driver->name))) { > @@ -92,9 +106,9 @@ rte_eal_dev_init(void) > } > } > > - if (driver == NULL) { > - rte_panic("no driver found for %s\n", > - devargs->virtual.drv_name); > + if (driver == NULL && !bdev) { > + rte_panic("no driver found for %s and is not a bonded vdev %d\n", > + devargs->virtual.drv_name, bdev); > } > } > > @@ -107,3 +121,47 @@ rte_eal_dev_init(void) > } > return 0; > } > + > +#ifdef RTE_LIBRTE_PMD_BOND > +int > +rte_eal_bonded_dev_init(void) > +{ > + struct rte_devargs *devargs; > + struct rte_driver *driver; > + > + TAILQ_FOREACH(devargs, &devargs_list, next) { > + int vdev = 0; > + > + if (devargs->type != RTE_DEVTYPE_VIRTUAL) > + continue; > + > + TAILQ_FOREACH(driver, &dev_driver_list, next) { > + if (driver->type != PMD_VDEV && driver->type != PMD_BDEV) > + continue; > + > + /* Virtual devices have already been initialized so we skip them > + * here*/ > + if (driver->type == PMD_VDEV && > + !strncmp(driver->name, devargs->virtual.drv_name, > + strlen(driver->name))) { > + vdev = 1; > + break; > + } > + > + /* search a driver prefix in bonded device name */ > + if (!strncmp(driver->name, devargs->virtual.drv_name, > + strlen(driver->name))) { > + driver->init(devargs->virtual.drv_name, devargs->args); > + break; > + } > + } > + > + if (driver == NULL && !vdev) { > + rte_panic("no driver found for %s\n", > + devargs->virtual.drv_name); > + } > + } > + return 0; > +} > +#endif > + If you treat bonded devices as vdevs, you can remove this function entirely. > diff --git a/lib/librte_eal/common/eal_common_pci.c b/lib/librte_eal/common/eal_common_pci.c > index 4d877ea..9b584f5 100644 > --- a/lib/librte_eal/common/eal_common_pci.c > +++ b/lib/librte_eal/common/eal_common_pci.c > @@ -166,7 +166,13 @@ rte_eal_pci_probe(void) > dev->addr.devid, dev->addr.function); > } > > +#ifdef RTE_LIBRTE_PMD_BOND > + /* After all physical PCI devices have been probed and initialized then we > + * initialize the bonded devices */ > + return rte_eal_bonded_dev_init(); > +#else This is the wrong place for this, bonded devices are not pci devices, this doesn't belong in the pci device probe path. If you treat the bonded devices as vdevs and handle the ordering as described above, you won't need this anyway. > return 0; > +#endif > } > > /* dump one device */ > diff --git a/lib/librte_eal/common/include/eal_private.h b/lib/librte_eal/common/include/eal_private.h > index 232fcec..f6081bb 100644 > --- a/lib/librte_eal/common/include/eal_private.h > +++ b/lib/librte_eal/common/include/eal_private.h > @@ -203,4 +203,11 @@ int rte_eal_alarm_init(void); > */ > int rte_eal_dev_init(void); > > +#ifdef RTE_LIBRTE_PMD_BOND > +/** > + * Initialize the bonded devices > + */ > +int rte_eal_bonded_dev_init(void); > +#endif > + > #endif /* _EAL_PRIVATE_H_ */ > diff --git a/lib/librte_eal/common/include/rte_dev.h b/lib/librte_eal/common/include/rte_dev.h > index f7e3a10..f0a780a 100644 > --- a/lib/librte_eal/common/include/rte_dev.h > +++ b/lib/librte_eal/common/include/rte_dev.h > @@ -62,6 +62,7 @@ typedef int (rte_dev_init_t)(const char *name, const char *args); > enum pmd_type { > PMD_VDEV = 0, > PMD_PDEV = 1, > + PMD_BDEV = 2, /**< Poll Mode Driver Bonded Device*/ > }; Can drop this as noted above. > > /** > diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c > index 8011b8b..4c2f1d3 100644 > --- a/lib/librte_ether/rte_ethdev.c > +++ b/lib/librte_ether/rte_ethdev.c > @@ -64,6 +64,7 @@ > #include <rte_mbuf.h> > #include <rte_errno.h> > #include <rte_spinlock.h> > +#include <rte_string_fns.h> > > #include "rte_ether.h" > #include "rte_ethdev.h" > @@ -152,8 +153,21 @@ rte_eth_dev_data_alloc(void) > RTE_MAX_ETHPORTS * sizeof(*rte_eth_dev_data)); > } > > +static int > +rte_eth_dev_name_unique(const char* name) > +{ > + unsigned i; > + > + for (i = 0; i < nb_ports; i++) { > + if (strcmp(rte_eth_devices[i].data->name, name) == 0) > + return -1; > + } > + > + return 0; > +} > + > struct rte_eth_dev * > -rte_eth_dev_allocate(void) > +rte_eth_dev_allocate(const char* name) > { > struct rte_eth_dev *eth_dev; > > @@ -165,23 +179,37 @@ rte_eth_dev_allocate(void) > if (rte_eth_dev_data == NULL) > rte_eth_dev_data_alloc(); > > + if (rte_eth_dev_name_unique(name)) { > + PMD_DEBUG_TRACE("Ethernet Device with name %s already allocated!\n"); > + return NULL; > + } > + This seems fairly racy if you allow dynamic device creation at run time from the application, if multiple threads attempt to create bonds in parallel. > eth_dev = &rte_eth_devices[nb_ports]; > eth_dev->data = &rte_eth_dev_data[nb_ports]; > + rte_snprintf(eth_dev->data->name , sizeof(eth_dev->data->name ), > + "%s", name); > eth_dev->data->port_id = nb_ports++; > return eth_dev; > } > > static int > rte_eth_dev_init(struct rte_pci_driver *pci_drv, > - struct rte_pci_device *pci_dev) > + struct rte_pci_device *pci_dev) > { > struct eth_driver *eth_drv; > struct rte_eth_dev *eth_dev; > + char ethdev_name[RTE_ETH_NAME_MAX_LEN]; > + > int diag; > > eth_drv = (struct eth_driver *)pci_drv; > > - eth_dev = rte_eth_dev_allocate(); > + /* Create unique ethdev name by concatenating drive name and number of > + * ports */ > + rte_snprintf(ethdev_name, RTE_ETH_NAME_MAX_LEN, "%d:%d.%d", > + pci_dev->addr.bus, pci_dev->addr.devid, pci_dev->addr.function); > + > + eth_dev = rte_eth_dev_allocate(ethdev_name); > if (eth_dev == NULL) > return -ENOMEM; > > diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h > index 67eda50..27ed0ab 100644 > --- a/lib/librte_ether/rte_ethdev.h > +++ b/lib/librte_ether/rte_ethdev.h > @@ -1233,6 +1233,8 @@ struct rte_eth_dev_sriov { > }; > #define RTE_ETH_DEV_SRIOV(dev) ((dev)->data->sriov) > > +#define RTE_ETH_NAME_MAX_LEN (32) > + > /** > * @internal > * The data part, with no function pointers, associated with each ethernet device. > @@ -1241,6 +1243,8 @@ struct rte_eth_dev_sriov { > * processes in a multi-process configuration. > */ > struct rte_eth_dev_data { > + char name[RTE_ETH_NAME_MAX_LEN]; /**< Unique identifier name */ > + > void **rx_queues; /**< Array of pointers to RX queues. */ > void **tx_queues; /**< Array of pointers to TX queues. */ > uint16_t nb_rx_queues; /**< Number of RX queues. */ > @@ -1293,10 +1297,11 @@ extern uint8_t rte_eth_dev_count(void); > * Allocates a new ethdev slot for an ethernet device and returns the pointer > * to that slot for the driver to use. > * > + * @param name Unique identifier name for each Ethernet device > * @return > * - Slot in the rte_dev_devices array for a new device; > */ > -struct rte_eth_dev *rte_eth_dev_allocate(void); > +struct rte_eth_dev *rte_eth_dev_allocate(const char *name); > > struct eth_driver; > /** > diff --git a/lib/librte_pmd_pcap/rte_eth_pcap.c b/lib/librte_pmd_pcap/rte_eth_pcap.c Hmm, we're modifying other pmds for the naming feature, I think it would be best split out into a separate patch. Something entitled "support unique interface naming for virtual pmds" or something.
next prev parent reply other threads:[~2014-06-13 16:08 UTC|newest] Thread overview: 127+ messages / expand[flat|nested] mbox.gz Atom feed top 2014-05-28 15:32 [dpdk-dev] [PATCH 0/4] Link Bonding Library declan.doherty 2014-05-28 15:32 ` [dpdk-dev] [PATCH 1/4] " declan.doherty 2014-05-28 16:54 ` Shaw, Jeffrey B 2014-05-29 13:32 ` Doherty, Declan 2014-05-28 15:32 ` [dpdk-dev] [PATCH 2/4] Link bonding unit tests declan.doherty 2014-05-28 15:32 ` [dpdk-dev] [PATCH 3/4] Link bonding integration into testpmd declan.doherty 2014-05-28 15:32 ` [dpdk-dev] [PATCH 4/4] Add Link Bonding Library to Doxygen declan.doherty 2014-05-28 17:49 ` [dpdk-dev] [PATCH 0/4] Link Bonding Library Neil Horman 2014-05-29 10:33 ` Doherty, Declan 2014-05-29 11:33 ` Neil Horman 2014-05-29 3:23 ` Cao, Waterman 2014-05-29 10:35 ` Doherty, Declan 2014-06-04 15:18 ` [dpdk-dev] [PATCH v2 " declan.doherty 2014-06-04 15:18 ` [dpdk-dev] [PATCH v2 1/4] " declan.doherty 2014-06-04 15:18 ` declan.doherty 2014-06-05 15:15 ` Stephen Hemminger 2014-06-06 9:07 ` Doherty, Declan 2014-06-06 15:13 ` Stephen Hemminger 2014-06-09 21:11 ` Eric Kinzie 2014-06-13 14:03 ` Doherty, Declan 2014-06-04 15:18 ` [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 in testing - checkpack fixes declan.doherty 2014-06-04 15:18 ` declan.doherty 2014-06-04 15:18 ` [dpdk-dev] [PATCH v2 0/4] Link Bonding Library declan.doherty 2014-06-04 15:18 ` [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/configuration - Change bonding modes and select balance transmit polices declan.doherty 2014-06-04 15:18 ` [dpdk-dev] [PATCH v2 4/4] Add Link Bonding Library to Doxygen declan.doherty 2014-06-04 16:10 ` [dpdk-dev] [PATCH v2 0/4] Link Bonding Library Doherty, Declan 2014-06-05 8:03 ` De Lara Guarch, Pablo 2014-06-05 11:03 ` Neil Horman 2014-06-06 8:23 ` Doherty, Declan 2014-06-06 14:54 ` Neil Horman 2014-06-13 14:56 ` Doherty, Declan 2014-06-13 15:11 ` Neil Horman 2014-06-06 3:26 ` Cao, Waterman 2014-06-11 16:33 ` Thomas Monjalon 2014-06-13 14:08 ` Doherty, Declan 2014-06-13 15:15 ` Thomas Monjalon 2014-06-13 14:41 ` [dpdk-dev] [PATCH v3 0/5] Link Bonding PMD Library Declan Doherty 2014-06-13 14:41 ` [dpdk-dev] [PATCH v3 1/5] " Declan Doherty 2014-06-13 14:41 ` [dpdk-dev] [PATCH v3 2/5] Link Bonding PMD Library (librte_eal/librte_ether link bonding support changes) Declan Doherty 2014-06-13 16:08 ` Neil Horman [this message] 2014-06-13 18:34 ` Doherty, Declan 2014-06-13 19:38 ` Neil Horman 2014-06-16 8:59 ` Doherty, Declan 2014-06-16 11:07 ` Neil Horman 2014-06-16 16:17 ` Richardson, Bruce 2014-06-16 17:47 ` Neil Horman 2014-06-16 18:07 ` Richardson, Bruce 2014-06-16 18:09 ` Thomas Monjalon 2014-06-13 21:59 ` Stephen Hemminger 2014-06-16 7:59 ` Doherty, Declan 2014-06-13 14:42 ` [dpdk-dev] [PATCH v3 3/5] Link Bonding PMD Library (Unit Test Suite) Declan Doherty 2014-06-13 14:42 ` [dpdk-dev] [PATCH v3 4/5] Link Bonding PMD Library (testpmd link bonding API support) Declan Doherty 2014-06-13 14:42 ` [dpdk-dev] [PATCH v3 5/5] Link Bonding PMD Library (Doxygen Additions) Declan Doherty 2014-06-13 15:20 ` [dpdk-dev] [PATCH v3 0/5] Link Bonding PMD Library Neil Horman 2014-06-16 11:18 ` [dpdk-dev] [PATCH v4 0/6] Link Bonding Library Declan Doherty 2014-06-18 16:14 ` [dpdk-dev] [PATCH v5 " Declan Doherty 2014-06-18 16:18 ` Neil Horman 2014-06-24 14:52 ` [dpdk-dev] [PATCH v6 " Declan Doherty 2014-06-24 16:03 ` [dpdk-dev] [PATCH v7 " Declan Doherty 2014-06-25 20:07 ` [dpdk-dev] [PATCH v8 " Declan Doherty 2014-06-26 16:02 ` De Lara Guarch, Pablo 2014-06-26 23:57 ` [dpdk-dev] [PATCH v9 0/5] link bonding Thomas Monjalon 2014-06-26 23:57 ` [dpdk-dev] [PATCH v9 1/5] bond: new link bonding library Thomas Monjalon 2014-06-27 0:45 ` Thomas Monjalon 2014-06-26 23:57 ` [dpdk-dev] [PATCH v9 2/5] ethdev: add unique name to devices Thomas Monjalon 2014-06-26 23:57 ` [dpdk-dev] [PATCH v9 3/5] eal: support link bonding device initialization Thomas Monjalon 2014-06-26 23:57 ` [dpdk-dev] [PATCH v9 4/5] bond: unit tests Thomas Monjalon 2014-06-26 23:57 ` [dpdk-dev] [PATCH v9 5/5] bond: testpmd support Thomas Monjalon 2014-06-27 10:18 ` [dpdk-dev] [PATCH v10 0/5] link bonding Declan Doherty 2014-06-27 20:58 ` Thomas Monjalon 2014-06-29 17:49 ` [dpdk-dev] [PATCH v11 0/5] link bonding library Declan Doherty 2014-06-30 9:21 ` Thomas Monjalon 2014-06-30 9:28 ` Doherty, Declan 2014-07-01 22:01 ` Thomas Monjalon 2014-06-29 17:49 ` [dpdk-dev] [PATCH v11 1/5] bond: new " Declan Doherty 2014-06-30 9:13 ` Thomas Monjalon 2014-06-30 22:29 ` Robert Sanford 2014-07-01 14:16 ` Thomas Monjalon 2014-07-01 14:19 ` Doherty, Declan 2014-07-01 14:26 ` Thomas Monjalon 2014-06-29 17:49 ` [dpdk-dev] [PATCH v11 2/5] ethdev: add unique name to devices Declan Doherty 2014-06-29 17:49 ` [dpdk-dev] [PATCH v11 3/5] eal: support link bonding device initialization Declan Doherty 2014-06-29 17:49 ` [dpdk-dev] [PATCH v11 4/5] bond: unit tests Declan Doherty 2014-06-30 8:56 ` Thomas Monjalon 2014-06-29 17:49 ` [dpdk-dev] [PATCH v11 5/5] bond: testpmd support Declan Doherty 2014-06-27 10:18 ` [dpdk-dev] [PATCH v10 1/5] bond: new link bonding library Declan Doherty 2014-06-27 10:18 ` [dpdk-dev] [PATCH v10 2/5] ethdev: add unique name to devices Declan Doherty 2014-06-27 10:18 ` [dpdk-dev] [PATCH v10 3/5] eal: support link bonding device initialization Declan Doherty 2014-06-27 10:18 ` [dpdk-dev] [PATCH v10 4/5] bond: unit tests Declan Doherty 2014-06-27 10:18 ` [dpdk-dev] [PATCH v10 5/5] bond: testpmd support Declan Doherty 2014-06-25 20:07 ` [dpdk-dev] [PATCH v8 1/6] Link Bonding Library (lib/librte_pmd_bond) Declan Doherty 2014-06-25 20:07 ` [dpdk-dev] [PATCH v8 2/6] Support for unique interface naming of pmds Declan Doherty 2014-06-25 20:07 ` [dpdk-dev] [PATCH v8 3/6] EAL support for link bonding device initialization Declan Doherty 2014-06-25 20:07 ` [dpdk-dev] [PATCH v8 4/6] Link bonding Unit Tests Declan Doherty 2014-06-25 20:07 ` [dpdk-dev] [PATCH v8 5/6] testpmd link bonding additions Declan Doherty 2014-06-25 20:07 ` [dpdk-dev] [PATCH v8 6/6] Link Bonding Library doxygen additions Declan Doherty 2014-06-24 16:03 ` [dpdk-dev] [PATCH v7 1/6] Link Bonding Library (lib/librte_pmd_bond) Declan Doherty 2014-06-24 16:03 ` [dpdk-dev] [PATCH v7 2/6] Support for unique interface naming of pmds Declan Doherty 2014-06-24 16:03 ` [dpdk-dev] [PATCH v7 3/6] EAL support for link bonding device initialization Declan Doherty 2014-06-25 13:54 ` Thomas Monjalon 2014-06-25 14:41 ` Doherty, Declan 2014-06-25 16:00 ` Thomas Monjalon 2014-06-25 16:15 ` Richardson, Bruce 2014-06-24 16:03 ` [dpdk-dev] [PATCH v7 4/6] Link bonding Unit Tests Declan Doherty 2014-06-24 16:03 ` [dpdk-dev] [PATCH v7 5/6] testpmd link bonding additions Declan Doherty 2014-06-24 16:03 ` [dpdk-dev] [PATCH v7 6/6] Link Bonding Library doxygen additions Declan Doherty 2014-06-25 13:43 ` Thomas Monjalon 2014-06-25 14:19 ` Doherty, Declan 2014-06-25 14:23 ` Thomas Monjalon 2014-06-24 14:52 ` [dpdk-dev] [PATCH v6 1/6] Link Bonding Library (lib/librte_pmd_bond) Declan Doherty 2014-06-24 14:52 ` [dpdk-dev] [PATCH v6 2/6] Support for unique interface naming of pmds Declan Doherty 2014-06-24 14:52 ` [dpdk-dev] [PATCH v6 3/6] EAL support for link bonding device initialization Declan Doherty 2014-06-24 14:52 ` [dpdk-dev] [PATCH v6 4/6] Link bonding Unit Tests Declan Doherty 2014-06-24 14:52 ` [dpdk-dev] [PATCH v6 5/6] testpmd link bonding additions Declan Doherty 2014-06-24 14:52 ` [dpdk-dev] [PATCH v6 6/6] Link Bonding Library doxygen additions Declan Doherty 2014-06-18 16:14 ` [dpdk-dev] [PATCH v5 1/6] Link Bonding Library (lib/librte_pmd_bond) Declan Doherty 2014-06-18 16:14 ` [dpdk-dev] [PATCH v5 2/6] Support for unique interface naming of pmds Declan Doherty 2014-06-18 16:14 ` [dpdk-dev] [PATCH v5 3/6] EAL support for link bonding device initialization Declan Doherty 2014-06-18 16:14 ` [dpdk-dev] [PATCH v5 4/6] Link bonding Unit Tests Declan Doherty 2014-06-18 16:14 ` [dpdk-dev] [PATCH v5 5/6] testpmd link bonding additions Declan Doherty 2014-06-18 16:14 ` [dpdk-dev] [PATCH v5 6/6] Link Bonding Library doxygen additions Declan Doherty 2014-06-16 11:18 ` [dpdk-dev] [PATCH v4 1/6] Link Bonding Library (lib/librte_pmd_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, la Mode 3 - Broadcast Declan Doherty 2014-06-16 11:18 ` [dpdk-dev] [PATCH v4 2/6] Support for unique interface naming of pmds Declan Doherty 2014-06-16 11:18 ` [dpdk-dev] [PATCH v4 3/6] EAL support for link bonding device initialization Declan Doherty 2014-06-16 11:18 ` [dpdk-dev] [PATCH v4 4/6] Link bonding Unit Tests Declan Doherty 2014-06-16 11:18 ` [dpdk-dev] [PATCH v4 5/6] testpmd link bonding additions Declan Doherty 2014-06-16 11:18 ` [dpdk-dev] [PATCH v4 6/6] Link Bonding Library doxygen additions Declan Doherty
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20140613160807.GD22451@hmsreliant.think-freely.org \ --to=nhorman@tuxdriver.com \ --cc=declan.doherty@intel.com \ --cc=dev@dpdk.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
DPDK patches and discussions This inbox may be cloned and mirrored by anyone: git clone --mirror https://inbox.dpdk.org/dev/0 dev/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 dev dev/ https://inbox.dpdk.org/dev \ dev@dpdk.org public-inbox-index dev Example config snippet for mirrors. Newsgroup available over NNTP: nntp://inbox.dpdk.org/inbox.dpdk.dev AGPL code for this site: git clone https://public-inbox.org/public-inbox.git