~ubuntu-branches/ubuntu/warty/quagga/warty

« back to all changes in this revision

Viewing changes to isisd/isis_pdu.h

  • Committer: Bazaar Package Importer
  • Author(s): Fabio M. Di Nitto
  • Date: 2004-06-29 09:50:59 UTC
  • Revision ID: james.westby@ubuntu.com-20040629095059-px1m2m108z4qw1mr
Tags: upstream-0.96.5
ImportĀ upstreamĀ versionĀ 0.96.5

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * IS-IS Rout(e)ing protocol - isis_pdu.h
 
3
 *                             PDU processing
 
4
 *
 
5
 * Copyright (C) 2001,2002   Sampo Saaristo
 
6
 *                           Tampere University of Technology      
 
7
 *                           Institute of Communications Engineering
 
8
 *
 
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) 
 
12
 * any later version.
 
13
 *
 
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 
 
17
 * more details.
 
18
 
 
19
 * You should have received a copy of the GNU General Public License along 
 
20
 * with this program; if not, write to the Free Software Foundation, Inc., 
 
21
 * 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
22
 */
 
23
 
 
24
#ifndef _ZEBRA_ISIS_PDU_H
 
25
#define _ZEBRA_ISIS_PDU_H
 
26
 
 
27
/*
 
28
 *                    ISO 9542 - 7.5,7.6
 
29
 *
 
30
 *                       ES to IS Fixed Header
 
31
 *  +-------+-------+-------+-------+-------+-------+-------+-------+
 
32
 *  |         Intradomain Routeing Protocol Discriminator           |
 
33
 *  +-------+-------+-------+-------+-------+-------+-------+-------+
 
34
 *  |                       Length Indicator                        |
 
35
 *  +-------+-------+-------+-------+-------+-------+-------+-------+
 
36
 *  |                  Version/Protocol ID extension                |
 
37
 *  +-------+-------+-------+-------+-------+-------+-------+-------+
 
38
 *  |                         Reserved = 0                          |
 
39
 *  +-------+-------+-------+-------+-------+-------+-------+-------+
 
40
 *  |   0   |   0   |   0   |              PDU Type                 |
 
41
 *  +-------+-------+-------+-------+-------+-------+-------+-------+
 
42
 *  |                         Holding Time                          | 2
 
43
 *  +-------+-------+-------+-------+-------+-------+-------+-------+
 
44
 *  |                          Checksum                             | 2
 
45
 *  +-------+-------+-------+-------+-------+-------+-------+-------+
 
46
 */
 
47
 
 
48
struct esis_fixed_hdr
 
49
{
 
50
  u_char idrp;
 
51
  u_char length;
 
52
  u_char version;
 
53
  u_char id_len;
 
54
  u_char pdu_type;
 
55
  u_int16_t holdtime;
 
56
  u_int16_t checksum;
 
57
}  __attribute__((packed));
 
58
 
 
59
#define ESIS_FIXED_HDR_LEN   9
 
60
 
 
61
#define ESH_PDU              2
 
62
#define ISH_PDU              4
 
63
#define RD_PDU               5
 
64
 
 
65
/*
 
66
 *                       IS to IS Fixed Header
 
67
 *  +-------+-------+-------+-------+-------+-------+-------+-------+
 
68
 *  |         Intradomain Routeing Protocol Discriminator           | 
 
69
 *  +-------+-------+-------+-------+-------+-------+-------+-------+
 
70
 *  |                       Length Indicator                        |
 
71
 *  +-------+-------+-------+-------+-------+-------+-------+-------+
 
72
 *  |                  Version/Protocol ID extension                |
 
73
 *  +-------+-------+-------+-------+-------+-------+-------+-------+
 
74
 *  |   R   |   R   |   R   |              PDU Type                 |      
 
75
 *  +-------+-------+-------+-------+-------+-------+-------+-------+
 
76
 *  |                            Version                            |
 
77
 *  +-------+-------+-------+-------+-------+-------+-------+-------+
 
78
 *  |                            Reserved                           |
 
79
 *  +-------+-------+-------+-------+-------+-------+-------+-------+
 
80
 *  |                       Maximum Area Addresses                  |      
 
81
 *  +-------+-------+-------+-------+-------+-------+-------+-------+
 
82
 */
 
83
 
 
84
struct isis_fixed_hdr 
 
85
{
 
86
  u_char idrp;
 
87
  u_char length;
 
88
  u_char version1;
 
89
  u_char id_len;
 
90
  u_char pdu_type;
 
91
  u_char version2;
 
92
  u_char reserved;
 
93
  u_char max_area_addrs;
 
94
};
 
95
 
 
96
#define ISIS_FIXED_HDR_LEN 8
 
97
 
 
98
/*
 
99
 * IS-IS PDU types.
 
100
 */
 
101
 
 
102
#define L1_LAN_HELLO         15
 
103
#define L2_LAN_HELLO         16
 
104
/*
 
105
 *              L1 and L2 LAN IS to IS Hello PDU header
 
106
 * +-------+-------+-------+-------+-------+-------+-------+-------+
 
107
 * |                       Reserved                | Circuit Type  | 1
 
108
 * +-------+-------+-------+-------+-------+-------+-------+-------+
 
109
 * +                        Source ID                              + id_len   
 
110
 * +-------+-------+-------+-------+-------+-------+-------+-------+
 
111
 * |                        Holding  Time                          | 2     
 
112
 * +-------+-------+-------+-------+-------+-------+-------+-------+
 
113
 * |                        PDU Lenght                             | 2    
 
114
 * +-------+-------+-------+-------+-------+-------+-------+-------+
 
115
 * |   R   |                Priority                               | 1
 
116
 * +-------+-------+-------+-------+-------+-------+-------+-------+
 
117
 * |                        LAN ID                                 | id_len + 1
 
118
 * +-------+-------+-------+-------+-------+-------+-------+-------+
 
119
 */
 
120
struct isis_lan_hello_hdr {
 
121
  u_char circuit_t;  
 
122
  u_char source_id[ISIS_SYS_ID_LEN];   
 
123
  u_int16_t hold_time;     
 
124
  u_int16_t pdu_len;      
 
125
  u_char prio;         
 
126
  u_char lan_id[ISIS_SYS_ID_LEN + 1];      
 
127
}  __attribute__((packed));
 
128
#define ISIS_LANHELLO_HDRLEN  19
 
129
 
 
130
#define P2P_HELLO            17
 
131
/*
 
132
 *           Point-to-point IS to IS hello PDU header
 
133
 * +-------+-------+-------+-------+-------+-------+-------+-------+
 
134
 * |                        Reserved               | Circuit Type  | 1
 
135
 * +-------+-------+-------+-------+-------+-------+-------+-------+
 
136
 * +                        Source ID                              + id_len   
 
137
 * +-------+-------+-------+-------+-------+-------+-------+-------+
 
138
 * +                        Holding  Time                          + 2     
 
139
 * +-------+-------+-------+-------+-------+-------+-------+-------+
 
140
 * +                        PDU Lenght                             + 2    
 
141
 * +-------+-------+-------+-------+-------+-------+-------+-------+
 
142
 * |                        Local Circuit ID                       | 1
 
143
 * +-------+-------+-------+-------+-------+-------+-------+-------+
 
144
 */
 
145
struct isis_p2p_hello_hdr {
 
146
  u_char circuit_t;  
 
147
  u_char source_id[ISIS_SYS_ID_LEN];   
 
148
  u_int16_t hold_time;     
 
149
  u_int16_t pdu_len;      
 
150
  u_char local_id;
 
151
} __attribute__((packed));
 
152
#define ISIS_P2PHELLO_HDRLEN 12
 
153
 
 
154
#define L1_LINK_STATE        18
 
155
#define L2_LINK_STATE        20
 
156
/*
 
157
 *              L1 and L2 IS to IS link state PDU header
 
158
 * +-------+-------+-------+-------+-------+-------+-------+-------+
 
159
 * +                        PDU Length                             + 2
 
160
 * +-------+-------+-------+-------+-------+-------+-------+-------+
 
161
 * +                        Remaining Lifetime                     + 2 
 
162
 * +-------+-------+-------+-------+-------+-------+-------+-------+
 
163
 * |                        LSP ID                                 | id_len + 2
 
164
 * +-------+-------+-------+-------+-------+-------+-------+-------+
 
165
 * +                        Sequence Number                        + 4
 
166
 * +-------+-------+-------+-------+-------+-------+-------+-------+
 
167
 * +                        Checksum                               + 2
 
168
 * +-------+-------+-------+-------+-------+-------+-------+-------+
 
169
 * |   P   |              ATT              |LSPDBOL|    ISTYPE     |
 
170
 * +-------+-------+-------+-------+-------+-------+-------+-------+
 
171
 */
 
172
struct isis_link_state_hdr {
 
173
  u_int16_t pdu_len;      
 
174
  u_int16_t rem_lifetime;
 
175
  u_char  lsp_id[ISIS_SYS_ID_LEN + 2];
 
176
  u_int32_t seq_num;
 
177
  u_int16_t checksum;
 
178
  u_int8_t  lsp_bits;
 
179
} __attribute__((packed)); 
 
180
#define ISIS_LSP_HDR_LEN 19
 
181
 
 
182
#define L1_COMPLETE_SEQ_NUM  24
 
183
#define L2_COMPLETE_SEQ_NUM  25
 
184
/*
 
185
 *      L1 and L2 IS to IS complete sequence numbers PDU header
 
186
 * +-------+-------+-------+-------+-------+-------+-------+-------+
 
187
 * +                        PDU Lenght                             + 2    
 
188
 * +-------+-------+-------+-------+-------+-------+-------+-------+
 
189
 * +                        Source ID                              + id_len + 1
 
190
 * +-------+-------+-------+-------+-------+-------+-------+-------+
 
191
 * +                        Start LSP ID                           + id_len + 2
 
192
 * +-------+-------+-------+-------+-------+-------+-------+-------+
 
193
 * +                        End LSP ID                             + id_len + 2
 
194
 * +-------+-------+-------+-------+-------+-------+-------+-------+
 
195
 */
 
196
struct isis_complete_seqnum_hdr {
 
197
  u_int16_t pdu_len;
 
198
  u_char    source_id[ISIS_SYS_ID_LEN + 1];
 
199
  u_char    start_lsp_id[ISIS_SYS_ID_LEN + 2];
 
200
  u_char    stop_lsp_id[ISIS_SYS_ID_LEN + 2];
 
201
};
 
202
#define ISIS_CSNP_HDRLEN 25
 
203
 
 
204
#define L1_PARTIAL_SEQ_NUM   26
 
205
#define L2_PARTIAL_SEQ_NUM   27
 
206
/*
 
207
 *      L1 and L2 IS to IS partial sequence numbers PDU header
 
208
 * +-------+-------+-------+-------+-------+-------+-------+-------+
 
209
 * +                        PDU Length                             + 2
 
210
 * +-------+-------+-------+-------+-------+-------+-------+-------+
 
211
 * +                        Source ID                              + id_len + 1
 
212
 * +---------------------------------------------------------------+
 
213
 */
 
214
struct isis_partial_seqnum_hdr {
 
215
  u_int16_t pdu_len;
 
216
  u_char    source_id[ISIS_SYS_ID_LEN + 1];
 
217
};
 
218
#define ISIS_PSNP_HDRLEN 9
 
219
 
 
220
/*
 
221
 * Function for receiving IS-IS PDUs
 
222
 */
 
223
int isis_receive (struct thread *thread);
 
224
 
 
225
/*
 
226
 * calling arguments for snp_process ()
 
227
 */
 
228
#define ISIS_SNP_PSNP_FLAG 0
 
229
#define ISIS_SNP_CSNP_FLAG 1
 
230
 
 
231
/*
 
232
 * Sending functions
 
233
 */
 
234
int  send_lan_l1_hello (struct thread *thread);
 
235
int  send_lan_l2_hello (struct thread *thread);
 
236
int  send_p2p_hello    (struct thread *thread);
 
237
int  send_csnp         (struct isis_circuit *circuit, int level);
 
238
int  send_l1_csnp      (struct thread *thread);
 
239
int  send_l2_csnp      (struct thread *thread);
 
240
int  send_l1_psnp      (struct thread *thread);
 
241
int  send_l2_psnp      (struct thread *thread);
 
242
int  send_lsp          (struct thread *thread);
 
243
int  ack_lsp           (struct isis_link_state_hdr *hdr, 
 
244
                        struct isis_circuit *circuit, int level);
 
245
void fill_fixed_hdr    (struct isis_fixed_hdr *hdr, u_char pdu_type);
 
246
int  send_hello        (struct isis_circuit *circuit, int level);
 
247
 
 
248
 
 
249
int authentication_check (struct isis_passwd *one, 
 
250
                          struct isis_passwd *theother);
 
251
 
 
252
#endif /* _ZEBRA_ISIS_PDU_H */
 
253
 
 
254
 
 
255
 
 
256
 
 
257