aboutsummaryrefslogtreecommitdiffstats
path: root/lib/includes/hicn/common.h
diff options
context:
space:
mode:
authorMauro Sardara <msardara@cisco.com>2022-07-08 16:10:13 +0000
committerMauro Sardara <msardara@cisco.com>2022-08-10 11:57:10 +0200
commit8f0a8bf572b9b8123121338a31462440bad65857 (patch)
treeecac67f0ad005b2eb0a1bd25c8f242497ffddea1 /lib/includes/hicn/common.h
parent8d27045832427a0ea345f48bfb2c42f46a357af1 (diff)
feat: add interest manifest serialization/deserialization
Also: add helpers for interest manifest Ref: HICN-738 Signed-off-by: Mauro Sardara <msardara@cisco.com> Change-Id: Ia531605148e00ccbe446da0f4f2d8caae2b098be Signed-off-by: Mauro Sardara <msardara@cisco.com>
Diffstat (limited to 'lib/includes/hicn/common.h')
-rw-r--r--lib/includes/hicn/common.h58
1 files changed, 39 insertions, 19 deletions
diff --git a/lib/includes/hicn/common.h b/lib/includes/hicn/common.h
index a84124617..64aca8f1f 100644
--- a/lib/includes/hicn/common.h
+++ b/lib/includes/hicn/common.h
@@ -235,34 +235,54 @@ typedef struct
} ip_version_t;
#define HICN_IP_VERSION(packet) ((ip_version_t *) packet)->version
-#ifndef ntohll
-static inline uint64_t
-ntohll (uint64_t input)
-{
- uint64_t return_val = input;
+/*
+ * Endianess utils
+ */
+
#if (__BYTE_ORDER__) == (__ORDER_LITTLE_ENDIAN__)
- uint8_t *tmp = (uint8_t *) &return_val;
-
- tmp[0] = (uint8_t) (input >> 56);
- tmp[1] = (uint8_t) (input >> 48);
- tmp[2] = (uint8_t) (input >> 40);
- tmp[3] = (uint8_t) (input >> 32);
- tmp[4] = (uint8_t) (input >> 24);
- tmp[5] = (uint8_t) (input >> 16);
- tmp[6] = (uint8_t) (input >> 8);
- tmp[7] = (uint8_t) (input >> 0);
+#define HICN_LITTLE_ENDIAN_ARCH
+#else
+#define HICN_BIG_ENDIAN_ARCH
+#endif
+
+static inline u16
+hicn_conditional_swap_u16 (u16 value)
+{
+#ifdef HICN_LITTLE_ENDIAN_ARCH
+ value = __builtin_bswap16 (value);
#endif
- return return_val;
+ return value;
}
-static inline uint64_t
-htonll (uint64_t input)
+static inline u32
+hicn_conditional_swap_u32 (u32 value)
{
- return (ntohll (input));
+#ifdef HICN_LITTLE_ENDIAN_ARCH
+ value = __builtin_bswap32 (value);
+#endif
+
+ return value;
}
+
+static inline u64
+hicn_conditional_swap_u64 (u64 value)
+{
+#ifdef HICN_LITTLE_ENDIAN_ARCH
+ value = __builtin_bswap64 (value);
#endif
+ return value;
+}
+
+#define hicn_net_to_host_16(x) hicn_conditional_swap_u16 ((u16) (x))
+#define hicn_net_to_host_32(x) hicn_conditional_swap_u32 ((u32) (x))
+#define hicn_net_to_host_64(x) hicn_conditional_swap_u64 ((u64) (x))
+
+#define hicn_host_to_net_16(x) hicn_conditional_swap_u16 ((u16) (x))
+#define hicn_host_to_net_32(x) hicn_conditional_swap_u32 ((u32) (x))
+#define hicn_host_to_net_64(x) hicn_conditional_swap_u64 ((u64) (x))
+
#define hicn_round_pow2(x, pow2) (((x) + (pow2) -1) & ~((pow2) -1))
#define _SIZEOF_ALIGNED(x, size) hicn_round_pow2 (sizeof (x), size)