From 229385955109b866a23c4ac2aa03d4d11044c39d Mon Sep 17 00:00:00 2001 From: "Enrico Loparco (eloparco)" Date: Thu, 24 Jun 2021 09:15:41 +0200 Subject: [HICN-708] Rebase with master Signed-off-by: Enrico Loparco (eloparco) Change-Id: I2122e1d61dd3b2e039972624ffbdbcb3c5610159 --- lib/includes/CMakeLists.txt | 5 +- lib/includes/hicn/base.h | 36 +-- lib/includes/hicn/common.h | 14 +- lib/includes/hicn/compat.h | 299 +++++++++++++------------ lib/includes/hicn/error.h | 21 +- lib/includes/hicn/face.h | 1 - lib/includes/hicn/ops.h | 38 +++- lib/includes/hicn/policy.h | 10 +- lib/includes/hicn/protocol/tcp.h | 14 +- lib/includes/hicn/strategy.h | 36 +++ lib/includes/hicn/util/log.h | 2 +- lib/includes/hicn/util/windows/dlfcn.h | 33 +++ lib/includes/hicn/util/windows/windows_utils.h | 8 + 13 files changed, 325 insertions(+), 192 deletions(-) create mode 100644 lib/includes/hicn/strategy.h create mode 100644 lib/includes/hicn/util/windows/dlfcn.h (limited to 'lib/includes') diff --git a/lib/includes/CMakeLists.txt b/lib/includes/CMakeLists.txt index 6184f4708..0f1bf80d3 100644 --- a/lib/includes/CMakeLists.txt +++ b/lib/includes/CMakeLists.txt @@ -27,9 +27,10 @@ set(LIBHICN_HEADER_FILES ${CMAKE_CURRENT_SOURCE_DIR}/hicn/header.h ${CMAKE_CURRENT_SOURCE_DIR}/hicn/mapme.h ${CMAKE_CURRENT_SOURCE_DIR}/hicn/name.h + ${CMAKE_CURRENT_SOURCE_DIR}/hicn/ops.h ${CMAKE_CURRENT_SOURCE_DIR}/hicn/policy.h ${CMAKE_CURRENT_SOURCE_DIR}/hicn/protocol.h - ${CMAKE_CURRENT_SOURCE_DIR}/hicn/ops.h + ${CMAKE_CURRENT_SOURCE_DIR}/hicn/strategy.h PARENT_SCOPE ) @@ -55,3 +56,5 @@ set(LIBHICN_HEADER_FILES_UTIL PARENT_SCOPE ) +set_property(GLOBAL PROPERTY LIBHICN_HEADER_FILES_UTIL_PROPERTY "${LIBHICN_HEADER_FILES_UTIL}") + diff --git a/lib/includes/hicn/base.h b/lib/includes/hicn/base.h index 3112d1140..1061724ce 100644 --- a/lib/includes/hicn/base.h +++ b/lib/includes/hicn/base.h @@ -22,12 +22,16 @@ #define HICN_BASE_H #include "common.h" - +#ifdef _WIN32 +#include +#else +#include +#endif /* Default header fields */ #define HICN_DEFAULT_TTL 254 typedef u32 hicn_faceid_t; -typedef u32 hicn_pathlabel_t; +typedef u8 hicn_pathlabel_t; typedef u32 hicn_lifetime_t; #define HICN_MAX_LIFETIME_SCALED 0xFFFF @@ -95,19 +99,26 @@ HICN_TYPE(int x, int y, int z, int t) #endif #define HICN_TYPE_IPV4_TCP HICN_TYPE(IPPROTO_IP, IPPROTO_TCP, IPPROTO_NONE, IPPROTO_NONE) -#define HICN_TYPE_IPV4_UDP HICN_TYPE(IPPROTO_IP, IPPROTO_UDP, IPPROTO_NONE, IPPROTO_NONE) #define HICN_TYPE_IPV4_ICMP HICN_TYPE(IPPROTO_IP, IPPROTO_ICMP, IPPROTO_NONE, IPPROTO_NONE) #define HICN_TYPE_IPV6_TCP HICN_TYPE(IPPROTO_IPV6, IPPROTO_TCP, IPPROTO_NONE, IPPROTO_NONE) -#define HICN_TYPE_IPV6_UDP HICN_TYPE(IPPROTO_IPV6, IPPROTO_UDP, IPPROTO_NONE, IPPROTO_NONE) #define HICN_TYPE_IPV6_ICMP HICN_TYPE(IPPROTO_IPV6, IPPROTO_ICMPV6, IPPROTO_NONE, IPPROTO_NONE) -#define HICN_TYPE_IPV4_TCP_AH HICN_TYPE(IPPROTO_IP, IPPROTO_TCP, IPPROTO_NONE, IPPROTO_NONE) -#define HICN_TYPE_IPV4_UDP_AH HICN_TYPE(IPPROTO_IP, IPPROTO_UDP, IPPROTO_NONE, IPPROTO_NONE) -#define HICN_TYPE_IPV4_ICMP_AH HICN_TYPE(IPPROTO_IP, IPPROTO_ICMP, IPPROTO_NONE, IPPROTO_NONE) +#define HICN_TYPE_IPV4_TCP_AH HICN_TYPE(IPPROTO_IP, IPPROTO_TCP, IPPROTO_AH, IPPROTO_NONE) +#define HICN_TYPE_IPV4_ICMP_AH HICN_TYPE(IPPROTO_IP, IPPROTO_ICMP, IPPROTO_AH, IPPROTO_NONE) #define HICN_TYPE_IPV6_TCP_AH HICN_TYPE(IPPROTO_IPV6, IPPROTO_TCP, IPPROTO_AH, IPPROTO_NONE) -#define HICN_TYPE_IPV6_UDP_AH HICN_TYPE(IPPROTO_IPV6, IPPROTO_UDP, IPPROTO_AH, IPPROTO_NONE) #define HICN_TYPE_IPV6_ICMP_AH HICN_TYPE(IPPROTO_IPV6, IPPROTO_ICMPV6, IPPROTO_AH, IPPROTO_NONE) #define HICN_TYPE_NONE HICN_TYPE(IPPROTO_NONE, IPPROTO_NONE, IPPROTO_NONE, IPPROTO_NONE) +/** + * @brief Check if type is none. + * @return 1 if none, 0 otherwise + */ +always_inline int +hicn_type_is_none(hicn_type_t type) +{ + return (type.l1 == IPPROTO_NONE) && (type.l2 == IPPROTO_NONE) && + (type.l3 == IPPROTO_NONE) && (type.l4 == IPPROTO_NONE); +} + /** * @brief hICN Payload type * @@ -131,9 +142,8 @@ typedef enum * NOTE: this computation is not (yet) part of the hICN specification. */ -// XXX TODO deprecate TODO XXX -#define HICN_PATH_LABEL_MASK 0xF000 /* 1000 0000 0000 0000 */ -#define HICN_PATH_LABEL_SIZE 8 /* XXX in bits ? */ +#define HICN_PATH_LABEL_MASK 0x000000ff +#define HICN_PATH_LABEL_SIZE 8 /** * @brief Path label update @@ -148,8 +158,8 @@ update_pathlabel (hicn_pathlabel_t current_label, hicn_faceid_t face_id, hicn_pathlabel_t * new_label) { hicn_pathlabel_t pl_face_id = - (hicn_pathlabel_t) ((face_id & HICN_PATH_LABEL_MASK) >> - (16 - HICN_PATH_LABEL_SIZE)); + (hicn_pathlabel_t) (face_id & HICN_PATH_LABEL_MASK); + *new_label = ((current_label << 1) | (current_label >> (HICN_PATH_LABEL_SIZE - 1))) ^ pl_face_id; diff --git a/lib/includes/hicn/common.h b/lib/includes/hicn/common.h index 30f370241..05f8ad95f 100644 --- a/lib/includes/hicn/common.h +++ b/lib/includes/hicn/common.h @@ -104,6 +104,9 @@ typedef uword ip_csum_t; /* Windows compatibility headers */ #define WIN32_LEAN_AND_MEAN +#ifndef NOMINMAX +#define NOMINMAX +#endif #include #include #include @@ -143,8 +146,17 @@ struct iovec #include // ip4_address_t #include // ip6_address_t + +#if __GNUC__ >= 9 +#pragma GCC diagnostic ignored "-Waddress-of-packed-member" +#endif + #include +#if __GNUC__ >= 9 +#pragma GCC diagnostic pop +#endif + #else @@ -250,7 +262,7 @@ u32 cumulative_hash32 (const void *data, size_t len, u32 lastValue); u32 hash32 (const void *data, size_t len); u64 cumulative_hash64 (const void *data, size_t len, u64 lastValue); u64 hash64 (const void *data, size_t len); -void hicn_packet_dump (uint8_t * buffer, size_t len); +void hicn_packet_dump (const uint8_t * buffer, size_t len); #endif /* ! HICN_VPP_PLUGIN */ diff --git a/lib/includes/hicn/compat.h b/lib/includes/hicn/compat.h index 2796983c6..35b6e6fc5 100644 --- a/lib/includes/hicn/compat.h +++ b/lib/includes/hicn/compat.h @@ -34,15 +34,15 @@ /* HICN format options */ #define HFO_INET 1 << 0 #define HFO_INET6 1 << 1 -#define HFO_TCP 1 << 2 +#define HFO_TCP 1 << 2 #define HFO_ICMP 1 << 3 -#define HFO_AH 1 << 4 +#define HFO_AH 1 << 4 #define _is_ipv4(format) ((format & HFO_INET)) #define _is_ipv6(format) ((format & HFO_INET6) >> 1) -#define _is_tcp(format) ((format & HFO_TCP) >> 2) -#define _is_icmp(format) ((format & HFO_ICMP) >> 3) -#define _is_ah(format) ((format & HFO_AH) >> 4) +#define _is_tcp(format) ((format & HFO_TCP) >> 2) +#define _is_icmp(format) ((format & HFO_ICMP) >> 3) +#define _is_ah(format) ((format & HFO_AH) >> 4) typedef enum { @@ -54,28 +54,30 @@ typedef enum HF_INET_TCP_AH = HFO_INET | HFO_TCP | HFO_AH, HF_INET6_TCP_AH = HFO_INET6 | HFO_TCP | HFO_AH, HF_INET_ICMP_AH = HFO_INET | HFO_ICMP | HFO_AH, - HF_INET6_ICMP_AH = HFO_INET6 | HFO_ICMP | HFO_AH + HF_INET6_ICMP_AH = HFO_INET6 | HFO_ICMP | HFO_AH, } hicn_format_t; /** - * Minimum required header length to determine the type and length of a supposed - * hICN packet. - * This should be equal to the maximum value over all possible hICN packet - * formats, and less than the minimum possible IP packet size. + * Minimum required header length to determine the type and length of a + * supposed hICN packet. This should be equal to the maximum value over all + * possible hICN packet formats, and less than the minimum possible IP packet + * size. */ -#define HICN_V6_MIN_HDR_LEN 6 /* bytes */ -#define HICN_V4_MIN_HDR_LEN 4 /* bytes */ +#define HICN_V6_MIN_HDR_LEN 6 /* bytes */ +#define HICN_V4_MIN_HDR_LEN 4 /* bytes */ -// #define HICN_MIN_HDR_LEN ((HICN_V6_MIN_HDR_LEN > HICN_V4_MIN_HDR_LEN) ? HICN_V6_MIN_HDR_LEN : HICN_V4_MIN_HDR_LEN) +// #define HICN_MIN_HDR_LEN ((HICN_V6_MIN_HDR_LEN > HICN_V4_MIN_HDR_LEN) ? +// HICN_V6_MIN_HDR_LEN : HICN_V4_MIN_HDR_LEN) #define HICN_MIN_HDR_LEN HICN_V6_MIN_HDR_LEN /** * @brief Parse packet headers and return hICN format * @param [in] format - hICN Format - * @param [in, out] packet - Buffer containing the hICN header to be initialized + * @param [in, out] packet - Buffer containing the hICN header to be + * initialized * @return hICN error code */ -int hicn_packet_init_header (hicn_format_t format, hicn_header_t * packet); +int hicn_packet_init_header (hicn_format_t format, hicn_header_t *packet); /** * @brief Parse packet headers and return hICN format @@ -83,8 +85,8 @@ int hicn_packet_init_header (hicn_format_t format, hicn_header_t * packet); * @param [out] format - hICN format * @return hICN error code */ -int hicn_packet_get_format (const hicn_header_t * packet, - hicn_format_t * format); +int hicn_packet_get_format (const hicn_header_t *packet, + hicn_format_t *format); /** * @brief Update checksums in packet headers @@ -92,19 +94,18 @@ int hicn_packet_get_format (const hicn_header_t * packet, * @param [in,out] packet - packet header * @return hICN error code */ -int hicn_packet_compute_checksum (hicn_format_t format, - hicn_header_t * packet); +int hicn_packet_compute_checksum (hicn_format_t format, hicn_header_t *packet); /** - * @brief compute the checksum of the packet header, adding init_sum to the final value + * @brief compute the checksum of the packet header, adding init_sum to the + * final value * @param [in] format - hICN format * @param [in,out] packet - packet header * @param [in] init_sum - value to add to the final checksum * @return hICN error code */ int hicn_packet_compute_header_checksum (hicn_format_t format, - hicn_header_t * packet, - u16 init_sum); + hicn_header_t *packet, u16 init_sum); /** * @brief Verify checksums in packet headers @@ -112,8 +113,9 @@ int hicn_packet_compute_header_checksum (hicn_format_t format, * @param [in,out] packet - packet header * @return hICN error code */ -int hicn_packet_check_integrity (hicn_format_t format, - hicn_header_t * packet); +int hicn_packet_check_integrity_no_payload (hicn_format_t format, + hicn_header_t *packet, + u16 init_sum); // this is not accounted here /** @@ -123,7 +125,7 @@ int hicn_packet_check_integrity (hicn_format_t format, * @return hICN error code */ int hicn_packet_get_header_length_from_format (hicn_format_t format, - size_t * header_length); + size_t *header_length); /** * @brief Return total length of hicn headers (before payload) @@ -133,8 +135,8 @@ int hicn_packet_get_header_length_from_format (hicn_format_t format, * @return hICN error code */ int hicn_packet_get_header_length (hicn_format_t format, - const hicn_header_t * packet, - size_t * header_length); + const hicn_header_t *packet, + size_t *header_length); /** * @brief Return payload length @@ -144,8 +146,8 @@ int hicn_packet_get_header_length (hicn_format_t format, * @return hICN error code */ int hicn_packet_get_payload_length (hicn_format_t format, - const hicn_header_t * packet, - size_t * payload_length); + const hicn_header_t *packet, + size_t *payload_length); /** * @brief Sets payload length @@ -155,7 +157,7 @@ int hicn_packet_get_payload_length (hicn_format_t format, * @return hICN error code */ int hicn_packet_set_payload_length (hicn_format_t format, - hicn_header_t * packet, + hicn_header_t *packet, const size_t payload_length); /** @@ -164,8 +166,8 @@ int hicn_packet_set_payload_length (hicn_format_t format, * @param [in] packet_2 - Second packet * @return 0 if both packets are considered equal, any other value otherwise. */ -int hicn_packet_compare (const hicn_header_t * packet1, - const hicn_header_t * packet2); +int hicn_packet_compare (const hicn_header_t *packet1, + const hicn_header_t *packet2); /** * @brief Retrieve the name of an interest/data packet @@ -176,8 +178,8 @@ int hicn_packet_compare (const hicn_header_t * packet1, * data packet (0) * @return hICN error code */ -int hicn_packet_get_name (hicn_format_t format, const hicn_header_t * packet, - hicn_name_t * name, u8 is_interest); +int hicn_packet_get_name (hicn_format_t format, const hicn_header_t *packet, + hicn_name_t *name, u8 is_interest); /** * @brief Sets the name of an interest/data packet @@ -188,8 +190,8 @@ int hicn_packet_get_name (hicn_format_t format, const hicn_header_t * packet, * data packet (0) * @return hICN error code */ -int hicn_packet_set_name (hicn_format_t format, hicn_header_t * packet, - const hicn_name_t * name, u8 is_interest); +int hicn_packet_set_name (hicn_format_t format, hicn_header_t *packet, + const hicn_name_t *name, u8 is_interest); /** * @brief Sets the payload of a packet @@ -203,8 +205,8 @@ int hicn_packet_set_name (hicn_format_t format, hicn_header_t * packet, * - The buffer holding payload is assumed sufficiently large * - This function updates header fields with the new length, but no checksum. */ -int hicn_packet_set_payload (hicn_format_t format, hicn_header_t * packet, - const u8 * payload, u16 payload_length); +int hicn_packet_set_payload (hicn_format_t format, hicn_header_t *packet, + const u8 *payload, u16 payload_length); /** * @brief Retrieves the payload of a packet @@ -212,16 +214,17 @@ int hicn_packet_set_payload (hicn_format_t format, hicn_header_t * packet, * @param [in] packet - packet header * @param [out] payload - pointer to buffer for storing the result * @param [out] payload_length - size of the retreived payload - * @param [in] hard_copy - Flag : if true (eg. 1), a copy of the payload is made - * into the payload buffer, otherwise (0) the pointer is changed to point to the payload offset in the packet. + * @param [in] hard_copy - Flag : if true (eg. 1), a copy of the payload is + * made into the payload buffer, otherwise (0) the pointer is changed to point + * to the payload offset in the packet. * @return hICN error code * * NOTE: * - The buffer holding payload is assumed sufficiently large */ -int hicn_packet_get_payload (hicn_format_t format, - const hicn_header_t * packet, u8 ** payload, - size_t * payload_size, bool hard_copy); +int hicn_packet_get_payload (hicn_format_t format, const hicn_header_t *packet, + u8 **payload, size_t *payload_size, + bool hard_copy); /** * @brief Retrieve the locator of an interest / data packet @@ -232,9 +235,8 @@ int hicn_packet_get_payload (hicn_format_t format, * data packet (0) * @return hICN error code */ -int hicn_packet_get_locator (hicn_format_t format, - const hicn_header_t * packet, - ip_address_t * prefix, bool is_interest); +int hicn_packet_get_locator (hicn_format_t format, const hicn_header_t *packet, + ip_address_t *prefix, bool is_interest); /** * @brief Sets the locator of an interest / data packet @@ -245,9 +247,8 @@ int hicn_packet_get_locator (hicn_format_t format, * data packet (0) * @return hICN error code */ -int hicn_packet_set_locator (hicn_format_t format, hicn_header_t * packet, - const ip_address_t * prefix, - bool is_interest); +int hicn_packet_set_locator (hicn_format_t format, hicn_header_t *packet, + const ip_address_t *prefix, bool is_interest); /** * @brief Retrieves the signature size @@ -257,8 +258,8 @@ int hicn_packet_set_locator (hicn_format_t format, hicn_header_t * packet, * @return hICN error code */ int hicn_packet_get_signature_size (hicn_format_t format, - const hicn_header_t * packet, - size_t * bytes); + const hicn_header_t *packet, + size_t *bytes); /** * @brief Sets the signature size @@ -268,7 +269,7 @@ int hicn_packet_get_signature_size (hicn_format_t format, * @return hICN error code */ int hicn_packet_set_signature_size (hicn_format_t format, - hicn_header_t * packet, size_t bytes); + hicn_header_t *packet, size_t bytes); /** * @brief Sets the signature size @@ -278,7 +279,7 @@ int hicn_packet_set_signature_size (hicn_format_t format, * @return hICN error code */ int hicn_packet_set_signature_timestamp (hicn_format_t format, - hicn_header_t * h, + hicn_header_t *h, uint64_t signature_timestamp); /** @@ -289,8 +290,8 @@ int hicn_packet_set_signature_timestamp (hicn_format_t format, * @return hICN error code */ int hicn_packet_get_signature_timestamp (hicn_format_t format, - const hicn_header_t * h, - uint64_t * signature_timestamp); + const hicn_header_t *h, + uint64_t *signature_timestamp); /** * @brief Sets the signature size @@ -300,7 +301,7 @@ int hicn_packet_get_signature_timestamp (hicn_format_t format, * @return hICN error code */ int hicn_packet_set_validation_algorithm (hicn_format_t format, - hicn_header_t * h, + hicn_header_t *h, uint8_t validation_algorithm); /** @@ -311,8 +312,8 @@ int hicn_packet_set_validation_algorithm (hicn_format_t format, * @return hICN error code */ int hicn_packet_get_validation_algorithm (hicn_format_t format, - const hicn_header_t * h, - uint8_t * validation_algorithm); + const hicn_header_t *h, + uint8_t *validation_algorithm); /** * @brief Sets the signature size @@ -321,8 +322,8 @@ int hicn_packet_get_validation_algorithm (hicn_format_t format, * @param [in] key_id - Key id to set * @return hICN error code */ -int hicn_packet_set_key_id (hicn_format_t format, hicn_header_t * h, - uint8_t * key_id); +int hicn_packet_set_key_id (hicn_format_t format, hicn_header_t *h, + uint8_t *key_id); /** * @brief Sets the signature size @@ -331,8 +332,8 @@ int hicn_packet_set_key_id (hicn_format_t format, hicn_header_t * h, * @param [out] key_id - Retrieved key id * @return hICN error code */ -int hicn_packet_get_key_id (hicn_format_t format, hicn_header_t * h, - uint8_t ** key_id, uint8_t * key_id_length); +int hicn_packet_get_key_id (hicn_format_t format, hicn_header_t *h, + uint8_t **key_id, uint8_t *key_id_length); /** * @brief Retrieves the packet hop limit @@ -340,7 +341,7 @@ int hicn_packet_get_key_id (hicn_format_t format, hicn_header_t * h, * @param [out] hops - Retrieved hop limit * @return hICN error code */ -int hicn_packet_get_hoplimit (const hicn_header_t * packet, u8 * hops); +int hicn_packet_get_hoplimit (const hicn_header_t *packet, u8 *hops); /** * @brief Sets the packet hop limit @@ -348,107 +349,111 @@ int hicn_packet_get_hoplimit (const hicn_header_t * packet, u8 * hops); * @param [in] hops - Hop limit to set * @return hICN error code */ -int hicn_packet_set_hoplimit (hicn_header_t * packet, u8 hops); +int hicn_packet_set_hoplimit (hicn_header_t *packet, u8 hops); -int hicn_packet_copy_header (hicn_format_t format, - const hicn_header_t * packet, - hicn_header_t * destination, bool copy_ah); +int hicn_packet_copy_header (hicn_format_t format, const hicn_header_t *packet, + hicn_header_t *destination, bool copy_ah); -int hicn_packet_get_lifetime (const hicn_header_t * packet, u32 * lifetime); -int hicn_packet_set_lifetime (hicn_header_t * packet, u32 lifetime); -int hicn_packet_get_reserved_bits (const hicn_header_t * packet, - u8 * reserved_bits); -int hicn_packet_set_reserved_bits (hicn_header_t * packet, +int hicn_packet_get_lifetime (const hicn_header_t *packet, u32 *lifetime); +int hicn_packet_set_lifetime (hicn_header_t *packet, u32 lifetime); +int hicn_packet_get_reserved_bits (const hicn_header_t *packet, + u8 *reserved_bits); +int hicn_packet_set_reserved_bits (hicn_header_t *packet, const u8 reserved_bits); -int hicn_packet_get_payload_type (const hicn_header_t * packet, - hicn_payload_type_t * payload_type); -int hicn_packet_set_payload_type (hicn_header_t * packet, +int hicn_packet_get_payload_type (const hicn_header_t *packet, + hicn_payload_type_t *payload_type); +int hicn_packet_set_payload_type (hicn_header_t *packet, const hicn_payload_type_t payload_type); -int hicn_packet_set_syn (hicn_header_t * packet); -int hicn_packet_reset_syn (hicn_header_t * packet); -int hicn_packet_test_syn (const hicn_header_t * packet, bool * flag); -int hicn_packet_set_ack (hicn_header_t * packet); -int hicn_packet_reset_ack (hicn_header_t * packet); -int hicn_packet_test_ack (const hicn_header_t * packet, bool * flag); -int hicn_packet_set_rst (hicn_header_t * packet); -int hicn_packet_reset_rst (hicn_header_t * packet); -int hicn_packet_test_rst (const hicn_header_t * packet, bool * flag); -int hicn_packet_set_fin (hicn_header_t * packet); -int hicn_packet_reset_fin (hicn_header_t * packet); -int hicn_packet_test_fin (const hicn_header_t * packet, bool * flag); -int hicn_packet_set_ece (hicn_header_t * packet); -int hicn_packet_reset_ece (hicn_header_t * packet); -int hicn_packet_test_ece (const hicn_header_t * packet, bool * flag); - -int hicn_packet_set_src_port (hicn_header_t * packet, u16 src_port); -int hicn_packet_get_src_port (const hicn_header_t * packet, u16 * src_port); -int hicn_packet_set_dst_port (hicn_header_t * packet, u16 dst_port); -int hicn_packet_get_dst_port (const hicn_header_t * packet, u16 * dst_port); -int hicn_packet_get_signature (hicn_format_t format, hicn_header_t * packet, - uint8_t ** sign_buf); +int hicn_packet_set_syn (hicn_format_t format, hicn_header_t *packet); +int hicn_packet_reset_syn (hicn_format_t format, hicn_header_t *packet); +int hicn_packet_test_syn (hicn_format_t format, const hicn_header_t *packet, + bool *flag); +int hicn_packet_set_ack (hicn_format_t format, hicn_header_t *packet); +int hicn_packet_reset_ack (hicn_format_t format, hicn_header_t *packet); +int hicn_packet_test_ack (hicn_format_t format, const hicn_header_t *packet, + bool *flag); +int hicn_packet_set_rst (hicn_format_t format, hicn_header_t *packet); +int hicn_packet_reset_rst (hicn_format_t format, hicn_header_t *packet); +int hicn_packet_test_rst (hicn_format_t format, const hicn_header_t *packet, + bool *flag); +int hicn_packet_set_fin (hicn_format_t format, hicn_header_t *packet); +int hicn_packet_reset_fin (hicn_format_t format, hicn_header_t *packet); +int hicn_packet_test_fin (hicn_format_t format, const hicn_header_t *packet, + bool *flag); +int hicn_packet_set_ece (hicn_format_t format, hicn_header_t *packet); +int hicn_packet_reset_ece (hicn_format_t format, hicn_header_t *packet); +int hicn_packet_test_ece (hicn_format_t format, const hicn_header_t *packet, + bool *flag); + +int hicn_packet_set_src_port (hicn_format_t format, hicn_header_t *packet, + u16 src_port); +int hicn_packet_get_src_port (hicn_format_t format, + const hicn_header_t *packet, u16 *src_port); +int hicn_packet_set_dst_port (hicn_format_t format, hicn_header_t *packet, + u16 dst_port); +int hicn_packet_get_dst_port (hicn_format_t format, + const hicn_header_t *packet, u16 *dst_port); +int hicn_packet_get_signature (hicn_format_t format, hicn_header_t *packet, + uint8_t **sign_buf); /* Interest */ int hicn_interest_get_name (hicn_format_t format, - const hicn_header_t * interest, - hicn_name_t * name); -int hicn_interest_set_name (hicn_format_t format, hicn_header_t * interest, - const hicn_name_t * name); + const hicn_header_t *interest, hicn_name_t *name); +int hicn_interest_set_name (hicn_format_t format, hicn_header_t *interest, + const hicn_name_t *name); int hicn_interest_get_locator (hicn_format_t format, - const hicn_header_t * interest, - ip_address_t * prefix); -int hicn_interest_set_locator (hicn_format_t format, hicn_header_t * interest, - const ip_address_t * prefix); -int hicn_interest_compare (const hicn_header_t * interest_1, - const hicn_header_t * interest_2); -int hicn_interest_set_lifetime (hicn_header_t * interest, u32 lifetime); -int hicn_interest_get_lifetime (const hicn_header_t * interest, - u32 * lifetime); + const hicn_header_t *interest, + ip_address_t *prefix); +int hicn_interest_set_locator (hicn_format_t format, hicn_header_t *interest, + const ip_address_t *prefix); +int hicn_interest_compare (const hicn_header_t *interest_1, + const hicn_header_t *interest_2); +int hicn_interest_set_lifetime (hicn_header_t *interest, u32 lifetime); +int hicn_interest_get_lifetime (const hicn_header_t *interest, u32 *lifetime); int hicn_interest_get_header_length (hicn_format_t format, - const hicn_header_t * interest, - size_t * header_length); + const hicn_header_t *interest, + size_t *header_length); int hicn_interest_get_payload_length (hicn_format_t format, - const hicn_header_t * interest, - size_t * payload_length); -int hicn_interest_set_payload (hicn_format_t format, hicn_header_t * interest, - const u8 * payload, size_t payload_length); + const hicn_header_t *interest, + size_t *payload_length); +int hicn_interest_set_payload (hicn_format_t format, hicn_header_t *interest, + const u8 *payload, size_t payload_length); int hicn_interest_get_payload (hicn_format_t format, - const hicn_header_t * interest, u8 ** payload, - size_t * payload_size, bool hard_copy); -int hicn_interest_reset_for_hash (hicn_format_t format, - hicn_header_t * packet); + const hicn_header_t *interest, u8 **payload, + size_t *payload_size, bool hard_copy); +int hicn_interest_reset_for_hash (hicn_format_t format, hicn_header_t *packet); /* Data */ -int hicn_data_get_name (hicn_format_t format, const hicn_header_t * data, - hicn_name_t * name); -int hicn_data_set_name (hicn_format_t format, hicn_header_t * data, - const hicn_name_t * name); -int hicn_data_get_locator (hicn_format_t format, const hicn_header_t * data, - ip_address_t * prefix); -int hicn_data_set_locator (hicn_format_t format, hicn_header_t * data, - const ip_address_t * prefix); -int hicn_data_compare (const hicn_header_t * data_1, - const hicn_header_t * data_2); -int hicn_data_get_expiry_time (const hicn_header_t * data, u32 * expiry_time); -int hicn_data_set_expiry_time (hicn_header_t * data, u32 expiry_time); -int hicn_data_get_header_length (hicn_format_t format, hicn_header_t * data, - size_t * header_length); +int hicn_data_get_name (hicn_format_t format, const hicn_header_t *data, + hicn_name_t *name); +int hicn_data_set_name (hicn_format_t format, hicn_header_t *data, + const hicn_name_t *name); +int hicn_data_get_locator (hicn_format_t format, const hicn_header_t *data, + ip_address_t *prefix); +int hicn_data_set_locator (hicn_format_t format, hicn_header_t *data, + const ip_address_t *prefix); +int hicn_data_compare (const hicn_header_t *data_1, + const hicn_header_t *data_2); +int hicn_data_get_expiry_time (const hicn_header_t *data, u32 *expiry_time); +int hicn_data_set_expiry_time (hicn_header_t *data, u32 expiry_time); +int hicn_data_get_header_length (hicn_format_t format, hicn_header_t *data, + size_t *header_length); int hicn_data_get_payload_length (hicn_format_t format, - const hicn_header_t * data, - size_t * payload_length); -int hicn_data_get_path_label (const hicn_header_t * data, u32 * path_label); -int hicn_data_set_path_label (hicn_header_t * data, u32 path_label); -int hicn_data_get_payload (hicn_format_t format, const hicn_header_t * data, - u8 ** payload, size_t * payload_size, - bool hard_copy); -int hicn_data_set_payload (hicn_format_t format, hicn_header_t * data, - const u8 * payload, size_t payload_length); -int hicn_data_get_payload_type (const hicn_header_t * data, - hicn_payload_type_t * payload_type); -int hicn_data_set_payload_type (hicn_header_t * data, + const hicn_header_t *data, + size_t *payload_length); +int hicn_data_get_path_label (const hicn_header_t *data, u32 *path_label); +int hicn_data_set_path_label (hicn_header_t *data, u32 path_label); +int hicn_data_get_payload (hicn_format_t format, const hicn_header_t *data, + u8 **payload, size_t *payload_size, bool hard_copy); +int hicn_data_set_payload (hicn_format_t format, hicn_header_t *data, + const u8 *payload, size_t payload_length); +int hicn_data_get_payload_type (const hicn_header_t *data, + hicn_payload_type_t *payload_type); +int hicn_data_set_payload_type (hicn_header_t *data, hicn_payload_type_t payload_type); -int hicn_data_reset_for_hash (hicn_format_t format, hicn_header_t * packet); +int hicn_data_reset_for_hash (hicn_format_t format, hicn_header_t *packet); #endif /* HICN_COMPAT_H */ diff --git a/lib/includes/hicn/error.h b/lib/includes/hicn/error.h index 3e027c4e5..9303aeb7e 100644 --- a/lib/includes/hicn/error.h +++ b/lib/includes/hicn/error.h @@ -24,16 +24,17 @@ * Error definitions ******************************************************************************/ -#define foreach_libhicn_error \ -_(NONE, 0, "OK") \ -_(UNSPECIFIED, 128, "Unspecified Error") \ -_(NOT_IMPLEMENTED, 180, "Function not yet implemented") \ -_(NOT_HICN, 202, "Non hICN packet") \ -_(UNKNOWN_ADDRESS, 210, "Unknown address") \ -_(INVALID_PARAMETER, 220, "Invalid parameter") \ -_(INVALID_IP_ADDRESS, 221, "Invalid IP address") \ -_(CORRUPTED_PACKET, 222, "Corrupted packet ") \ -_(UNEXPECTED, 298, "Unexpected error") +#define foreach_libhicn_error \ +_(NONE, 0, "OK") \ +_(UNSPECIFIED, 128, "Unspecified Error") \ +_(NOT_IMPLEMENTED, 180, "Function not yet implemented") \ +_(NOT_HICN, 202, "Non hICN packet") \ +_(UNKNOWN_ADDRESS, 210, "Unknown address") \ +_(INVALID_PARAMETER, 220, "Invalid parameter") \ +_(INVALID_IP_ADDRESS, 221, "Invalid IP address") \ +_(CORRUPTED_PACKET, 222, "Corrupted packet ") \ +_(REWRITE_CKSUM_REQUIRED, 223, "Incremental csum calculation error: cksum required.") \ +_(UNEXPECTED, 298, "Unexpected error") typedef enum { diff --git a/lib/includes/hicn/face.h b/lib/includes/hicn/face.h index 0d116b64b..3438552ff 100644 --- a/lib/includes/hicn/face.h +++ b/lib/includes/hicn/face.h @@ -219,4 +219,3 @@ int face_set_tags(face_t * face, policy_tags_t tags); face_protocol_t get_protocol(face_type_t face_type); #endif /* HICN_FACE_H */ - diff --git a/lib/includes/hicn/ops.h b/lib/includes/hicn/ops.h index 47795efd5..7d4ae86d8 100644 --- a/lib/includes/hicn/ops.h +++ b/lib/includes/hicn/ops.h @@ -105,6 +105,22 @@ typedef struct hicn_ops_s int (*set_interest_name_suffix) (hicn_type_t type, hicn_protocol_t * h, const hicn_name_suffix_t * suffix); + /** + * @brief Set flag to mark current packet as interest + * @param [in] type - hICN packet type + * @param [in,out] h - Buffer holding the Interest packet + * @return hICN error code + */ + int (*mark_packet_as_interest) (hicn_type_t type, hicn_protocol_t * h); + + /** + * @brief Set flag to mark current packet as data + * @param [in] type - hICN packet type + * @param [in,out] h - Buffer holding the Interest packet + * @return hICN error code + */ + int (*mark_packet_as_data) (hicn_type_t type, hicn_protocol_t * h); + /** * @brief Clear the necessary Interest fields in order to hash it * @param [in] type - hICN packet type @@ -237,7 +253,7 @@ typedef struct hicn_ops_s * @param [in,out] h - Buffer holding the packet * @param [in] partial_csum - Partial checksum (set to 0, used internally to * carry intermediate values from IP pseudo-header) - * @param [in] payload_length - Payload length (can be set to 0, retrieved + * @param [in] payload_length - Payload length (can be set to ~0, retrieved * and used internally to carry payload length across protocol headers) * @return hICN error code */ @@ -248,9 +264,8 @@ typedef struct hicn_ops_s * @brief Validate all checksums in packet headers * @param [in] type - hICN packet type * @param [in] h - Buffer holding the packet - * @param [in] partial_csum - Partial checksum (set to 0, used internally to - * carry intermediate values from IP pseudo-header) - * @param [in] payload_length - Payload length (can be set to 0, retrieved + * @param [in] partial_csum - Partial checksum, or zero if no partial checksum available + * @param [in] payload_length - Payload length (can be set to ~0, retrieved * and used internally to carry payload length across protocol headers) * @return hICN error code */ @@ -278,12 +293,15 @@ typedef struct hicn_ops_s * @param [in] addr_old - Old locator (set to NULL, used internally to * compute incremental checksums) * @param [in] face_id - Face identifier used to update pathlabel + * @param [in] reset_pl - If not zero, reset the current pathlabel + * before update it * @return hICN error code */ int (*rewrite_data) (hicn_type_t type, hicn_protocol_t * h, const ip46_address_t * addr_new, ip46_address_t * addr_old, - const hicn_faceid_t face_id); + const hicn_faceid_t face_id, + u8 reset_pl); /** * @brief Return the packet length @@ -438,6 +456,8 @@ typedef struct hicn_ops_s ATTR_INIT(set_interest_name, protocol ## _set_interest_name), \ ATTR_INIT(get_interest_name_suffix, protocol ## _get_interest_name_suffix), \ ATTR_INIT(set_interest_name_suffix, protocol ## _set_interest_name_suffix), \ + ATTR_INIT(mark_packet_as_interest, protocol ## _mark_packet_as_interest), \ + ATTR_INIT(mark_packet_as_data, protocol ## _mark_packet_as_data), \ ATTR_INIT(reset_interest_for_hash, protocol ## _reset_interest_for_hash), \ ATTR_INIT(get_data_locator, protocol ## _get_data_locator), \ ATTR_INIT(set_data_locator, protocol ## _set_data_locator), \ @@ -537,6 +557,12 @@ PAYLOAD (hicn_type_t type, const hicn_protocol_t * h) #define DECLARE_set_interest_name_suffix(protocol, error) \ int protocol ## _set_interest_name_suffix(hicn_type_t type, hicn_protocol_t * h, const hicn_name_suffix_t * suffix) { return HICN_LIB_ERROR_ ## error ; } +#define DECLARE_mark_packet_as_interest(protocol, error) \ + int protocol ## _mark_packet_as_interest(hicn_type_t type, hicn_protocol_t * h) { return HICN_LIB_ERROR_ ## error ; } + +#define DECLARE_mark_packet_as_data(protocol, error) \ + int protocol ## _mark_packet_as_data(hicn_type_t type, hicn_protocol_t * h) { return HICN_LIB_ERROR_ ## error ; } + #define DECLARE_reset_interest_for_hash(protocol, error) \ int protocol ## _reset_interest_for_hash(hicn_type_t type, hicn_protocol_t * h) { return HICN_LIB_ERROR_ ## error ; } @@ -586,7 +612,7 @@ PAYLOAD (hicn_type_t type, const hicn_protocol_t * h) int protocol ## _rewrite_interest(hicn_type_t type, hicn_protocol_t * h, const ip46_address_t * addr_new, ip46_address_t * addr_old) { return HICN_LIB_ERROR_ ## error ; } #define DECLARE_rewrite_data(protocol, error) \ - int protocol ## _rewrite_data(hicn_type_t type, hicn_protocol_t * h, const ip46_address_t * addr_new, ip46_address_t * addr_old, const hicn_faceid_t face_id) { return HICN_LIB_ERROR_ ## error ; } + int protocol ## _rewrite_data(hicn_type_t type, hicn_protocol_t * h, const ip46_address_t * addr_new, ip46_address_t * addr_old, const hicn_faceid_t face_id, u8 reset_pl) { return HICN_LIB_ERROR_ ## error ; } #define DECLARE_get_length(protocol, error) \ int protocol ## _get_length(hicn_type_t type, const hicn_protocol_t * h, size_t * length) { return HICN_LIB_ERROR_ ## error ; } diff --git a/lib/includes/hicn/policy.h b/lib/includes/hicn/policy.h index 5a9a44467..d649630bd 100644 --- a/lib/includes/hicn/policy.h +++ b/lib/includes/hicn/policy.h @@ -159,12 +159,16 @@ int policy_tag_state_snprintf(char * s, size_t size, const policy_tag_state_t * typedef struct { char app_name[APP_NAME_LEN]; policy_tag_state_t tags[POLICY_TAG_N]; -} policy_t; +} hicn_policy_t; -static const policy_t POLICY_NONE = { +static const hicn_policy_t POLICY_NONE = { .app_name = { 0 }, .tags = { +#ifdef __ANDROID__ +#define _(x, y) { POLICY_STATE_NEUTRAL, 0 }, +#else #define _(x, y) [POLICY_TAG_ ## x] = { POLICY_STATE_NEUTRAL, 0 }, +#endif foreach_policy_tag #undef _ }, @@ -181,7 +185,7 @@ typedef struct { char ipv4_prefix[INET_ADDRSTRLEN + PFX_STRLEN]; char ipv6_prefix[INET6_ADDRSTRLEN + PFX_STRLEN]; }; - policy_t policy; + hicn_policy_t policy; } policy_description_t; #endif /* HICN_POLICY_H */ diff --git a/lib/includes/hicn/protocol/tcp.h b/lib/includes/hicn/protocol/tcp.h index 5cf1a3625..347682299 100644 --- a/lib/includes/hicn/protocol/tcp.h +++ b/lib/includes/hicn/protocol/tcp.h @@ -42,7 +42,11 @@ typedef struct union { u32 seq_ack; - hicn_pathlabel_t pathlabel; + struct + { + hicn_pathlabel_t pathlabel; + u8 pad[3]; + }; }; union @@ -124,8 +128,6 @@ typedef struct static_assert (EXPECTED_TCP_HDRLEN == TCP_HDRLEN, "Size of TCP struct does not match its expected size."); -#ifndef HICN_VPP_PLUGIN - /* TCP flags bit 0 first. */ #define foreach_tcp_flag \ _ (FIN) /**< No more data from sender. */ \ @@ -152,12 +154,6 @@ enum #undef _ }; -#endif /* HICN_VPP_PLUGIN */ - -// get_data_name_suffix -// name->ip4.suffix = h->v4.tcp.seq; - - #endif /* HICN_PROTOCOL_TCP_H */ /* diff --git a/lib/includes/hicn/strategy.h b/lib/includes/hicn/strategy.h new file mode 100644 index 000000000..fe47ce547 --- /dev/null +++ b/lib/includes/hicn/strategy.h @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2020 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. + */ + +/** + * \file strategy.h + * \brief hICN forwarding strategy + */ +#ifndef HICN_STRATEGY_H +#define HICN_STRATEGY_H + +typedef enum { + STRATEGY_TYPE_UNDEFINED, + STRATEGY_TYPE_LOADBALANCER, + STRATEGY_TYPE_LOW_LATENCY, + STRATEGY_TYPE_RANDOM, + STRATEGY_TYPE_N +} strategy_type_t; + +#define STRATEGY_TYPE_VALID(type) \ + ((type != STRATEGY_TYPE_UNDEFINED) && (type != STRATEGY_TYPE_N)) + +#define MAX_FWD_STRATEGY_RELATED_PREFIXES 10 + +#endif /* HICN_STRATEGY_H */ diff --git a/lib/includes/hicn/util/log.h b/lib/includes/hicn/util/log.h index 6763d464f..5650a164e 100644 --- a/lib/includes/hicn/util/log.h +++ b/lib/includes/hicn/util/log.h @@ -34,7 +34,7 @@ typedef struct { } log_conf_t; #define DEFAULT_LOG_CONF { \ - .log_level = LOG_INFO, \ + .log_level = LOG_TRACE, \ .debug = 0, \ .log_file = NULL, \ }; diff --git a/lib/includes/hicn/util/windows/dlfcn.h b/lib/includes/hicn/util/windows/dlfcn.h new file mode 100644 index 000000000..7775226cd --- /dev/null +++ b/lib/includes/hicn/util/windows/dlfcn.h @@ -0,0 +1,33 @@ +/* dlfcn.h */ + +#ifndef DLFCN_H +#define DLFCN_H +#define RTLD_GLOBAL 0x100 /* do not hide entries in this module */ +#define RTLD_LOCAL 0x000 /* hide entries in this module */ + +#define RTLD_LAZY 0x000 /* accept unresolved externs */ +#define RTLD_NOW 0x001 /* abort if module has unresolved externs */ + +/* + How to call in Windows: + + void *h = dlopen ("path\\library.dll", flags) + void (*fun)() = dlsym (h, "entry") +*/ + +#ifdef __cplusplus +extern "C" { +#endif + + void *dlopen (const char *filename, int flag); + int dlclose (void *handle); + + void *dlsym (void *handle, const char *name); + +const char *dlerror (void); + +#ifdef __cplusplus +} +#endif + +#endif \ No newline at end of file diff --git a/lib/includes/hicn/util/windows/windows_utils.h b/lib/includes/hicn/util/windows/windows_utils.h index c4662af5e..d24aaadbf 100755 --- a/lib/includes/hicn/util/windows/windows_utils.h +++ b/lib/includes/hicn/util/windows/windows_utils.h @@ -17,12 +17,16 @@ #define WINDOWS_UTILS_H #define WIN32_LEAN_AND_MEAN #define HAVE_STRUCT_TIMESPEC +#ifndef NOMINMAX +#define NOMINMAX +#endif #include #include #include #include #include #include +#include "dlfcn.h" #ifndef IOVEC #define IOVEC @@ -152,3 +156,7 @@ int gettimeofday(struct timeval * tp, struct timezone * tzp); ((((x) & 0xff000000u) >> 24) | (((x) & 0x00ff0000u) >> 8) \ | (((x) & 0x0000ff00u) << 8) | (((x) & 0x000000ffu) << 24)) #endif + +#ifndef bzero +#define bzero(b,len) (memset((b), '\0', (len)), (void) 0) +#endif \ No newline at end of file -- cgit 1.2.3-korg