summaryrefslogtreecommitdiffstats
path: root/isisd/isis_constants.h
blob: 1046b0014c4fee743c543412f4aee8a75143b9bf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
/*
 * IS-IS Rout(e)ing protocol - isis_constants.h
 *
 * Copyright (C) 2001,2002   Sampo Saaristo
 *                           Tampere University of Technology
 *                           Institute of Communications Engineering
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public Licenseas published by the Free
 * Software Foundation; either version 2 of the License, or (at your option)
 * any later version.
 *
 * This program is distributed in the hope that it will be useful,but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
 * more details.
 *
 * You should have received a copy of the GNU General Public License along
 * with this program; see the file COPYING; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
 */

#ifndef ISIS_CONSTANTS_H
#define ISIS_CONSTANTS_H

/*
 * Architectural constant values from p. 35 of ISO/IEC 10589
 */

#define MAX_NARROW_LINK_METRIC        63
#define MAX_NARROW_PATH_METRIC        1023
#define MAX_WIDE_LINK_METRIC          0x00FFFFFF  /* RFC4444 */
#define MAX_WIDE_PATH_METRIC          0xFE000000  /* RFC3787 */
#define ISO_SAP                       0xFE
#define INTRADOMAIN_ROUTEING_SELECTOR 0
#define SEQUENCE_MODULUS              4294967296

#define ISO9542_ESIS			0x82
#define ISO10589_ISIS			0x83

/*
 * implementation specific jitter values
 */

#define IIH_JITTER                    10	/* % */
#define MAX_AGE_JITTER                 5	/* % */
#define MAX_LSP_GEN_JITTER             5	/* % */
#define CSNP_JITTER                   10	/* % */
#define PSNP_JITTER                   10	/* % */

#define RANDOM_SPREAD           100000.0

#define ISIS_LEVELS                   2
#define ISIS_LEVEL1                   1
#define ISIS_LEVEL2                   2

/*
 * Default values
 * ISO - 10589 Section 7.3.21 - Parameters
 * RFC 4444
 */
#define MAX_AGE                       1200
#define ZERO_AGE_LIFETIME             60
#define MIN_LSP_LIFETIME              350
#define MAX_LSP_LIFETIME              65535
#define DEFAULT_LSP_LIFETIME          1200

#define MIN_MAX_LSP_GEN_INTERVAL      1
#define MAX_MAX_LSP_GEN_INTERVAL      65235
#define DEFAULT_MAX_LSP_GEN_INTERVAL  900

#define MIN_MIN_LSP_GEN_INTERVAL      1
#define MAX_MIN_LSP_GEN_INTERVAL      120  /* RFC 4444 says 65535 */
#define DEFAULT_MIN_LSP_GEN_INTERVAL  30

#define MIN_LSP_RETRANS_INTERVAL      5 /* Seconds */

#define MIN_CSNP_INTERVAL             1
#define MAX_CSNP_INTERVAL             600
#define DEFAULT_CSNP_INTERVAL         10

#define MIN_PSNP_INTERVAL             1
#define MAX_PSNP_INTERVAL             120
#define DEFAULT_PSNP_INTERVAL         2

#define MIN_HELLO_INTERVAL            1
#define MAX_HELLO_INTERVAL            600
#define DEFAULT_HELLO_INTERVAL        3

#define MIN_HELLO_MULTIPLIER          2
#define MAX_HELLO_MULTIPLIER          100
#define DEFAULT_HELLO_MULTIPLIER      10

#define MIN_PRIORITY                  0
#define MAX_PRIORITY                  127
#define DEFAULT_PRIORITY              64

/* min and max metric varies by new vs old metric types */
#define DEFAULT_CIRCUIT_METRIC        10

#define METRICS_UNSUPPORTED           0x80

#define MINIMUM_SPF_INTERVAL          1

#define ISIS_MAX_PATH_SPLITS          64

/*
 * NLPID values
 */
#define NLPID_IP   204
#define NLPID_IPV6 142
#define NLPID_SNAP 128
#define NLPID_CLNP 129
#define NLPID_ESIS 130

/*
 * Return values for functions
 */
#define ISIS_OK       0
#define ISIS_WARNING  1
#define ISIS_ERROR    2
#define ISIS_CRITICAL 3

/*
 * IS-IS Circuit Types
 */

#define IS_LEVEL_1       1
#define IS_LEVEL_2       2
#define IS_LEVEL_1_AND_2 3

#define SNPA_ADDRSTRLEN 18
#define ISIS_SYS_ID_LEN  6
#define ISIS_NSEL_LEN    1
#define SYSID_STRLEN    24

/*
 * LSP bit masks
 */
#define LSPBIT_P   0x80
#define LSPBIT_ATT 0x78
#define LSPBIT_OL  0x04
#define LSPBIT_IST 0x03

/*
 * LSP bit masking macros
 * taken from tcpdumps
 * print-isoclns.c
 */

#define ISIS_MASK_LSP_OL_BIT(x)            ((x)&0x4)
#define ISIS_MASK_LSP_IS_L1_BIT(x)         ((x)&0x1)
#define ISIS_MASK_LSP_IS_L2_BIT(x)         ((x)&0x2)
#define ISIS_MASK_LSP_PARTITION_BIT(x)     ((x)&0x80)
#define ISIS_MASK_LSP_ATT_BITS(x)          ((x)&0x78)
#define ISIS_MASK_LSP_ATT_ERROR_BIT(x)     ((x)&0x40)
#define ISIS_MASK_LSP_ATT_EXPENSE_BIT(x)   ((x)&0x20)
#define ISIS_MASK_LSP_ATT_DELAY_BIT(x)     ((x)&0x10)
#define ISIS_MASK_LSP_ATT_DEFAULT_BIT(x)   ((x)&0x8)

#define LLC_LEN 3

/* we need to be aware of the fact we are using ISO sized
 * packets, using isomtu = mtu - LLC_LEN
 */
#define ISO_MTU(C)                                                             \
	((if_is_broadcast((C)->interface)) ? (C->interface->mtu - LLC_LEN)     \
					   : (C->interface->mtu))

#define MAX_LLC_LEN 0x5ff
#define ETHERTYPE_EXT_LLC 0x8870

static inline uint16_t isis_ethertype(size_t len)
{
	if (len > MAX_LLC_LEN)
		return ETHERTYPE_EXT_LLC;
	return len;
}

#endif /* ISIS_CONSTANTS_H */