]> git.proxmox.com Git - mirror_frr.git/blob - nhrpd/nhrp_protocol.h
nhrpd: implement next hop resolution protocol
[mirror_frr.git] / nhrpd / nhrp_protocol.h
1 /* nhrp_protocol.h - NHRP protocol definitions
2 *
3 * Copyright (c) 2007-2012 Timo Teräs <timo.teras@iki.fi>
4 *
5 * This software is licensed under the MIT License.
6 * See MIT-LICENSE.txt for additional details.
7 */
8
9 #ifndef NHRP_PROTOCOL_H
10 #define NHRP_PROTOCOL_H
11
12 #include <stdint.h>
13
14 /* NHRP Ethernet protocol number */
15 #define ETH_P_NHRP 0x2001
16
17 /* NHRP Version */
18 #define NHRP_VERSION_RFC2332 1
19
20 /* NHRP Packet Types */
21 #define NHRP_PACKET_RESOLUTION_REQUEST 1
22 #define NHRP_PACKET_RESOLUTION_REPLY 2
23 #define NHRP_PACKET_REGISTRATION_REQUEST 3
24 #define NHRP_PACKET_REGISTRATION_REPLY 4
25 #define NHRP_PACKET_PURGE_REQUEST 5
26 #define NHRP_PACKET_PURGE_REPLY 6
27 #define NHRP_PACKET_ERROR_INDICATION 7
28 #define NHRP_PACKET_TRAFFIC_INDICATION 8
29
30 /* NHRP Extension Types */
31 #define NHRP_EXTENSION_FLAG_COMPULSORY 0x8000
32 #define NHRP_EXTENSION_END 0
33 #define NHRP_EXTENSION_PAYLOAD 0
34 #define NHRP_EXTENSION_RESPONDER_ADDRESS 3
35 #define NHRP_EXTENSION_FORWARD_TRANSIT_NHS 4
36 #define NHRP_EXTENSION_REVERSE_TRANSIT_NHS 5
37 #define NHRP_EXTENSION_AUTHENTICATION 7
38 #define NHRP_EXTENSION_VENDOR 8
39 #define NHRP_EXTENSION_NAT_ADDRESS 9
40
41 /* NHRP Error Indication Codes */
42 #define NHRP_ERROR_UNRECOGNIZED_EXTENSION 1
43 #define NHRP_ERROR_LOOP_DETECTED 2
44 #define NHRP_ERROR_PROTOCOL_ADDRESS_UNREACHABLE 6
45 #define NHRP_ERROR_PROTOCOL_ERROR 7
46 #define NHRP_ERROR_SDU_SIZE_EXCEEDED 8
47 #define NHRP_ERROR_INVALID_EXTENSION 9
48 #define NHRP_ERROR_INVALID_RESOLUTION_REPLY 10
49 #define NHRP_ERROR_AUTHENTICATION_FAILURE 11
50 #define NHRP_ERROR_HOP_COUNT_EXCEEDED 15
51
52 /* NHRP CIE Codes */
53 #define NHRP_CODE_SUCCESS 0
54 #define NHRP_CODE_ADMINISTRATIVELY_PROHIBITED 4
55 #define NHRP_CODE_INSUFFICIENT_RESOURCES 5
56 #define NHRP_CODE_NO_BINDING_EXISTS 11
57 #define NHRP_CODE_BINDING_NON_UNIQUE 13
58 #define NHRP_CODE_UNIQUE_ADDRESS_REGISTERED 14
59
60 /* NHRP Flags for Resolution request/reply */
61 #define NHRP_FLAG_RESOLUTION_SOURCE_IS_ROUTER 0x8000
62 #define NHRP_FLAG_RESOLUTION_AUTHORATIVE 0x4000
63 #define NHRP_FLAG_RESOLUTION_DESTINATION_STABLE 0x2000
64 #define NHRP_FLAG_RESOLUTION_UNIQUE 0x1000
65 #define NHRP_FLAG_RESOLUTION_SOURCE_STABLE 0x0800
66 #define NHRP_FLAG_RESOLUTION_NAT 0x0002
67
68 /* NHRP Flags for Registration request/reply */
69 #define NHRP_FLAG_REGISTRATION_UNIQUE 0x8000
70 #define NHRP_FLAG_REGISTRATION_NAT 0x0002
71
72 /* NHRP Flags for Purge request/reply */
73 #define NHRP_FLAG_PURGE_NO_REPLY 0x8000
74
75 /* NHRP Authentication extension types (ala Cisco) */
76 #define NHRP_AUTHENTICATION_PLAINTEXT 0x00000001
77
78 /* NHRP Packet Structures */
79 struct nhrp_packet_header {
80 /* Fixed header */
81 uint16_t afnum;
82 uint16_t protocol_type;
83 uint8_t snap[5];
84 uint8_t hop_count;
85 uint16_t packet_size;
86 uint16_t checksum;
87 uint16_t extension_offset;
88 uint8_t version;
89 uint8_t type;
90 uint8_t src_nbma_address_len;
91 uint8_t src_nbma_subaddress_len;
92
93 /* Mandatory header */
94 uint8_t src_protocol_address_len;
95 uint8_t dst_protocol_address_len;
96 uint16_t flags;
97 union {
98 uint32_t request_id;
99 struct {
100 uint16_t code;
101 uint16_t offset;
102 } error;
103 } u;
104 } __attribute__((packed));
105
106 struct nhrp_cie_header {
107 uint8_t code;
108 uint8_t prefix_length;
109 uint16_t unused;
110 uint16_t mtu;
111 uint16_t holding_time;
112 uint8_t nbma_address_len;
113 uint8_t nbma_subaddress_len;
114 uint8_t protocol_address_len;
115 uint8_t preference;
116 } __attribute__((packed));
117
118 struct nhrp_extension_header {
119 uint16_t type;
120 uint16_t length;
121 } __attribute__((packed));
122
123 struct nhrp_cisco_authentication_extension {
124 uint32_t type;
125 uint8_t secret[8];
126 } __attribute__((packed));
127
128 #endif