]>
git.proxmox.com Git - mirror_frr.git/blob - isisd/isis_pdu.h
2 * IS-IS Rout(e)ing protocol - isis_pdu.h
5 * Copyright (C) 2001,2002 Sampo Saaristo
6 * Tampere University of Technology
7 * Institute of Communications Engineering
9 * This program is free software; you can redistribute it and/or modify it
10 * under the terms of the GNU General Public Licenseas published by the Free
11 * Software Foundation; either version 2 of the License, or (at your option)
14 * This program is distributed in the hope that it will be useful,but WITHOUT
15 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
16 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
19 * You should have received a copy of the GNU General Public License along
20 * with this program; see the file COPYING; if not, write to the Free Software
21 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
24 #ifndef _ZEBRA_ISIS_PDU_H
25 #define _ZEBRA_ISIS_PDU_H
34 * ES to IS Fixed Header
35 * +-------+-------+-------+-------+-------+-------+-------+-------+
36 * | Intradomain Routeing Protocol Discriminator |
37 * +-------+-------+-------+-------+-------+-------+-------+-------+
38 * | Length Indicator |
39 * +-------+-------+-------+-------+-------+-------+-------+-------+
40 * | Version/Protocol ID extension |
41 * +-------+-------+-------+-------+-------+-------+-------+-------+
43 * +-------+-------+-------+-------+-------+-------+-------+-------+
44 * | 0 | 0 | 0 | PDU Type |
45 * +-------+-------+-------+-------+-------+-------+-------+-------+
47 * +-------+-------+-------+-------+-------+-------+-------+-------+
49 * +-------+-------+-------+-------+-------+-------+-------+-------+
52 struct esis_fixed_hdr
{
60 } __attribute__((packed
));
62 #define ESIS_FIXED_HDR_LEN 9
69 * IS to IS Fixed Header
70 * +-------+-------+-------+-------+-------+-------+-------+-------+
71 * | Intradomain Routeing Protocol Discriminator |
72 * +-------+-------+-------+-------+-------+-------+-------+-------+
73 * | Length Indicator |
74 * +-------+-------+-------+-------+-------+-------+-------+-------+
75 * | Version/Protocol ID extension |
76 * +-------+-------+-------+-------+-------+-------+-------+-------+
77 * | R | R | R | PDU Type |
78 * +-------+-------+-------+-------+-------+-------+-------+-------+
80 * +-------+-------+-------+-------+-------+-------+-------+-------+
82 * +-------+-------+-------+-------+-------+-------+-------+-------+
83 * | Maximum Area Addresses |
84 * +-------+-------+-------+-------+-------+-------+-------+-------+
87 struct isis_fixed_hdr
{
95 u_char max_area_addrs
;
96 } __attribute__((packed
));
98 #define ISIS_FIXED_HDR_LEN 8
104 #define L1_LAN_HELLO 15
105 #define L2_LAN_HELLO 16
107 * L1 and L2 LAN IS to IS Hello PDU header
108 * +-------+-------+-------+-------+-------+-------+-------+-------+
109 * | Reserved | Circuit Type | 1
110 * +-------+-------+-------+-------+-------+-------+-------+-------+
111 * + Source ID + id_len
112 * +-------+-------+-------+-------+-------+-------+-------+-------+
114 * +-------+-------+-------+-------+-------+-------+-------+-------+
116 * +-------+-------+-------+-------+-------+-------+-------+-------+
118 * +-------+-------+-------+-------+-------+-------+-------+-------+
119 * | LAN ID | id_len + 1
120 * +-------+-------+-------+-------+-------+-------+-------+-------+
122 struct isis_lan_hello_hdr
{
124 u_char source_id
[ISIS_SYS_ID_LEN
];
128 u_char lan_id
[ISIS_SYS_ID_LEN
+ 1];
129 } __attribute__((packed
));
130 #define ISIS_LANHELLO_HDRLEN 19
134 * Point-to-point IS to IS hello PDU header
135 * +-------+-------+-------+-------+-------+-------+-------+-------+
136 * | Reserved | Circuit Type | 1
137 * +-------+-------+-------+-------+-------+-------+-------+-------+
138 * + Source ID + id_len
139 * +-------+-------+-------+-------+-------+-------+-------+-------+
141 * +-------+-------+-------+-------+-------+-------+-------+-------+
143 * +-------+-------+-------+-------+-------+-------+-------+-------+
144 * | Local Circuit ID | 1
145 * +-------+-------+-------+-------+-------+-------+-------+-------+
147 struct isis_p2p_hello_hdr
{
149 u_char source_id
[ISIS_SYS_ID_LEN
];
153 } __attribute__((packed
));
154 #define ISIS_P2PHELLO_HDRLEN 12
156 #define L1_LINK_STATE 18
157 #define L2_LINK_STATE 20
159 * L1 and L2 IS to IS link state PDU header
160 * +-------+-------+-------+-------+-------+-------+-------+-------+
162 * +-------+-------+-------+-------+-------+-------+-------+-------+
163 * + Remaining Lifetime + 2
164 * +-------+-------+-------+-------+-------+-------+-------+-------+
165 * | LSP ID | id_len + 2
166 * +-------+-------+-------+-------+-------+-------+-------+-------+
167 * + Sequence Number + 4
168 * +-------+-------+-------+-------+-------+-------+-------+-------+
170 * +-------+-------+-------+-------+-------+-------+-------+-------+
171 * | P | ATT |LSPDBOL| ISTYPE |
172 * +-------+-------+-------+-------+-------+-------+-------+-------+
174 struct isis_link_state_hdr
{
176 u_int16_t rem_lifetime
;
177 u_char lsp_id
[ISIS_SYS_ID_LEN
+ 2];
181 } __attribute__((packed
));
182 #define ISIS_LSP_HDR_LEN 19
185 * Since the length field of LSP Entries TLV is one byte long, and each LSP
186 * entry is LSP_ENTRIES_LEN (16) bytes long, the maximum number of LSP entries
187 * can be accomodated in a TLV is
190 * Therefore, the maximum length of the LSP Entries TLV is
191 * 16 * 15 + 2 (header) = 242 bytes.
193 #define MAX_LSP_ENTRIES_TLV_SIZE 242
195 #define L1_COMPLETE_SEQ_NUM 24
196 #define L2_COMPLETE_SEQ_NUM 25
198 * L1 and L2 IS to IS complete sequence numbers PDU header
199 * +-------+-------+-------+-------+-------+-------+-------+-------+
201 * +-------+-------+-------+-------+-------+-------+-------+-------+
202 * + Source ID + id_len + 1
203 * +-------+-------+-------+-------+-------+-------+-------+-------+
204 * + Start LSP ID + id_len + 2
205 * +-------+-------+-------+-------+-------+-------+-------+-------+
206 * + End LSP ID + id_len + 2
207 * +-------+-------+-------+-------+-------+-------+-------+-------+
209 struct isis_complete_seqnum_hdr
{
211 u_char source_id
[ISIS_SYS_ID_LEN
+ 1];
212 u_char start_lsp_id
[ISIS_SYS_ID_LEN
+ 2];
213 u_char stop_lsp_id
[ISIS_SYS_ID_LEN
+ 2];
215 #define ISIS_CSNP_HDRLEN 25
217 #define L1_PARTIAL_SEQ_NUM 26
218 #define L2_PARTIAL_SEQ_NUM 27
220 * L1 and L2 IS to IS partial sequence numbers PDU header
221 * +-------+-------+-------+-------+-------+-------+-------+-------+
223 * +-------+-------+-------+-------+-------+-------+-------+-------+
224 * + Source ID + id_len + 1
225 * +---------------------------------------------------------------+
227 struct isis_partial_seqnum_hdr
{
229 u_char source_id
[ISIS_SYS_ID_LEN
+ 1];
231 #define ISIS_PSNP_HDRLEN 9
238 * Function for receiving IS-IS PDUs
240 int isis_receive(struct thread
*thread
);
243 * calling arguments for snp_process ()
245 #define ISIS_SNP_PSNP_FLAG 0
246 #define ISIS_SNP_CSNP_FLAG 1
248 #define ISIS_AUTH_MD5_SIZE 16U
253 int send_lan_l1_hello(struct thread
*thread
);
254 int send_lan_l2_hello(struct thread
*thread
);
255 int send_p2p_hello(struct thread
*thread
);
256 int send_csnp(struct isis_circuit
*circuit
, int level
);
257 int send_l1_csnp(struct thread
*thread
);
258 int send_l2_csnp(struct thread
*thread
);
259 int send_l1_psnp(struct thread
*thread
);
260 int send_l2_psnp(struct thread
*thread
);
261 int send_lsp(struct thread
*thread
);
262 int ack_lsp(struct isis_link_state_hdr
*hdr
, struct isis_circuit
*circuit
,
264 void fill_fixed_hdr(struct isis_fixed_hdr
*hdr
, u_char pdu_type
);
265 int send_hello(struct isis_circuit
*circuit
, int level
);
267 #endif /* _ZEBRA_ISIS_PDU_H */