]> git.proxmox.com Git - mirror_frr.git/blame - eigrpd/eigrp_const.h
babeld/eigrpd: flip VTY ports & fix rpm
[mirror_frr.git] / eigrpd / eigrp_const.h
CommitLineData
7f57883e
DS
1/*
2 * EIGRP Definition of Constants.
3 * Copyright (C) 2013-2016
4 * Authors:
5 * Donnie Savage
6 * Jan Janovic
7 * Matej Perina
8 * Peter Orsag
9 * Peter Paluch
10 * Frantisek Gazo
11 * Tomas Hvorkovy
12 * Martin Kontsek
13 * Lukas Koribsky
14 *
15 * This file is part of GNU Zebra.
16 *
17 * GNU Zebra is free software; you can redistribute it and/or modify it
18 * under the terms of the GNU General Public License as published by the
19 * Free Software Foundation; either version 2, or (at your option) any
20 * later version.
21 *
22 * GNU Zebra is distributed in the hope that it will be useful, but
23 * WITHOUT ANY WARRANTY; without even the implied warranty of
24 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
25 * General Public License for more details.
26 *
896014f4
DL
27 * You should have received a copy of the GNU General Public License along
28 * with this program; see the file COPYING; if not, write to the Free Software
29 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
7f57883e
DS
30 */
31
32#ifndef _ZEBRA_EIGRP_CONST_H_
33#define _ZEBRA_EIGRP_CONST_H_
34
35#define FALSE 0
36
37#define EIGRP_NEIGHBOR_DOWN 0
38#define EIGRP_NEIGHBOR_PENDING 1
39#define EIGRP_NEIGHBOR_UP 2
40#define EIGRP_NEIGHBOR_STATE_MAX 3
41
42/*Packet requiring ack will be retransmitted again after this time*/
43#define EIGRP_PACKET_RETRANS_TIME 2 /* in seconds */
44#define EIGRP_PACKET_RETRANS_MAX 16 /* number of retrans attempts */
45#define PLAINTEXT_LENGTH 81
46
47/*Metric variance multiplier*/
48#define EIGRP_VARIANCE_DEFAULT 1
49#define EIGRP_MAX_PATHS_DEFAULT 4
50
51
52/* Return values of functions involved in packet verification */
53#define MSG_OK 0
54#define MSG_NG 1
55
56#define EIGRP_HEADER_VERSION 2
57
58/* Default protocol, port number. */
59#ifndef IPPROTO_EIGRPIGP
60#define IPPROTO_EIGRPIGP 88
61#endif /* IPPROTO_EIGRPIGP */
62
63#define EIGRP_AUTH_MD5_TLV_SIZE 40
64#define EIGRP_AUTH_SHA256_TLV_SIZE 56
65
66/*Cisco routers use only first 44 bytes of basic hello for their MD5 calculations*/
67#define EIGRP_MD5_BASIC_COMPUTE 44
68#define EIGRP_MD5_UPDATE_INIT_COMPUTE 40
69
70
71
72#define EIGRP_AUTH_BASIC_HELLO_FLAG 0x01
73#define EIGRP_AUTH_TID_HELLO_FLAG 0x02
74#define EIGRP_AUTH_UPDATE_INIT_FLAG 0x04
75#define EIGRP_AUTH_UPDATE_FLAG 0x08
76#define EIGRP_AUTH_EXTRA_SALT_FLAG 0x10
77
78#define EIGRP_NEXT_SEQUENCE_TLV_SIZE 8
79
80/* IP TTL for EIGRP protocol. */
81#define EIGRP_IP_TTL 1
82
83/* VTY port number. */
e763afa5 84#define EIGRP_VTY_PORT 2613
7f57883e
DS
85
86/* Default configuration file name for eigrp. */
87#define EIGRP_DEFAULT_CONFIG "eigrpd.conf"
88
89#define EIGRP_HELLO_INTERVAL_DEFAULT 5
90#define EIGRP_HOLD_INTERVAL_DEFAULT 15
63863c47
RW
91#define EIGRP_BANDWIDTH_DEFAULT 100000
92#define EIGRP_DELAY_DEFAULT 10
7f57883e
DS
93#define EIGRP_RELIABILITY_DEFAULT 255
94#define EIGRP_LOAD_DEFAULT 1
95
96#define EIGRP_MULTICAST_ADDRESS 0xe000000A /*224.0.0.10*/
97
98#define EIGRP_MAX_METRIC 0xffffffffU /*4294967295*/
99
100#define DEFAULT_ROUTE ZEBRA_ROUTE_MAX
101#define DEFAULT_ROUTE_TYPE(T) ((T) == DEFAULT_ROUTE)
102
103#define INTERFACE_DOWN_BY_ZEBRA 1
104#define INTERFACE_DOWN_BY_VTY 2
63863c47 105#define INTERFACE_DOWN_BY_FINAL 3
7f57883e
DS
106
107#define EIGRP_HELLO_NORMAL 0x00
108#define EIGRP_HELLO_GRACEFUL_SHUTDOWN 0x01
109#define EIGRP_HELLO_ADD_SEQUENCE 0x02
110#define EIGRP_HELLO_GRACEFUL_SHUTDOWN_NBR 0x04
111
112 /* EIGRP Network Type. */
113 #define EIGRP_IFTYPE_NONE 0
114 #define EIGRP_IFTYPE_POINTOPOINT 1
115 #define EIGRP_IFTYPE_BROADCAST 2
116 #define EIGRP_IFTYPE_NBMA 3
117 #define EIGRP_IFTYPE_POINTOMULTIPOINT 4
118 #define EIGRP_IFTYPE_LOOPBACK 5
119 #define EIGRP_IFTYPE_MAX 6
120
121#define EIGRP_IF_ACTIVE 0
122#define EIGRP_IF_PASSIVE 1
123
124/* EIGRP TT destination type */
125#define EIGRP_TOPOLOGY_TYPE_CONNECTED 0 // Connected network
126#define EIGRP_TOPOLOGY_TYPE_REMOTE 1 // Remote internal network
127#define EIGRP_TOPOLOGY_TYPE_REMOTE_EXTERNAL 2 // Remote external network
128
129/*EIGRP TT entry flags*/
9f56205c
DS
130#define EIGRP_NEIGHBOR_ENTRY_SUCCESSOR_FLAG (1 << 0)
131#define EIGRP_NEIGHBOR_ENTRY_FSUCCESSOR_FLAG (1 << 1)
132#define EIGRP_NEIGHBOR_ENTRY_INTABLE_FLAG (1 << 2)
133#define EIGRP_NEIGHBOR_ENTRY_EXTERNAL_FLAG (1 << 3)
7f57883e
DS
134
135/*EIGRP FSM state count, event count*/
136#define EIGRP_FSM_STATE_MAX 5
137#define EIGRP_FSM_EVENT_MAX 16
138
87805f88
DS
139/*EEGRP FSM states*/
140enum eigrp_fsm_states {
141 EIGRP_FSM_STATE_PASSIVE,
142 EIGRP_FSM_STATE_ACTIVE_0,
143 EIGRP_FSM_STATE_ACTIVE_1,
144 EIGRP_FSM_STATE_ACTIVE_2,
145 EIGRP_FSM_STATE_ACTIVE_3,
146};
7f57883e
DS
147
148/*EIGRP FSM events return values*/
149#define EIGRP_FSM_NEED_UPDATE 1
150#define EIGRP_FSM_NEED_QUERY 2
151
152/*EIGRP FSM events*/
153#define EIGRP_FSM_EVENT_NQ_FCN 0 /*input event other than query from succ, FC not satisfied*/
154#define EIGRP_FSM_EVENT_LR 1 /*last reply, FD is reset*/
155#define EIGRP_FSM_EVENT_Q_FCN 2 /*query from succ, FC not satisfied*/
156#define EIGRP_FSM_EVENT_LR_FCS 3 /*last reply, FC satisfied with current value of FDij*/
157#define EIGRP_FSM_EVENT_DINC 4 /*distance increase while in active state*/
158#define EIGRP_FSM_EVENT_QACT 5 /*query from succ while in active state*/
159#define EIGRP_FSM_EVENT_LR_FCN 6 /*last reply, FC not satisfied with current value of FDij*/
160#define EIGRP_FSM_KEEP_STATE 7 /*state not changed, usually by receiving not last reply */
161
7f57883e
DS
162/**
163 * External routes originate from some other protocol - these are them
164 */
165#define NULL_PROTID 0 /*!< unknown protocol */
166#define IGRP_PROTID 1 /*!< IGRP.. whos your daddy! */
167#define EIGRP_PROTID 2 /*!< EIGRP - Just flat out the best */
168#define STATIC_PROTID 3 /*!< Staticly configured source */
169#define RIP_PROTID 4 /*!< Routing Information Protocol */
170#define HELLO_PROTID 5 /*!< Hello? RFC-891 you there? */
171#define OSPF_PROTID 6 /*!< OSPF - Open Shortest Path First */
172#define ISIS_PROTID 7 /*!< Intermediate System To Intermediate System */
173#define EGP_PROTID 8 /*!< Exterior Gateway Protocol */
174#define BGP_PROTID 9 /*!< Border Gateway Protocol */
175#define IDRP_PROTID 10 /*!< InterDomain Routing Protocol */
176#define CONN_PROTID 11 /*!< Connected source */
177
178/*
179 * metric k-value defaults
180 */
181#define EIGRP_K1_DEFAULT 1 //!< unweighed inverse bandwidth
182#define EIGRP_K2_DEFAULT 0 //!< no loading term
183#define EIGRP_K3_DEFAULT 1 //!< unweighted delay
184#define EIGRP_K4_DEFAULT 0 //!< no reliability term
185#define EIGRP_K5_DEFAULT 0 //!< no reliability term
186#define EIGRP_K6_DEFAULT 0 //!< do not add in extended metrics
187
188
189/*
190 * EIGRP Fixed header
191 */
192#define EIGRP_HEADER_LEN 20U
193#define EIGRP_PACKET_MAX_LEN 65535U /* includes IP Header size. */
194
195
196#define EIGRP_TLV_HDR_LENGTH 4
197
198/**
199 * EIGRP Packet Opcodes
200 */
201#define EIGRP_OPC_UPDATE 1 /*!< packet containing routing information */
202#define EIGRP_OPC_REQUEST 2 /*!< sent to request one or more routes */
203#define EIGRP_OPC_QUERY 3 /*!< sent when a routing is in active start */
204#define EIGRP_OPC_REPLY 4 /*!< sent in response to a query */
205#define EIGRP_OPC_HELLO 5 /*!< sent to maintain a peering session */
206#define EIGRP_OPC_IPXSAP 6 /*!< IPX SAP information */
207#define EIGRP_OPC_PROBE 7 /*!< for test purposes */
208#define EIGRP_OPC_ACK 8 /*!< acknowledge */
209#define EIGRP_OPC_SIAQUERY 10 /*!< QUERY - with relaxed restrictions */
210#define EIGRP_OPC_SIAREPLY 11 /*!< REPLY - may contain old routing information */
211
212/**
213 * EIGRP TLV Range definitions
214 * PDM TLV Range
215 * General 0x0000
216 * IPv4 0x0100 ** TLVs for one and all
217 * ATALK 0x0200 ** legacy
218 * IPX 0x0300 ** discontinued
219 * IPv6 0x0400 ** legacy
220 * Multiprotocol 0x0600 ** wide metrics
221 * MultiTopology 0x00f0 ** deprecated
222 */
223#define EIGRP_TLV_RANGEMASK 0xfff0 /*!< should be 0xff00 - opps */
224#define EIGRP_TLV_GENERAL 0x0000
225
226/**
227 * 1.2 TLV Definitions ** legacy
228 * These are considered legacyu and are only used for backward compability with
229 * older Cisco Routers. They should not be your first choice for packet codings
230 */
231#define EIGRP_TLV_IPv4 0x0100 /*!< Classic IPv4 TLV encoding */
232#define EIGRP_TLV_ATALK 0x0200 /*!< Classic Appletalk TLV encoding*/
233#define EIGRP_TLV_IPX 0x0300 /*!< Classic IPX TLV encoding */
234#define EIGRP_TLV_IPv6 0x0400 /*!< Classic IPv6 TLV encoding */
235
236/**
237 * 2.0 Multi-Protocol TLV Definitions
238 * These are the current packet formats and should be used for packets
239 */
240#define EIGRP_TLV_MP 0x0600 /*!< Non-PDM specific encoding */
241
242/**
243 * TLV type definitions. Generic (protocol-independent) TLV types are
244 * defined here. Protocol-specific ones are defined elsewhere.
245 */
246#define EIGRP_TLV_PARAMETER (EIGRP_TLV_GENERAL | 0x0001) /*!< eigrp parameters */
247#define EIGRP_TLV_PARAMETER_LEN (12U)
248#define EIGRP_TLV_AUTH (EIGRP_TLV_GENERAL | 0x0002) /*!< authentication */
249#define EIGRP_TLV_SEQ (EIGRP_TLV_GENERAL | 0x0003) /*!< sequenced packet */
250#define EIGRP_TLV_SEQ_BASE_LEN (5U)
251#define EIGRP_TLV_SW_VERSION (EIGRP_TLV_GENERAL | 0x0004) /*!< software version */
252#define EIGRP_TLV_SW_VERSION_LEN (8U)
253#define EIGRP_TLV_NEXT_MCAST_SEQ (EIGRP_TLV_GENERAL | 0x0005) /*!< sequence number */
254#define EIGRP_TLV_PEER_TERMINATION (EIGRP_TLV_GENERAL | 0x0007) /*!< peer termination */
255#define EIGRP_TLV_PEER_TERMINATION_LEN (9U)
256#define EIGRP_TLV_PEER_TIDLIST (EIGRP_TLV_GENERAL | 0x0008) /*!< peer sub-topology list */
257
258/* Older cisco routers send TIDLIST value wrong, adding for backwards compatabily */
259#define EIGRP_TLV_PEER_MTRLIST (EIGRP_TLV_GENERAL | 0x00f5)
260
261/**
262 * Route Based TLVs
263 */
264#define EIGRP_TLV_REQUEST 0x0001
265#define EIGRP_TLV_INTERNAL 0x0002
266#define EIGRP_TLV_EXTERNAL 0x0003
267#define EIGRP_TLV_COMMUNITY 0x0004
268#define EIGRP_TLV_TYPEMASK 0x000f
269
270#define EIGRP_TLV_IPv4_REQ (EIGRP_TLV_IPv4 | EIGRP_TLV_REQUEST)
271#define EIGRP_TLV_IPv4_INT (EIGRP_TLV_IPv4 | EIGRP_TLV_INTERNAL)
272#define EIGRP_TLV_IPv4_EXT (EIGRP_TLV_IPv4 | EIGRP_TLV_EXTERNAL)
273#define EIGRP_TLV_IPv4_COM (EIGRP_TLV_IPv4 | EIGRP_TLV_COMMUNITY)
274
275/* max number of TLV IPv4 prefixes in packet */
276#define EIGRP_TLV_MAX_IPv4 25
277
278/**
279 *
280 * extdata flag field definitions
281 */
282#define EIGRP_OPAQUE_EXT 0x01 /*!< Route is external */
283#define EIGRP_OPAQUE_CD 0x02 /*!< Candidate default route */
284
285/**
286 * Address-Family types are taken from:
287 * http://www.iana.org/assignments/address-family-numbers
288 * to provide a standards based exchange of AFI information between
289 * EIGRP routers.
290 */
291#define EIGRP_AF_IPv4 1 /*!< IPv4 (IP version 4) */
292#define EIGRP_AF_IPv6 2 /*!< IPv6 (IP version 6) */
293#define EIGRP_AF_IPX 11 /*!< IPX */
294#define EIGRP_AF_ATALK 12 /*!< Appletalk */
295#define EIGRP_SF_COMMON 16384 /*!< Cisco Service Family */
296#define EIGRP_SF_IPv4 16385 /*!< Cisco IPv4 Service Family */
297#define EIGRP_SF_IPv6 16386 /*!< Cisco IPv6 Service Family */
298
299/**
300 * Authentication types supported by EIGRP
301 */
302#define EIGRP_AUTH_TYPE_NONE 0
303#define EIGRP_AUTH_TYPE_TEXT 1
304#define EIGRP_AUTH_TYPE_MD5 2
305#define EIGRP_AUTH_TYPE_MD5_LEN 16
306#define EIGRP_AUTH_TYPE_SHA256 3
307#define EIGRP_AUTH_TYPE_SHA256_LEN 32
308
309/**
310 * opaque flag field definitions
311 */
312#define EIGRP_OPAQUE_SRCWD 0x01 /*!< Route Source Withdraw */
313#define EIGRP_OPAQUE_ACTIVE 0x04 /*!< Route is currently in active state */
314#define EIGRP_OPAQUE_REPL 0x08 /*!< Route is replicated from different tableid */
315
316/**
317 * pak flag bit field definitions - 0 (none)-7 source priority
318 */
319#define EIGRP_PRIV_DEFAULT 0x00 /* 0 (none)-7 source priority */
320#define EIGRP_PRIV_LOW 0x01
321#define EIGRP_PRIV_MEDIUM 0x04
322#define EIGRP_PRIV_HIGH 0x07
323
324/*
325 * Init bit definition. First unicast transmitted Update has this
326 * bit set in the flags field of the fixed header. It tells the neighbor
327 * to down-load his topology table.
328 */
329#define EIGRP_INIT_FLAG 0x01
330
331/*
332 * CR bit (Conditionally Received) definition in flags field on header. Any
333 * packets with the CR-bit set can be accepted by an EIGRP speaker if and
334 * only if a previous Hello was received with the SEQUENCE_TYPE TLV present.
335 *
336 * This allows multicasts to be transmitted in order and reliably at the
337 * same time as unicasts are transmitted.
338 */
339#define EIGRP_CR_FLAG 0x02
340
341/*
342 * RS bit. The Restart flag is set in the hello and the init
343 * update packets during the nsf signaling period. A nsf-aware
344 * router looks at the RS flag to detect if a peer is restarting
345 * and maintain the adjacency. A restarting router looks at
346 * this flag to determine if the peer is helping out with the restart.
347 */
348#define EIGRP_RS_FLAG 0x04
349
350/*
351 * EOT bit. The End-of-Table flag marks the end of the start-up updates
352 * sent to a new peer. A nsf restarting router looks at this flag to
353 * determine if it has finished receiving the start-up updates from all
354 * peers. A nsf-aware router waits for this flag before cleaning up
355 * the stale routes from the restarting peer.
356 */
357#define EIGRP_EOT_FLAG 0x08
358
359/**
360 * EIGRP Virtual Router ID
361 *
362 * Define values to deal with EIGRP virtual router ids. Virtual
363 * router IDs are stored in the upper short of the EIGRP fixed packet
364 * header. The lower short of the packet header continues to be used
365 * as asystem number.
366 *
367 * Virtual Router IDs are PDM-independent. All PDMs will use
368 * VRID_BASE to indicate the 'base' or 'legacy' EIGRP instance.
369 * All PDMs need to initialize their vrid to VRID_BASE for compatibility
370 * with legacy routers.
371 * Once IPv6 supports 'MTR Multicast', it will use the same VRID as
372 * IPv4. No current plans to support VRIDs on IPX. :)
373 * Initial usage of VRID is to signal usage of Multicast topology for
374 * MTR.
375 *
376 * VRID_MCAST is a well known constant, other VRIDs will be determined
377 * programmatic...
378 *
379 * With the addition of SAF the VRID space has been divided into two
380 * segments 0x0000-0x7fff is for EIGRP and vNets, 0x8000-0xffff is
381 * for saf and its associated vNets.
382 */
383#define EIGRP_VRID_MASK 0x8001
384#define EIGRP_VRID_AF_BASE 0x0000
385#define EIGRP_VRID_MCAST_BASE 0x0001
386#define EIGRP_VRID_SF_BASE 0x8000
387
388/* Extended Attributes for a destination */
389#define EIGRP_ATTR_HDRLEN (2)
390#define EIGRP_ATTR_MAXDATA (512)
391
392#define EIGRP_ATTR_NOOP 0 /*!< No-Op used as offset padding */
393#define EIGRP_ATTR_SCALED 1 /*!< Scaled metric values */
394#define EIGRP_ATTR_TAG 2 /*!< Tag assigned by Admin for dest */
395#define EIGRP_ATTR_COMM 3 /*!< Community attribute for dest */
396#define EIGRP_ATTR_JITTER 4 /*!< Variation in path delay */
397#define EIGRP_ATTR_QENERGY 5 /*!< Non-Active energy usage along path */
398#define EIGRP_ATTR_ENERGY 6 /*!< Active energy usage along path */
399
400/*
401 * Begin EIGRP-BGP interoperability communities
402 */
403#define EIGRP_EXTCOMM_SOO_ASFMT 0x0003 /* Site-of-Origin, BGP AS format */
404#define EIGRP_EXTCOMM_SOO_ADRFMT 0x0103 /* Site-of-Origin, BGP/EIGRP addr format */
405
406/*
407 * EIGRP Specific communities
408 */
409#define EIGRP_EXTCOMM_EIGRP 0x8800 /* EIGRP route information appended*/
410#define EIGRP_EXTCOMM_DAD 0x8801 /* EIGRP AS + Delay */
411#define EIGRP_EXTCOMM_VRHB 0x8802 /* EIGRP Vector: Reliability + Hop + BW */
412#define EIGRP_EXTCOMM_SRLM 0x8803 /* EIGRP System: Reserve +Load + MTU */
413#define EIGRP_EXTCOMM_SAR 0x8804 /* EIGRP System: Remote AS + Remote ID */
414#define EIGRP_EXTCOMM_RPM 0x8805 /* EIGRP Remote: Protocol + Metric */
415#define EIGRP_EXTCOMM_VRR 0x8806 /* EIGRP Vecmet: Rsvd + (internal) Routerid */
416
417
418/*
419 * EIGRP Filter constants
420 */
421#define EIGRP_FILTER_IN 0
422#define EIGRP_FILTER_OUT 1
423#define EIGRP_FILTER_MAX 2
424
425/*
426 * EIGRP Filter constants
427 */
428#define EIGRP_HSROLE_DEFAULT EIGRP_HSROLE_SPOKE
429#define EIGRP_HSROLE_HUB 0x01
430#define EIGRP_HSROLE_SPOKE 0x02
431
432#endif /* _ZEBRA_EIGRP_CONST_H_ */