30#ifndef PROTOCORE_IKEV2_NATT_H
31#define PROTOCORE_IKEV2_NATT_H
42#define PC_IKE_N_NAT_DETECTION_SOURCE_IP 16388
44#define PC_IKE_N_NAT_DETECTION_DESTINATION_IP 16389
46#define PC_IKE_NATD_HASH_LEN 20
48#define PC_NATT_PORT 4500
50#define PC_NATT_NON_ESP_MARKER_LEN 4
52#define PC_NATT_KEEPALIVE_BYTE 0xFF
62size_t pc_ike_natd_hash(
const uint8_t init_spi[PC_IKE_SPI_LEN],
const uint8_t resp_spi[PC_IKE_SPI_LEN],
63 const uint8_t *ip,
size_t ip_len, uint16_t port, uint8_t out[PC_IKE_NATD_HASH_LEN]);
69size_t pc_ike_natd_source_build(uint8_t *buf,
size_t cap, IkePayloadType next_payload,
70 const uint8_t init_spi[PC_IKE_SPI_LEN],
const uint8_t resp_spi[PC_IKE_SPI_LEN],
71 const uint8_t *src_ip,
size_t ip_len, uint16_t src_port);
77size_t pc_ike_natd_dest_build(uint8_t *buf,
size_t cap, IkePayloadType next_payload,
78 const uint8_t init_spi[PC_IKE_SPI_LEN],
const uint8_t resp_spi[PC_IKE_SPI_LEN],
79 const uint8_t *dst_ip,
size_t ip_len, uint16_t dst_port);
87bool pc_ike_natd_match(
const uint8_t init_spi[PC_IKE_SPI_LEN],
const uint8_t resp_spi[PC_IKE_SPI_LEN],
88 const uint8_t *ip,
size_t ip_len, uint16_t port,
const uint8_t *hash);
96bool pc_ike_natd_peer_behind_nat(
const uint8_t init_spi[PC_IKE_SPI_LEN],
const uint8_t resp_spi[PC_IKE_SPI_LEN],
97 const uint8_t *observed_src_ip,
size_t ip_len, uint16_t observed_src_port,
98 const uint8_t *received_source_hash);
106bool pc_ike_natd_self_behind_nat(
const uint8_t init_spi[PC_IKE_SPI_LEN],
const uint8_t resp_spi[PC_IKE_SPI_LEN],
107 const uint8_t *local_ip,
size_t ip_len, uint16_t local_port,
108 const uint8_t *received_dest_hash);
113bool pc_natt_is_keepalive(
const uint8_t *p,
size_t len);
121bool pc_natt_is_ike(
const uint8_t *p,
size_t len);
IKEv2 (RFC 7296) message + payload codec (PC_ENABLE_IKEV2) - a zero-heap builder / parser for the Int...
User-facing configuration for ProtoCore.