]>
Commit | Line | Data |
---|---|---|
eb5d44eb | 1 | /* |
2 | * IS-IS Rout(e)ing protocol - isis_lsp.h | |
3 | * LSP 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_LSP_H | |
25 | #define _ZEBRA_ISIS_LSP_H | |
26 | ||
27 | /* The grand plan is to support 1024 circuits so we have 32*32 bit flags | |
28 | * the support will be achived using the newest drafts */ | |
f390d2c7 | 29 | #define ISIS_MAX_CIRCUITS 32 /* = 1024 - FIXME:defined in flags.h as well */ |
eb5d44eb | 30 | |
31 | /* Structure for isis_lsp, this structure will only support the fixed | |
32 | * System ID (Currently 6) (atleast for now). In order to support more | |
33 | * We will have to split the header into two parts, and for readability | |
34 | * sake it should better be avoided */ | |
35 | struct isis_lsp | |
36 | { | |
f390d2c7 | 37 | struct isis_fixed_hdr *isis_header; /* normally equals pdu */ |
38 | struct isis_link_state_hdr *lsp_header; /* pdu + isis_header_len */ | |
39 | struct stream *pdu; /* full pdu lsp */ | |
40 | union | |
41 | { | |
eb5d44eb | 42 | struct list *frags; |
43 | struct isis_lsp *zero_lsp; | |
44 | } lspu; | |
45 | u_int32_t SRMflags[ISIS_MAX_CIRCUITS]; | |
46 | u_int32_t SSNflags[ISIS_MAX_CIRCUITS]; | |
47 | u_int32_t rexmit_queue[ISIS_MAX_CIRCUITS]; | |
f390d2c7 | 48 | int level; /* L1 or L2? */ |
49 | int purged; /* have purged this one */ | |
50 | int scheduled; /* scheduled for sending */ | |
eb5d44eb | 51 | time_t installed; |
52 | time_t last_generated; | |
53 | time_t last_sent; | |
54 | int own_lsp; | |
55 | #ifdef TOPOLOGY_GENERATE | |
56 | int from_topology; | |
57 | struct thread *t_lsp_top_ref; | |
58 | #endif | |
59 | /* used for 60 second counting when rem_lifetime is zero */ | |
f390d2c7 | 60 | int age_out; |
eb5d44eb | 61 | struct isis_adjacency *adj; |
f1082d19 | 62 | /* FIXME: For now only topology LSP's use this. Is it helpful for others? */ |
63 | struct isis_area *area; | |
f390d2c7 | 64 | struct tlvs tlv_data; /* Simplifies TLV access */ |
eb5d44eb | 65 | }; |
66 | ||
67 | dict_t *lsp_db_init (void); | |
f390d2c7 | 68 | void lsp_db_destroy (dict_t * lspdb); |
eb5d44eb | 69 | int lsp_tick (struct thread *thread); |
70 | ||
71 | int lsp_l1_generate (struct isis_area *area); | |
72 | int lsp_l2_generate (struct isis_area *area); | |
73 | int lsp_refresh_l1 (struct thread *thread); | |
74 | int lsp_refresh_l2 (struct thread *thread); | |
75 | int lsp_regenerate_schedule (struct isis_area *area); | |
76 | ||
77 | int lsp_l1_pseudo_generate (struct isis_circuit *circuit); | |
78 | int lsp_l2_pseudo_generate (struct isis_circuit *circuit); | |
f390d2c7 | 79 | int lsp_l1_refresh_pseudo (struct thread *thread); |
80 | int lsp_l2_refresh_pseudo (struct thread *thread); | |
eb5d44eb | 81 | int isis_lsp_authinfo_check (struct stream *stream, struct isis_area *area, |
f390d2c7 | 82 | int pdulen, struct isis_passwd *passwd); |
83 | struct isis_lsp *lsp_new (u_char * lsp_id, u_int16_t rem_lifetime, | |
84 | u_int32_t seq_num, u_int8_t lsp_bits, | |
85 | u_int16_t checksum, int level); | |
86 | struct isis_lsp *lsp_new_from_stream_ptr (struct stream *stream, | |
87 | u_int16_t pdu_len, | |
88 | struct isis_lsp *lsp0, | |
89 | struct isis_area *area); | |
90 | void lsp_insert (struct isis_lsp *lsp, dict_t * lspdb); | |
91 | struct isis_lsp *lsp_search (u_char * id, dict_t * lspdb); | |
eb5d44eb | 92 | |
f390d2c7 | 93 | void lsp_build_list (u_char * start_id, u_char * stop_id, |
94 | struct list *list, dict_t * lspdb); | |
95 | void lsp_build_list_nonzero_ht (u_char * start_id, u_char * stop_id, | |
96 | struct list *list, dict_t * lspdb); | |
97 | void lsp_build_list_ssn (struct isis_circuit *circuit, struct list *list, | |
98 | dict_t * lspdb); | |
eb5d44eb | 99 | |
f390d2c7 | 100 | void lsp_search_and_destroy (u_char * id, dict_t * lspdb); |
101 | void lsp_purge_dr (u_char * id, struct isis_circuit *circuit, int level); | |
102 | void lsp_purge_non_exist (struct isis_link_state_hdr *lsp_hdr, | |
103 | struct isis_area *area); | |
eb5d44eb | 104 | |
105 | #define LSP_EQUAL 1 | |
106 | #define LSP_NEWER 2 | |
107 | #define LSP_OLDER 3 | |
108 | ||
c83dcd3f | 109 | #define LSP_PSEUDO_ID(I) ((I)[ISIS_SYS_ID_LEN]) |
110 | #define LSP_FRAGMENT(I) ((I)[ISIS_SYS_ID_LEN + 1]) | |
eb5d44eb | 111 | #define OWNLSPID(I) \ |
112 | memcpy ((I), isis->sysid, ISIS_SYS_ID_LEN);\ | |
113 | (I)[ISIS_SYS_ID_LEN] = 0;\ | |
114 | (I)[ISIS_SYS_ID_LEN + 1] = 0 | |
f390d2c7 | 115 | int lsp_id_cmp (u_char * id1, u_char * id2); |
116 | int lsp_compare (char *areatag, struct isis_lsp *lsp, u_int32_t seq_num, | |
117 | u_int16_t checksum, u_int16_t rem_lifetime); | |
eb5d44eb | 118 | void lsp_update (struct isis_lsp *lsp, struct isis_link_state_hdr *lsp_hdr, |
a96d8d10 | 119 | struct stream *stream, struct isis_area *area, int level); |
eb5d44eb | 120 | void lsp_inc_seqnum (struct isis_lsp *lsp, u_int32_t seq_num); |
f390d2c7 | 121 | int lsp_print_all (struct vty *vty, dict_t * lspdb, char detail, |
122 | char dynhost); | |
1cd80845 | 123 | const char *lsp_bits2string (u_char *); |
eb5d44eb | 124 | |
eb5d44eb | 125 | #ifdef TOPOLOGY_GENERATE |
126 | void generate_topology_lsps (struct isis_area *area); | |
127 | void remove_topology_lsps (struct isis_area *area); | |
128 | void build_topology_lsp_data (struct isis_lsp *lsp, | |
f390d2c7 | 129 | struct isis_area *area, int lsp_top_num); |
eb5d44eb | 130 | #endif /* TOPOLOGY_GENERATE */ |
131 | ||
132 | #endif /* ISIS_LSP */ |