From: Stephen Hemminger <stephen@networkplumber.org>
To: declan.doherty@intel.com
Cc: dev@dpdk.org
Subject: Re: [dpdk-dev] [PATCH v2 1/4] Link Bonding Library
Date: Thu, 5 Jun 2014 08:15:57 -0700 [thread overview]
Message-ID: <20140605081557.42a797e8@nehalam.linuxnetplumber.net> (raw)
In-Reply-To: <e6e8ecba5e2ba9d1a0e5299e042e7c54757e8644.1401891670.git.declan.doherty@intel.com>
On Wed, 4 Jun 2014 16:18:02 +0100
declan.doherty@intel.com wrote:
> From: Declan Doherty <declan.doherty@intel.com>
>
> - Broadcast TX burst broadcast bug fix
> - Add/remove slave behavior fix
> - Checkpatch fixes
>
> Signed-off-by: Declan Doherty <declan.doherty@intel.com>
There are some pretty weak hash functions in there.
What about using:
--- a/lib/librte_eal/common/include/rte_common.h 2014-02-27 09:02:23.424698279 -0800
+++ b/lib/librte_eal/common/include/rte_common.h 2014-06-05 08:03:51.615839548 -0700
@@ -365,6 +365,31 @@ rte_str_to_size(const char *str)
}
/**
+ * Multiplicative hash functions useful to distrbute
+ * a uniform set of consective keys
+ *
+ * @param val
+ * The input uniform key
+ * @param bits
+ * Number of bits desired
+ */
+#define GOLDEN_RATIO_32 2654404609U
+static inline uint32_t
+rte_fib_hash32(uint32_t val, unsigned int bits)
+{
+ val *= GOLDEN_RATIO_32;
+ return val >> (32 - bits);
+}
+
+#define GOLDEN_RATIO_64 0x9e37fffffffc0001UL
+static inline uint64_t
+rte_fib_hash64(uint64_t val, unsigned bits)
+{
+ val *= GOLDEN_RATIO_64;
+ return val >> (64 - bits);
+}
+
+/**
* Function to terminate the application immediately, printing an error
* message and returning the exit_code back to the shell.
*
--- a/lib/librte_ether/rte_ether.h 2014-02-27 09:02:23.438697987 -0800
+++ b/lib/librte_ether/rte_ether.h 2014-06-05 08:14:15.438080058 -0700
@@ -48,6 +48,8 @@ extern "C" {
#include <rte_memcpy.h>
#include <rte_random.h>
+#include <rte_common.h>
+#include <rte_jhash.h>
#define ETHER_ADDR_LEN 6 /**< Length of Ethernet address. */
#define ETHER_TYPE_LEN 2 /**< Length of Ethernet type field. */
@@ -250,6 +252,80 @@ struct ether_hdr {
uint16_t ether_type; /**< Frame type. */
} __attribute__((__packed__));
+
+/*
+ * These functions work by aliasing the 6 byte Ethernet address
+ * into a 64 bit value. The macro shift16, removes the extra
+ * bytes with the correct shift depending on byte order
+ */
+#ifdef __BYTE_ORDER
+ #if __BYTE_ORDER == __BIG_ENDIAN
+ #define shift16(s) (s >>= 16)
+ #else
+ #define shift16(s) (s <<= 16)
+ #endif
+#endif
+
+/**
+ * Fast compare of Ethernet address.
+ *
+ * @param e1
+ * A pointer to a ether_addr structure one address
+ * @param e2
+ * A pointer to a ether_addr structure holding other address
+ * @return
+ * True (1) if addresses are the same
+ * false (0) otherwise.
+ */
+static inline int
+ether_addr_equal(const struct ether_addr *e1, const struct ether_addr *e2)
+{
+ uint64_t e1_addr = *(const uint64_t *) e1;
+ shift16(e1_addr);
+ uint64_t e2_addr = *(const uint64_t *) e2;
+ shift16(e2_addr);
+
+ return (e1_addr == e2_addr);
+}
+
+/**
+ * Fast hash of ethernet address
+ *
+ * @param ea
+ * A pointer to a ether_addr structure
+ * @param bits
+ * Number of bits desired
+ * @return
+ * Calculated hash value.
+ */
+static inline uint32_t
+ether_addr_hash(const struct ether_addr *ea, unsigned bits)
+{
+ uint64_t val = *(const uint64_t *) ea;
+
+ shift16(val);
+ return rte_fib_hash64(val, bits);
+}
+#undef shift16
+
+/**
+ * Hash of ethernet source and destination
+ *
+ * @param ea
+ * A pointer to a ether_hdr structure
+ * @param initval
+ * Initialising value of hash.
+ * @return
+ * Calculated hash value.
+ */
+static inline uint32_t
+ether_header_hash(const struct ether_hdr *hdr, unsigned seed)
+{
+ const uint32_t *key = (const uint32_t *)hdr;
+
+ return rte_jhash(key, 2*ETHER_ADDR_LEN, seed);
+}
+
/**
* Ethernet VLAN Header.
* Contains the 16-bit VLAN Tag Control Identifier and the Ethernet type
next prev parent reply other threads:[~2014-06-05 15:15 UTC|newest]
Thread overview: 127+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-05-28 15:32 [dpdk-dev] [PATCH 0/4] " 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 [this message]
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
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=20140605081557.42a797e8@nehalam.linuxnetplumber.net \
--to=stephen@networkplumber.org \
--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
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).