50 ATTR_INIT (enabled,
false),
51 ATTR_INIT (timescale, 0),
53 ATTR_INIT (discovery,
true),
79 size_t hicn_mapme_create_packet (u8 * buf,
const hicn_prefix_t * prefix,
81 size_t hicn_mapme_create_ack (u8 * buf,
const mapme_params_t * params);
82 int hicn_mapme_parse_packet (
const u8 * packet,
hicn_prefix_t * prefix,
87 #define HICN_MAPME_ACK_FLAG (0x20 | 0x60)
89 #define HICN_MAPME_ICMP_TYPE_IPV4 5
90 #define HICN_MAPME_ICMP_TYPE_IPV6 137
91 #define HICN_MAPME_ICMP_TYPE_ACK_IPV4 (HICN_MAPME_ICMP_TYPE_IPV4 | HICN_MAPME_ACK_FLAG)
92 #define HICN_MAPME_ICMP_TYPE_ACK_IPV6 (HICN_MAPME_ICMP_TYPE_IPV6 | HICN_MAPME_ACK_FLAG)
93 #define HICN_MAPME_ICMP_CODE 0
95 #define HICN_MAPME_TYPE_IS_IU(type) ((type == HICN_MAPME_ICMP_TYPE_IPV4) || (type == HICN_MAPME_ICMP_TYPE_IPV6))
96 #define HICN_MAPME_TYPE_IS_IU_ACK(type) ((type == HICN_MAPME_ICMP_TYPE_ACK_IPV4) || (type == HICN_MAPME_ICMP_TYPE_ACK_IPV6))
98 #define HICN_MAPME_IS_IU(type, code) (HICN_MAPME_TYPE_IS_IU(type) && (code == HICN_MAPME_ICMP_CODE))
99 #define HICN_MAPME_IS_ACK(type, code) (HICN_MAPME_TYPE_IS_IU_ACK(type) && (code == HICN_MAPME_ICMP_CODE))
101 #define HICN_IS_MAPME(type, code) (HICN_MAPME_IS_IU(type, code) || HICN_MAPME_IS_ACK(type, code))
104 #define HICN_MAPME_IS_ACK_FAST(icmp_type) (icmp_type & HICN_MAPME_ACK_FLAG)
107 #define HICN_MAPME_TTL 255 // typical for redirect (ref?)
112 #define EXPECTED_MAPME_V4_HDRLEN 120
127 #define EXPECTED_MAPME_V6_HDRLEN 88
146 #define HICN_MAPME_V4_HDRLEN sizeof(hicn_mapme_v4_header_t)
147 #define HICN_MAPME_V6_HDRLEN sizeof(hicn_mapme_v6_header_t)
149 static_assert (EXPECTED_MAPME_V4_HDRLEN == HICN_MAPME_V4_HDRLEN,
150 "Size of MAPME_V4 struct does not match its expected size.");
151 static_assert (EXPECTED_MAPME_V6_HDRLEN == HICN_MAPME_V6_HDRLEN,
152 "Size of MAPME_V6 struct does not match its expected size.");