diff options
author | Mark Bryars <mark@darkskiez.co.uk> | 2012-05-04 22:19:13 +0100 |
---|---|---|
committer | Mark Bryars <mark@darkskiez.co.uk> | 2012-05-04 22:19:13 +0100 |
commit | e756c7948078bd5109c5b8a0f252851efc4532d6 (patch) | |
tree | 39c4c6d660d7c377989e1adc1492ec198cdaa084 /nhrp/nhrp_protocol.h | |
download | vyos-opennhrp-e756c7948078bd5109c5b8a0f252851efc4532d6.tar.gz vyos-opennhrp-e756c7948078bd5109c5b8a0f252851efc4532d6.zip |
Imported Upstream version 0.13
Diffstat (limited to 'nhrp/nhrp_protocol.h')
-rw-r--r-- | nhrp/nhrp_protocol.h | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/nhrp/nhrp_protocol.h b/nhrp/nhrp_protocol.h new file mode 100644 index 0000000..8cf213b --- /dev/null +++ b/nhrp/nhrp_protocol.h @@ -0,0 +1,130 @@ +/* nhrp_protocol.h - NHRP protocol definitions + * + * Copyright (C) 2007 Timo Teräs <timo.teras@iki.fi> + * All rights reserved. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 or later as + * published by the Free Software Foundation. + * + * See http://www.gnu.org/ for details. + */ + +#ifndef NHRP_PROTOCOL_H +#define NHRP_PROTOCOL_H + +#include <stdint.h> +#include "afnum.h" + +/* NHRP Version */ +#define NHRP_VERSION_RFC2332 1 + +/* NHRP Packet Types */ +#define NHRP_PACKET_RESOLUTION_REQUEST 1 +#define NHRP_PACKET_RESOLUTION_REPLY 2 +#define NHRP_PACKET_REGISTRATION_REQUEST 3 +#define NHRP_PACKET_REGISTRATION_REPLY 4 +#define NHRP_PACKET_PURGE_REQUEST 5 +#define NHRP_PACKET_PURGE_REPLY 6 +#define NHRP_PACKET_ERROR_INDICATION 7 +#define NHRP_PACKET_TRAFFIC_INDICATION 8 + +/* NHRP Extension Types */ +#define NHRP_EXTENSION_FLAG_COMPULSORY 0x8000 +#define NHRP_EXTENSION_END 0 +#define NHRP_EXTENSION_PAYLOAD 0 +#define NHRP_EXTENSION_RESPONDER_ADDRESS 3 +#define NHRP_EXTENSION_FORWARD_TRANSIT_NHS 4 +#define NHRP_EXTENSION_REVERSE_TRANSIT_NHS 5 +#define NHRP_EXTENSION_AUTHENTICATION 7 +#define NHRP_EXTENSION_VENDOR 8 +#define NHRP_EXTENSION_NAT_ADDRESS 9 + +/* NHRP Error Indication Codes */ +#define NHRP_ERROR_UNRECOGNIZED_EXTENSION constant_htons(1) +#define NHRP_ERROR_LOOP_DETECTED constant_htons(2) +#define NHRP_ERROR_PROTOCOL_ADDRESS_UNREACHABLE constant_htons(6) +#define NHRP_ERROR_PROTOCOL_ERROR constant_htons(7) +#define NHRP_ERROR_SDU_SIZE_EXCEEDED constant_htons(8) +#define NHRP_ERROR_INVALID_EXTENSION constant_htons(9) +#define NHRP_ERROR_INVALID_RESOLUTION_REPLY constant_htons(10) +#define NHRP_ERROR_AUTHENTICATION_FAILURE constant_htons(11) +#define NHRP_ERROR_HOP_COUNT_EXCEEDED constant_htons(15) + +/* NHRP CIE Codes */ +#define NHRP_CODE_SUCCESS 0 +#define NHRP_CODE_ADMINISTRATIVELY_PROHIBITED 4 +#define NHRP_CODE_INSUFFICIENT_RESOURCES 5 +#define NHRP_CODE_NO_BINDING_EXISTS 11 +#define NHRP_CODE_BINDING_NON_UNIQUE 13 +#define NHRP_CODE_UNIQUE_ADDRESS_REGISTERED 14 + +/* NHRP Flags for Resolution request/reply */ +#define NHRP_FLAG_RESOLUTION_SOURCE_IS_ROUTER constant_htons(0x8000) +#define NHRP_FLAG_RESOLUTION_AUTHORATIVE constant_htons(0x4000) +#define NHRP_FLAG_RESOLUTION_DESTINATION_STABLE constant_htons(0x2000) +#define NHRP_FLAG_RESOLUTION_UNIQUE constant_htons(0x1000) +#define NHRP_FLAG_RESOLUTION_SOURCE_STABLE constant_htons(0x0800) +#define NHRP_FLAG_RESOLUTION_NAT constant_htons(0x0002) + +/* NHRP Flags for Registration request/reply */ +#define NHRP_FLAG_REGISTRATION_UNIQUE constant_htons(0x8000) +#define NHRP_FLAG_REGISTRATION_NAT constant_htons(0x0002) + +/* NHRP Flags for Purge request/reply */ +#define NHRP_FLAG_PURGE_NO_REPLY constant_htons(0x8000) + +/* NHRP Authentication extension types (ala Cisco) */ +#define NHRP_AUTHENTICATION_PLAINTEXT constant_htonl(0x00000001) + +/* NHRP Packet Structures */ +struct nhrp_packet_header { + /* Fixed header */ + uint16_t afnum; + uint16_t protocol_type; + uint8_t snap[5]; + uint8_t hop_count; + uint16_t packet_size; + uint16_t checksum; + uint16_t extension_offset; + uint8_t version; + uint8_t type; + uint8_t src_nbma_address_len; + uint8_t src_nbma_subaddress_len; + + /* Mandatory header */ + uint8_t src_protocol_address_len; + uint8_t dst_protocol_address_len; + uint16_t flags; + union { + uint32_t request_id; + struct { + uint16_t code; + uint16_t offset; + } error; + } u; +}; + +struct nhrp_cie_header { + uint8_t code; + uint8_t prefix_length; + uint16_t unused; + uint16_t mtu; + uint16_t holding_time; + uint8_t nbma_address_len; + uint8_t nbma_subaddress_len; + uint8_t protocol_address_len; + uint8_t preference; +}; + +struct nhrp_extension_header { + uint16_t type; + uint16_t length; +}; + +struct nhrp_cisco_authentication_extension { + uint32_t type; + uint8_t secret[8]; +}; + +#endif |