source: src/router/quagga/nhrpd/nhrp_protocol.h @ 31640

Last change on this file since 31640 was 31640, checked in by brainslayer, 3 months ago

update quagga

File size: 3.5 KB
Line 
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 */
79struct 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
106struct 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
118struct nhrp_extension_header {
119        uint16_t        type;
120        uint16_t        length;
121} __attribute__((packed));
122
123struct nhrp_cisco_authentication_extension {
124        uint32_t        type;
125        uint8_t         secret[8];
126} __attribute__((packed));
127
128#endif
Note: See TracBrowser for help on using the repository browser.