Annotation of embedaddon/quagga/isisd/isis_lsp.h, revision 1.1.1.1

1.1       misho       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 */
                     29: #define ISIS_MAX_CIRCUITS 32 /* = 1024 - FIXME:defined in flags.h as well */
                     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: {
                     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:   {
                     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];
                     48:   int level;                   /* L1 or L2? */
                     49:   int purged;                  /* have purged this one */
                     50:   int scheduled;               /* scheduled for sending */
                     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 */
                     60:   int age_out;
                     61:   struct isis_adjacency *adj;
                     62:   /* FIXME: For now only topology LSP's use this. Is it helpful for others? */
                     63:   struct isis_area *area;
                     64:   struct tlvs tlv_data;                /* Simplifies TLV access */
                     65: };
                     66: 
                     67: dict_t *lsp_db_init (void);
                     68: void lsp_db_destroy (dict_t * lspdb);
                     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);
                     79: int lsp_l1_refresh_pseudo (struct thread *thread);
                     80: int lsp_l2_refresh_pseudo (struct thread *thread);
                     81: int isis_lsp_authinfo_check (struct stream *stream, struct isis_area *area,
                     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);
                     92: 
                     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);
                     99: 
                    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);
                    104: 
                    105: #define LSP_EQUAL 1
                    106: #define LSP_NEWER 2
                    107: #define LSP_OLDER 3
                    108: 
                    109: #define LSP_PSEUDO_ID(I) ((I)[ISIS_SYS_ID_LEN])
                    110: #define LSP_FRAGMENT(I) ((I)[ISIS_SYS_ID_LEN + 1])
                    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
                    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);
                    118: void lsp_update (struct isis_lsp *lsp, struct isis_link_state_hdr *lsp_hdr,
                    119:                 struct stream *stream, struct isis_area *area, int level);
                    120: void lsp_inc_seqnum (struct isis_lsp *lsp, u_int32_t seq_num);
                    121: int lsp_print_all (struct vty *vty, dict_t * lspdb, char detail,
                    122:                   char dynhost);
                    123: const char *lsp_bits2string (u_char *);
                    124: 
                    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,
                    129:                              struct isis_area *area, int lsp_top_num);
                    130: #endif /* TOPOLOGY_GENERATE */
                    131: 
                    132: #endif /* ISIS_LSP */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>