Ilya Maximets <[email protected]> writes:

> On 10/28/26 8:14 PM, Aaron Conole wrote:
>> Upcoming commits will be implementing the ChaCha20 high-speed
>> symmetric hashing algorithm as part of a CSPRNG for use with
>> NAT tuple generation.  ChaCha20 treats internal stream data
>> as little endian bytes, which means the implementation will
>> need a way to read and write byte streams of le32 values.
>> 
>> To facilitate this, introduce the ovs_htole32 and ovs_le32toh
>> functions.  Some proto-POSIX implementations exist on various
>> systems and can be found in `endian.h` or `sys/endian.h`, so
>> try to detect those and prefer them.  On systems where they
>> don't exist, the ovs_* functions will have actual byteswap
>> implementations.
>> 
>> Assisted-by: LLM (claude, opencode, sonnet, opus, qwen3.8)
>> Signed-off-by: Aaron Conole <[email protected]>
>> ---
>> 
>> v2->v3:
>>   * Reworked to detect the endian.h that exists on the system, and
>>     hook up ovs_le32toh / ovs_htole32 appropriately based on the
>>     results of that check.
>> 
>>  configure.ac     |  7 +++++++
>>  lib/byte-order.h | 48 ++++++++++++++++++++++++++++++++++++++++++++++++
>>  2 files changed, 55 insertions(+)
>> 
>> diff --git a/configure.ac b/configure.ac
>> index db233fad45..c2834c1b3d 100644
>> --- a/configure.ac
>> +++ b/configure.ac
>> @@ -117,6 +117,13 @@ AC_CHECK_HEADERS([mntent.h sys/statvfs.h linux/types.h 
>> linux/if_ether.h])
>>  AC_CHECK_HEADERS([linux/net_namespace.h stdatomic.h bits/floatn-common.h])
>>  AC_CHECK_HEADERS([net/if_mib.h], [], [], [[#include <sys/types.h>
>>  #include <net/if.h>]])
>> +AC_CHECK_HEADERS([endian.h sys/endian.h])
>> +AC_CHECK_DECLS([htole32, le32toh], [], [], [[#if HAVE_ENDIAN_H
>> +#include <endian.h>
>> +#endif
>> +#if HAVE_SYS_ENDIAN_H
>
> We have endif + if here ...
>
>> +#include <sys/endian.h>
>> +#endif]])
>>  
>>  OVS_CHECK_PKIDIR
>>  OVS_CHECK_RUNDIR
>> diff --git a/lib/byte-order.h b/lib/byte-order.h
>> index f5a21f3298..107f02d53b 100644
>> --- a/lib/byte-order.h
>> +++ b/lib/byte-order.h
>> @@ -20,6 +20,7 @@
>>  #include <netinet/in.h>
>>  #include <arpa/inet.h>
>>  #include <inttypes.h>
>> +#include <string.h>
>>  #include "openvswitch/types.h"
>>  
>>  #ifndef __CHECKER__
>> @@ -71,6 +72,53 @@ uint32_byteswap(uint32_t crc) {
>>              ((crc & 0xff000000) >> 24));
>>  }
>>  
>> +#if HAVE_ENDIAN_H
>> +#include <endian.h>
>> +#elif HAVE_SYS_ENDIAN_H
>
> ... and the elif here.
>
> So, both headers may be included on the check, but only one in the
> actual code.  It is unlikely to cause problems on real systems, but
> the inconsistency is not great.
>
> Best regards, Ilya Maximets.

D'oh!  I'll respin with this corrected.
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to