28 #include <netinet/in.h>
31 #define HICN_DEFAULT_TTL 254
33 typedef u32 hicn_faceid_t;
34 typedef u8 hicn_pathlabel_t;
35 typedef u32 hicn_lifetime_t;
37 #define HICN_MAX_LIFETIME_SCALED 0xFFFF
38 #define HICN_MAX_LIFETIME_MULTIPLIER 0x0F
39 #define HICN_MAX_LIFETIME HICN_MAX_LIFETIME_SCALED << HICN_MAX_LIFETIME_MULTIPLIER
61 #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
66 #elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
77 #error "Unsupported endianness"
87 #define HICN_TYPE(x,y,z,t) (hicn_type_t) {{ .l1 = x, .l2 = y, .l3 = z, .l4 = t }}
90 HICN_TYPE(
int x,
int y,
int z,
int t)
101 #define HICN_TYPE_IPV4_TCP HICN_TYPE(IPPROTO_IP, IPPROTO_TCP, IPPROTO_NONE, IPPROTO_NONE)
102 #define HICN_TYPE_IPV4_ICMP HICN_TYPE(IPPROTO_IP, IPPROTO_ICMP, IPPROTO_NONE, IPPROTO_NONE)
103 #define HICN_TYPE_IPV6_TCP HICN_TYPE(IPPROTO_IPV6, IPPROTO_TCP, IPPROTO_NONE, IPPROTO_NONE)
104 #define HICN_TYPE_IPV6_ICMP HICN_TYPE(IPPROTO_IPV6, IPPROTO_ICMPV6, IPPROTO_NONE, IPPROTO_NONE)
105 #define HICN_TYPE_IPV4_TCP_AH HICN_TYPE(IPPROTO_IP, IPPROTO_TCP, IPPROTO_AH, IPPROTO_NONE)
106 #define HICN_TYPE_IPV4_ICMP_AH HICN_TYPE(IPPROTO_IP, IPPROTO_ICMP, IPPROTO_AH, IPPROTO_NONE)
107 #define HICN_TYPE_IPV6_TCP_AH HICN_TYPE(IPPROTO_IPV6, IPPROTO_TCP, IPPROTO_AH, IPPROTO_NONE)
108 #define HICN_TYPE_IPV6_ICMP_AH HICN_TYPE(IPPROTO_IPV6, IPPROTO_ICMPV6, IPPROTO_AH, IPPROTO_NONE)
109 #define HICN_TYPE_NONE HICN_TYPE(IPPROTO_NONE, IPPROTO_NONE, IPPROTO_NONE, IPPROTO_NONE)
118 return (type.
l1 == IPPROTO_NONE) && (type.
l2 == IPPROTO_NONE) &&
119 (type.
l3 == IPPROTO_NONE) && (type.
l4 == IPPROTO_NONE);
145 #define HICN_PATH_LABEL_MASK 0x000000ff
146 #define HICN_PATH_LABEL_SIZE 8
158 hicn_pathlabel_t * new_label)
160 hicn_pathlabel_t pl_face_id =
164 ((current_label << 1) | (current_label >> (HICN_PATH_LABEL_SIZE - 1))) ^