/* * Copyright (c) 2018 Cisco and/or its affiliates. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at: * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef __included_lb_hash_hash_h__ #define __included_lb_hash_hash_h__ #include <vppinfra/crc32.h> #include <vppinfra/xxhash.h> #if defined(clib_crc32c_uses_intrinsics) && !defined (__i386__) static_always_inline u32 lb_hash_hash (u64 k0, u64 k1, u64 k2, u64 k3, u64 k4) { u64 val = 0; val = clib_crc32c_u64 (val, k0); val = clib_crc32c_u64 (val, k1); val = clib_crc32c_u64 (val, k2); val = clib_crc32c_u64 (val, k3); val = clib_crc32c_u64 (val, k4); return (u32) val; } /* Note: k0 is u64 and k1 is u32 */ static_always_inline u32 lb_hash_hash_2_tuples (u64 k0, u32 k1) { u64 val = 0; val = clib_crc32c_u64 (val, k0); val = clib_crc32c_u32 (val, k1); return (u32) val; } #else static_always_inline u32 lb_hash_hash (u64 k0, u64 k1, u64 k2, u64 k3, u64 k4) { u64 tmp = k0 ^ k1 ^ k2 ^ k3 ^ k4; return (u32) clib_xxhash (tmp); } /* Note: k0 is u64 and k1 is u32 */ static_always_inline u32 lb_hash_hash_2_tuples (u64 k0, u32 k1) { u64 tmp = k0 ^ k1; return (u32) clib_xxhash (tmp); } #endif #endif /* __included_lb_hash_hash_h__ */ /* * fd.io coding-style-patch-verification: ON * * Local Variables: * eval: (c-set-style "gnu") * End: */