Re: [lng-odp] [PATCH 1/5] Add Jhash and CRC functions

2015-10-09 Thread Mike Holmes
On Oct 8, 2015 10:55 PM, "HePeng" <xnhp0...@icloud.com> wrote:
>
> We should first added a generic hash API to api-next, and then provide
crc and jhash implementations?
>
> I am not clear about how hash functions can be added into ODP. Should we
first present a proposal ?

Yes, send a proposal if you have one.

A lot of APIs have been initially created as a patch that just contains the
new definitions and the doxygen documentation for them. When there is
agreement  on the api the implimentation  and tests have followed.
Bringing it up in the Tuesday calls can move it faster with live discussion.

>
> In fact, jhash, cuckoo hash and fbk hash tables are part of the patches
we are preparing for the algorithmic APIs I proposed before.
>
> See the thread in the maillist
>
> https://lists.linaro.org/pipermail/lng-odp/2015-August/014665.html
>
>
>
>> 在 2015年10月8日,下午3:44,Savolainen, Petri (Nokia - FI/Espoo) <
petri.savolai...@nokia.com> 写道:
>>
>>
>>
>> From: lng-odp [mailto:lng-odp-boun...@lists.linaro.org] On Behalf Of EXT
Ola Liljedahl
>> Sent: Wednesday, October 07, 2015 6:12 PM
>> To: HePeng
>> Cc: 杨馥榕; LNG ODP Mailman List
>> Subject: Re: [lng-odp] [PATCH 1/5] Add Jhash and CRC functions
>>
>> On 7 October 2015 at 16:36, HePeng <xnhp0...@icloud.com> wrote:
>>>
>>>
>>>>
>>>> 在 2015年10月7日,下午9:05,Ola Liljedahl <ola.liljed...@linaro.org> 写道:
>>>>
>>>> We did some talking about this on some ODP architecture call but I
don't remember the outcome.
>>>>
>>>> ODP started out as a networking HW abstraction and does include some
CPU abstractions (e.g. atomics). So e.g. CRC support definitively fits into
this scheme and could be added to the public API. A function that
specifically provides jhash does not fit in IMO as I don't think any HW
implements jhash. A generic hash function (with jhash as the default
SW-implementation) can be seen as a HW abstraction. The alternative is to
put jhash support as an ODP helper (as the patch does).
>>>>
>>>
>>>
>>> So you mean that we should split the whole patch into two parts, one is
for public APIs, the other is for SW jhash?
>>
>> This is my suggestion but I want to hear Petri's view on this.
>>
>> I think it makes sense to add  CRC as a proper ODP API. It could be
first just a synchronous function call (crypto API style - async completion
event option could follow if needed). There could be couple of functions:
one for user defined polynomial, and another ones for mostly used
polynomials. For example:
>>
>> odp/include/hash.h
>>
>> // Calculate CRC using the given polynomial
>> uint32_t odp_hash_crc(const void *data, uint32_t data_len, uint32_t
init_val, uint32_t polynomial)
>>
>> // Calculate CRC32
>> uint32_t odp_hash_crc32(const void *data, uint32_t data_len, uint32_t
init_val);
>>
>> // Calculate CRC32C
>> uint32_t odp_hash_crc32c(const void *data, uint32_t data_len, uint32_t
init_val);
>>
>> -Petri
>>
>>
>>
>
>
>
> ___
> lng-odp mailing list
> lng-odp@lists.linaro.org
> https://lists.linaro.org/mailman/listinfo/lng-odp
>
___
lng-odp mailing list
lng-odp@lists.linaro.org
https://lists.linaro.org/mailman/listinfo/lng-odp


Re: [lng-odp] [PATCH 1/5] Add Jhash and CRC functions

2015-10-08 Thread Savolainen, Petri (Nokia - FI/Espoo)


From: lng-odp [mailto:lng-odp-boun...@lists.linaro.org] On Behalf Of EXT Ola 
Liljedahl
Sent: Wednesday, October 07, 2015 6:12 PM
To: HePeng
Cc: 杨馥榕; LNG ODP Mailman List
Subject: Re: [lng-odp] [PATCH 1/5] Add Jhash and CRC functions

On 7 October 2015 at 16:36, HePeng 
<xnhp0...@icloud.com<mailto:xnhp0...@icloud.com>> wrote:

在 2015年10月7日,下午9:05,Ola Liljedahl 
<ola.liljed...@linaro.org<mailto:ola.liljed...@linaro.org>> 写道:

We did some talking about this on some ODP architecture call but I don't 
remember the outcome.

ODP started out as a networking HW abstraction and does include some CPU 
abstractions (e.g. atomics). So e.g. CRC support definitively fits into this 
scheme and could be added to the public API. A function that specifically 
provides jhash does not fit in IMO as I don't think any HW implements jhash. A 
generic hash function (with jhash as the default SW-implementation) can be seen 
as a HW abstraction. The alternative is to put jhash support as an ODP helper 
(as the patch does).


So you mean that we should split the whole patch into two parts, one is for 
public APIs, the other is for SW jhash?
This is my suggestion but I want to hear Petri's view on this.

I think it makes sense to add  CRC as a proper ODP API. It could be first just 
a synchronous function call (crypto API style - async completion event option 
could follow if needed). There could be couple of functions: one for user 
defined polynomial, and another ones for mostly used polynomials. For example:

odp/include/hash.h

// Calculate CRC using the given polynomial
uint32_t odp_hash_crc(const void *data, uint32_t data_len, uint32_t init_val, 
uint32_t polynomial)

// Calculate CRC32
uint32_t odp_hash_crc32(const void *data, uint32_t data_len, uint32_t init_val);

// Calculate CRC32C
uint32_t odp_hash_crc32c(const void *data, uint32_t data_len, uint32_t 
init_val);

-Petri



___
lng-odp mailing list
lng-odp@lists.linaro.org
https://lists.linaro.org/mailman/listinfo/lng-odp


Re: [lng-odp] [PATCH 1/5] Add Jhash and CRC functions

2015-10-08 Thread HePeng
We should first added a generic hash API to api-next, and then provide crc and 
jhash implementations?

I am not clear about how hash functions can be added into ODP. Should we first 
present a proposal ?

In fact, jhash, cuckoo hash and fbk hash tables are part of the patches we are 
preparing for the algorithmic APIs I proposed before. 

See the thread in the maillist

https://lists.linaro.org/pipermail/lng-odp/2015-August/014665.html



> 在 2015年10月8日,下午3:44,Savolainen, Petri (Nokia - FI/Espoo) 
> <petri.savolai...@nokia.com> 写道:
> 
>  
>  
> From: lng-odp [mailto:lng-odp-boun...@lists.linaro.org 
> <mailto:lng-odp-boun...@lists.linaro.org>] On Behalf Of EXT Ola Liljedahl
> Sent: Wednesday, October 07, 2015 6:12 PM
> To: HePeng
> Cc: 杨馥榕; LNG ODP Mailman List
> Subject: Re: [lng-odp] [PATCH 1/5] Add Jhash and CRC functions
>  
> On 7 October 2015 at 16:36, HePeng <xnhp0...@icloud.com 
> <mailto:xnhp0...@icloud.com>> wrote:
>  
> 在 2015年10月7日,下午9:05,Ola Liljedahl <ola.liljed...@linaro.org 
> <mailto:ola.liljed...@linaro.org>> 写道:
>  
> We did some talking about this on some ODP architecture call but I don't 
> remember the outcome.
>  
> ODP started out as a networking HW abstraction and does include some CPU 
> abstractions (e.g. atomics). So e.g. CRC support definitively fits into this 
> scheme and could be added to the public API. A function that specifically 
> provides jhash does not fit in IMO as I don't think any HW implements jhash. 
> A generic hash function (with jhash as the default SW-implementation) can be 
> seen as a HW abstraction. The alternative is to put jhash support as an ODP 
> helper (as the patch does).
>  
>  
> So you mean that we should split the whole patch into two parts, one is for 
> public APIs, the other is for SW jhash? 
> This is my suggestion but I want to hear Petri's view on this.
>  
> I think it makes sense to add  CRC as a proper ODP API. It could be first 
> just a synchronous function call (crypto API style - async completion event 
> option could follow if needed). There could be couple of functions: one for 
> user defined polynomial, and another ones for mostly used polynomials. For 
> example:
>  
> odp/include/hash.h
>  
> // Calculate CRC using the given polynomial
> uint32_t odp_hash_crc(const void *data, uint32_t data_len, uint32_t init_val, 
> uint32_t polynomial) 
>  
> // Calculate CRC32
> uint32_t odp_hash_crc32(const void *data, uint32_t data_len, uint32_t 
> init_val);
>  
> // Calculate CRC32C
> uint32_t odp_hash_crc32c(const void *data, uint32_t data_len, uint32_t 
> init_val);
>  
> -Petri
>  
>  
>  

___
lng-odp mailing list
lng-odp@lists.linaro.org
https://lists.linaro.org/mailman/listinfo/lng-odp


Re: [lng-odp] [PATCH 1/5] Add Jhash and CRC functions

2015-10-07 Thread Ola Liljedahl
We did some talking about this on some ODP architecture call but I don't
remember the outcome.

ODP started out as a networking HW abstraction and does include some CPU
abstractions (e.g. atomics). So e.g. CRC support definitively fits into
this scheme and could be added to the public API. A function that
specifically provides jhash does not fit in IMO as I don't think any HW
implements jhash. A generic hash function (with jhash as the default
SW-implementation) can be seen as a HW abstraction. The alternative is to
put jhash support as an ODP helper (as the patch does).

On 27 September 2015 at 16:24, rujiacs  wrote:

> Jhash and CRC are two basic hash functions, and are a part of the hash
> library.
> Migrated from DPDK's hash library, and:
> -- remove its dependence on DPDK library,
> -- remove architecture-specific extensions.
>
> Signed-off-by: rujiacs 
> ---
>  helper/include/odp/helper/hash_crc.h   | 426
> +
>  helper/include/odp/helper/hash_jhash.h | 416
> 
>  2 files changed, 842 insertions(+)
>  create mode 100644 helper/include/odp/helper/hash_crc.h
>  create mode 100644 helper/include/odp/helper/hash_jhash.h
>
> diff --git a/helper/include/odp/helper/hash_crc.h
> b/helper/include/odp/helper/hash_crc.h
> new file mode 100644
> index 000..552a39b
> --- /dev/null
> +++ b/helper/include/odp/helper/hash_crc.h
> @@ -0,0 +1,426 @@
> +/*-
> + *   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.
> + */
> +
> +/**
> +* @file
> +*
> +* ODP Hash CRC
> +*/
> +
> +#ifndef ODPH_HASH_CRC_H_
> +#define ODPH_HASH_CRC_H_
> +
> +#ifdef __cplusplus
> +extern "C" {
> +#endif
> +
> +#include 
> +
> +/* Lookup tables for software implementation of CRC32C */
> +static const uint32_t crc32c_tables[8][256] = {{
> +   0x, 0xF26B8303, 0xE13B70F7, 0x1350F3F4, 0xC79A971F,
> 0x35F1141C, 0x26A1E7E8, 0xD4CA64EB,
> +   0x8AD958CF, 0x78B2DBCC, 0x6BE22838, 0x9989AB3B, 0x4D43CFD0,
> 0xBF284CD3, 0xAC78BF27, 0x5E133C24,
> +   0x105EC76F, 0xE235446C, 0xF165B798, 0x030E349B, 0xD7C45070,
> 0x25AFD373, 0x36FF2087, 0xC494A384,
> +   0x9A879FA0, 0x68EC1CA3, 0x7BBCEF57, 0x89D76C54, 0x5D1D08BF,
> 0xAF768BBC, 0xBC267848, 0x4E4DFB4B,
> +   0x20BD8EDE, 0xD2D60DDD, 0xC186FE29, 0x33ED7D2A, 0xE72719C1,
> 0x154C9AC2, 0x061C6936, 0xF477EA35,
> +   0xAA64D611, 0x580F5512, 0x4B5FA6E6, 0xB93425E5, 0x6DFE410E,
> 0x9F95C20D, 0x8CC531F9, 0x7EAEB2FA,
> +   0x30E349B1, 0xC288CAB2, 0xD1D83946, 0x23B3BA45, 0xF779DEAE,
> 0x05125DAD, 0x1642AE59, 0xE4292D5A,
> +   0xBA3A117E, 0x4851927D, 0x5B016189, 0xA96AE28A, 0x7DA08661,
> 0x8FCB0562, 0x9C9BF696, 0x6EF07595,
> +   0x417B1DBC, 0xB3109EBF, 0xA0406D4B, 0x522BEE48, 0x86E18AA3,
> 0x748A09A0, 0x67DAFA54, 0x95B17957,
> +   0xCBA24573, 0x39C9C670, 0x2A993584, 0xD8F2B687, 0x0C38D26C,
> 0xFE53516F, 0xED03A29B, 0x1F682198,
> +   0x5125DAD3, 0xA34E59D0, 0xB01EAA24, 0x42752927, 0x96BF4DCC,
> 0x64D4CECF, 0x77843D3B, 0x85EFBE38,
> +   0xDBFC821C, 0x2997011F, 0x3AC7F2EB, 0xC8AC71E8, 0x1C661503,
> 0xEE0D9600, 0xFD5D65F4, 0x0F36E6F7,
> +   0x61C69362, 0x93AD1061, 0x80FDE395, 0x72966096, 0xA65C047D,
> 0x5437877E, 0x4767748A, 0xB50CF789,
> +   0xEB1FCBAD, 0x197448AE, 

Re: [lng-odp] [PATCH 1/5] Add Jhash and CRC functions

2015-10-07 Thread Ola Liljedahl
On 7 October 2015 at 16:36, HePeng  wrote:

>
> 在 2015年10月7日,下午9:05,Ola Liljedahl  写道:
>
> We did some talking about this on some ODP architecture call but I don't
> remember the outcome.
>
> ODP started out as a networking HW abstraction and does include some CPU
> abstractions (e.g. atomics). So e.g. CRC support definitively fits into
> this scheme and could be added to the public API. A function that
> specifically provides jhash does not fit in IMO as I don't think any HW
> implements jhash. A generic hash function (with jhash as the default
> SW-implementation) can be seen as a HW abstraction. The alternative is to
> put jhash support as an ODP helper (as the patch does).
>
>
> So you mean that we should split the whole patch into two parts, one is
> for public APIs, the other is for SW jhash?
>
This is my suggestion but I want to hear Petri's view on this.


>
>
>
>
> On 27 September 2015 at 16:24, rujiacs  wrote:
>
>> Jhash and CRC are two basic hash functions, and are a part of the hash
>> library.
>> Migrated from DPDK's hash library, and:
>> -- remove its dependence on DPDK library,
>> -- remove architecture-specific extensions.
>>
>> Signed-off-by: rujiacs 
>> ---
>>  helper/include/odp/helper/hash_crc.h   | 426
>> +
>>  helper/include/odp/helper/hash_jhash.h | 416
>> 
>>  2 files changed, 842 insertions(+)
>>  create mode 100644 helper/include/odp/helper/hash_crc.h
>>  create mode 100644 helper/include/odp/helper/hash_jhash.h
>>
>> diff --git a/helper/include/odp/helper/hash_crc.h
>> b/helper/include/odp/helper/hash_crc.h
>> new file mode 100644
>> index 000..552a39b
>> --- /dev/null
>> +++ b/helper/include/odp/helper/hash_crc.h
>> @@ -0,0 +1,426 @@
>> +/*-
>> + *   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.
>> + */
>> +
>> +/**
>> +* @file
>> +*
>> +* ODP Hash CRC
>> +*/
>> +
>> +#ifndef ODPH_HASH_CRC_H_
>> +#define ODPH_HASH_CRC_H_
>> +
>> +#ifdef __cplusplus
>> +extern "C" {
>> +#endif
>> +
>> +#include 
>> +
>> +/* Lookup tables for software implementation of CRC32C */
>> +static const uint32_t crc32c_tables[8][256] = {{
>> +   0x, 0xF26B8303, 0xE13B70F7, 0x1350F3F4, 0xC79A971F,
>> 0x35F1141C, 0x26A1E7E8, 0xD4CA64EB,
>> +   0x8AD958CF, 0x78B2DBCC, 0x6BE22838, 0x9989AB3B, 0x4D43CFD0,
>> 0xBF284CD3, 0xAC78BF27, 0x5E133C24,
>> +   0x105EC76F, 0xE235446C, 0xF165B798, 0x030E349B, 0xD7C45070,
>> 0x25AFD373, 0x36FF2087, 0xC494A384,
>> +   0x9A879FA0, 0x68EC1CA3, 0x7BBCEF57, 0x89D76C54, 0x5D1D08BF,
>> 0xAF768BBC, 0xBC267848, 0x4E4DFB4B,
>> +   0x20BD8EDE, 0xD2D60DDD, 0xC186FE29, 0x33ED7D2A, 0xE72719C1,
>> 0x154C9AC2, 0x061C6936, 0xF477EA35,
>> +   0xAA64D611, 0x580F5512, 0x4B5FA6E6, 0xB93425E5, 0x6DFE410E,
>> 0x9F95C20D, 0x8CC531F9, 0x7EAEB2FA,
>> +   0x30E349B1, 0xC288CAB2, 0xD1D83946, 0x23B3BA45, 0xF779DEAE,
>> 0x05125DAD, 0x1642AE59, 0xE4292D5A,
>> +   0xBA3A117E, 0x4851927D, 0x5B016189, 0xA96AE28A, 0x7DA08661,
>> 0x8FCB0562, 0x9C9BF696, 0x6EF07595,
>> +   0x417B1DBC, 0xB3109EBF, 0xA0406D4B, 0x522BEE48, 0x86E18AA3,
>> 0x748A09A0, 0x67DAFA54, 0x95B17957,
>> +

[lng-odp] [PATCH 1/5] Add Jhash and CRC functions

2015-09-27 Thread rujiacs
Jhash and CRC are two basic hash functions, and are a part of the hash library.
Migrated from DPDK's hash library, and:
-- remove its dependence on DPDK library,
-- remove architecture-specific extensions.

Signed-off-by: rujiacs 
---
 helper/include/odp/helper/hash_crc.h   | 426 +
 helper/include/odp/helper/hash_jhash.h | 416 
 2 files changed, 842 insertions(+)
 create mode 100644 helper/include/odp/helper/hash_crc.h
 create mode 100644 helper/include/odp/helper/hash_jhash.h

diff --git a/helper/include/odp/helper/hash_crc.h 
b/helper/include/odp/helper/hash_crc.h
new file mode 100644
index 000..552a39b
--- /dev/null
+++ b/helper/include/odp/helper/hash_crc.h
@@ -0,0 +1,426 @@
+/*-
+ *   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.
+ */
+
+/**
+* @file
+*
+* ODP Hash CRC
+*/
+
+#ifndef ODPH_HASH_CRC_H_
+#define ODPH_HASH_CRC_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include 
+
+/* Lookup tables for software implementation of CRC32C */
+static const uint32_t crc32c_tables[8][256] = {{
+   0x, 0xF26B8303, 0xE13B70F7, 0x1350F3F4, 0xC79A971F, 0x35F1141C, 
0x26A1E7E8, 0xD4CA64EB,
+   0x8AD958CF, 0x78B2DBCC, 0x6BE22838, 0x9989AB3B, 0x4D43CFD0, 0xBF284CD3, 
0xAC78BF27, 0x5E133C24,
+   0x105EC76F, 0xE235446C, 0xF165B798, 0x030E349B, 0xD7C45070, 0x25AFD373, 
0x36FF2087, 0xC494A384,
+   0x9A879FA0, 0x68EC1CA3, 0x7BBCEF57, 0x89D76C54, 0x5D1D08BF, 0xAF768BBC, 
0xBC267848, 0x4E4DFB4B,
+   0x20BD8EDE, 0xD2D60DDD, 0xC186FE29, 0x33ED7D2A, 0xE72719C1, 0x154C9AC2, 
0x061C6936, 0xF477EA35,
+   0xAA64D611, 0x580F5512, 0x4B5FA6E6, 0xB93425E5, 0x6DFE410E, 0x9F95C20D, 
0x8CC531F9, 0x7EAEB2FA,
+   0x30E349B1, 0xC288CAB2, 0xD1D83946, 0x23B3BA45, 0xF779DEAE, 0x05125DAD, 
0x1642AE59, 0xE4292D5A,
+   0xBA3A117E, 0x4851927D, 0x5B016189, 0xA96AE28A, 0x7DA08661, 0x8FCB0562, 
0x9C9BF696, 0x6EF07595,
+   0x417B1DBC, 0xB3109EBF, 0xA0406D4B, 0x522BEE48, 0x86E18AA3, 0x748A09A0, 
0x67DAFA54, 0x95B17957,
+   0xCBA24573, 0x39C9C670, 0x2A993584, 0xD8F2B687, 0x0C38D26C, 0xFE53516F, 
0xED03A29B, 0x1F682198,
+   0x5125DAD3, 0xA34E59D0, 0xB01EAA24, 0x42752927, 0x96BF4DCC, 0x64D4CECF, 
0x77843D3B, 0x85EFBE38,
+   0xDBFC821C, 0x2997011F, 0x3AC7F2EB, 0xC8AC71E8, 0x1C661503, 0xEE0D9600, 
0xFD5D65F4, 0x0F36E6F7,
+   0x61C69362, 0x93AD1061, 0x80FDE395, 0x72966096, 0xA65C047D, 0x5437877E, 
0x4767748A, 0xB50CF789,
+   0xEB1FCBAD, 0x197448AE, 0x0A24BB5A, 0xF84F3859, 0x2C855CB2, 0xDEEEDFB1, 
0xCDBE2C45, 0x3FD5AF46,
+   0x7198540D, 0x83F3D70E, 0x90A324FA, 0x62C8A7F9, 0xB602C312, 0x44694011, 
0x5739B3E5, 0xA55230E6,
+   0xFB410CC2, 0x092A8FC1, 0x1A7A7C35, 0xE811FF36, 0x3CDB9BDD, 0xCEB018DE, 
0xDDE0EB2A, 0x2F8B6829,
+   0x82F63B78, 0x709DB87B, 0x63CD4B8F, 0x91A6C88C, 0x456CAC67, 0xB7072F64, 
0xA457DC90, 0x563C5F93,
+   0x082F63B7, 0xFA44E0B4, 0xE9141340, 0x1B7F9043, 0xCFB5F4A8, 0x3DDE77AB, 
0x2E8E845F, 0xDCE5075C,
+   0x92A8FC17, 0x60C37F14, 0x73938CE0, 0x81F80FE3, 0x55326B08, 0xA759E80B, 
0xB4091BFF, 0x466298FC,
+   0x1871A4D8, 0xEA1A27DB, 0xF94AD42F, 0x0B21572C, 0xDFEB33C7, 0x2D80B0C4, 
0x3ED04330, 0xCCBBC033,
+   0xA24BB5A6, 0x502036A5, 0x4370C551, 0xB11B4652, 0x65D122B9, 0x97BAA1BA, 
0x84EA524E, 0x7681D14D,
+   0x2892ED69,