Make sure the infra works on platforms without crc32, like risc-v
Type: fix
Signed-off-by: Florin Coras <fcoras@cisco.com>
Change-Id: I5f267497bb4e73a91a5320822ca42388f1f8b037
hash/hash.c
hash/cli.c
hash/crc32_5tuple.c
hash/hash.c
hash/cli.c
hash/crc32_5tuple.c
- hash/crc32_handoff_eth.c
)
list(APPEND VNET_HEADERS
)
list(APPEND VNET_HEADERS
return VNET_API_ERROR_UNIMPLEMENTED;
d->hash_fn = vnet_hash_function_from_name (
return VNET_API_ERROR_UNIMPLEMENTED;
d->hash_fn = vnet_hash_function_from_name (
- "handoff_eth_sym_crc32c", VNET_HASH_FN_TYPE_ETHERNET);
+ "handoff-eth-sym", VNET_HASH_FN_TYPE_ETHERNET);
vnet_hash_default_function (VNET_HASH_FN_TYPE_ETHERNET);
else
d->hash_fn = vnet_hash_function_from_name (
vnet_hash_default_function (VNET_HASH_FN_TYPE_ETHERNET);
else
d->hash_fn = vnet_hash_function_from_name (
- "handoff_eth_crc32c", VNET_HASH_FN_TYPE_ETHERNET);
+ "handoff-eth", VNET_HASH_FN_TYPE_ETHERNET);
#include <vnet/ip/ip6_packet.h>
#include <vnet/mpls/packet.h>
#include <vppinfra/crc32.h>
#include <vnet/ip/ip6_packet.h>
#include <vnet/mpls/packet.h>
#include <vppinfra/crc32.h>
+#include <vppinfra/xxhash.h>
+
+always_inline u32
+ho_hash (u64 key)
+{
+#ifdef clib_crc32c_uses_intrinsics
+ return clib_crc32c ((u8 *) &key, sizeof (key));
+#else
+ return clib_xxhash (key);
+#endif
+}
static inline u64
ipv4_get_key (ip4_header_t * ip)
static inline u64
ipv4_get_key (ip4_header_t * ip)
-handoff_eth_crc32c_func (void **p, u32 *hash, u32 n_packets)
+handoff_eth_func (void **p, u32 *hash, u32 n_packets)
{
u32 n_left_from = n_packets;
{
u32 n_left_from = n_packets;
key[2] = eth_get_key ((ethernet_header_t *) p[2]);
key[3] = eth_get_key ((ethernet_header_t *) p[3]);
key[2] = eth_get_key ((ethernet_header_t *) p[2]);
key[3] = eth_get_key ((ethernet_header_t *) p[3]);
- hash[0] = clib_crc32c ((u8 *) &key[0], sizeof (key[0]));
- hash[1] = clib_crc32c ((u8 *) &key[1], sizeof (key[1]));
- hash[2] = clib_crc32c ((u8 *) &key[2], sizeof (key[2]));
- hash[3] = clib_crc32c ((u8 *) &key[3], sizeof (key[3]));
+ hash[0] = ho_hash (key[0]);
+ hash[1] = ho_hash (key[1]);
+ hash[2] = ho_hash (key[2]);
+ hash[3] = ho_hash (key[3]);
hash += 4;
n_left_from -= 4;
hash += 4;
n_left_from -= 4;
u64 key;
key = eth_get_key ((ethernet_header_t *) p[0]);
u64 key;
key = eth_get_key ((ethernet_header_t *) p[0]);
- hash[0] = clib_crc32c ((u8 *) &key, sizeof (key));
+ hash[0] = ho_hash (key);
hash += 1;
n_left_from -= 1;
hash += 1;
n_left_from -= 1;
-VNET_REGISTER_HASH_FUNCTION (handoff_eth_crc32c, static) = {
- .name = "handoff-eth-crc32c",
+VNET_REGISTER_HASH_FUNCTION (handoff_eth, static) = {
+ .name = "handoff-eth",
.description = "Ethernet/IPv4/IPv6/MPLS headers",
.priority = 2,
.description = "Ethernet/IPv4/IPv6/MPLS headers",
.priority = 2,
- .function[VNET_HASH_FN_TYPE_ETHERNET] = handoff_eth_crc32c_func,
+ .function[VNET_HASH_FN_TYPE_ETHERNET] = handoff_eth_func,
-handoff_eth_sym_crc32c_func (void **p, u32 *hash, u32 n_packets)
+handoff_eth_sym_func (void **p, u32 *hash, u32 n_packets)
{
u32 n_left_from = n_packets;
{
u32 n_left_from = n_packets;
key[2] = eth_get_sym_key ((ethernet_header_t *) p[2]);
key[3] = eth_get_sym_key ((ethernet_header_t *) p[3]);
key[2] = eth_get_sym_key ((ethernet_header_t *) p[2]);
key[3] = eth_get_sym_key ((ethernet_header_t *) p[3]);
- hash[0] = clib_crc32c ((u8 *) &key[0], sizeof (key[0]));
- hash[1] = clib_crc32c ((u8 *) &key[1], sizeof (key[1]));
- hash[2] = clib_crc32c ((u8 *) &key[2], sizeof (key[2]));
- hash[3] = clib_crc32c ((u8 *) &key[3], sizeof (key[3]));
+ hash[0] = ho_hash (key[0]);
+ hash[1] = ho_hash (key[1]);
+ hash[2] = ho_hash (key[2]);
+ hash[3] = ho_hash (key[3]);
hash += 4;
n_left_from -= 4;
hash += 4;
n_left_from -= 4;
u64 key;
key = eth_get_sym_key ((ethernet_header_t *) p[0]);
u64 key;
key = eth_get_sym_key ((ethernet_header_t *) p[0]);
- hash[0] = clib_crc32c ((u8 *) &key, sizeof (key));
+ hash[0] = ho_hash (key);
hash += 1;
n_left_from -= 1;
hash += 1;
n_left_from -= 1;
-VNET_REGISTER_HASH_FUNCTION (handoff_eth_sym_crc32c, static) = {
- .name = "handoff-eth-sym-crc32c",
+VNET_REGISTER_HASH_FUNCTION (handoff_eth_sym, static) = {
+ .name = "handoff-eth-sym",
.description = "Ethernet/IPv4/IPv6/MPLS headers Symmetric",
.priority = 1,
.description = "Ethernet/IPv4/IPv6/MPLS headers Symmetric",
.priority = 1,
- .function[VNET_HASH_FN_TYPE_ETHERNET] = handoff_eth_sym_crc32c_func,
+ .function[VNET_HASH_FN_TYPE_ETHERNET] = handoff_eth_sym_func,