diff options
Diffstat (limited to 'lib/includes/hicn/base.h')
-rw-r--r-- | lib/includes/hicn/base.h | 36 |
1 files changed, 23 insertions, 13 deletions
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 <Winsock2.h> +#else +#include <netinet/in.h> +#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,20 +99,27 @@ 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 * * This type distinguishes several types of data packet, which can either carry @@ -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; |