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

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: /* Structure for isis_lsp, this structure will only support the fixed
                     28:  * System ID (Currently 6) (atleast for now). In order to support more
                     29:  * We will have to split the header into two parts, and for readability
                     30:  * sake it should better be avoided */
                     31: struct isis_lsp
                     32: {
                     33:   struct isis_fixed_hdr *isis_header;          /* normally equals pdu */
                     34:   struct isis_link_state_hdr *lsp_header;      /* pdu + isis_header_len */
                     35:   struct stream *pdu;                          /* full pdu lsp */
                     36:   union
                     37:   {
                     38:     struct list *frags;
                     39:     struct isis_lsp *zero_lsp;
                     40:   } lspu;
1.1.1.2 ! misho      41:   u_int32_t auth_tlv_offset;    /* authentication TLV position in the pdu */
1.1       misho      42:   u_int32_t SRMflags[ISIS_MAX_CIRCUITS];
                     43:   u_int32_t SSNflags[ISIS_MAX_CIRCUITS];
                     44:   int level;                   /* L1 or L2? */
                     45:   int scheduled;               /* scheduled for sending */
                     46:   time_t installed;
                     47:   time_t last_generated;
                     48:   int own_lsp;
                     49: #ifdef TOPOLOGY_GENERATE
                     50:   int from_topology;
                     51:   struct thread *t_lsp_top_ref;
                     52: #endif
                     53:   /* used for 60 second counting when rem_lifetime is zero */
                     54:   int age_out;
                     55:   struct isis_area *area;
                     56:   struct tlvs tlv_data;                /* Simplifies TLV access */
                     57: };
                     58: 
                     59: dict_t *lsp_db_init (void);
                     60: void lsp_db_destroy (dict_t * lspdb);
                     61: int lsp_tick (struct thread *thread);
                     62: 
1.1.1.2 ! misho      63: int lsp_generate (struct isis_area *area, int level);
        !            64: int lsp_regenerate_schedule (struct isis_area *area, int level,
        !            65:                              int all_pseudo);
        !            66: int lsp_generate_pseudo (struct isis_circuit *circuit, int level);
        !            67: int lsp_regenerate_schedule_pseudo (struct isis_circuit *circuit, int level);
        !            68: 
1.1       misho      69: struct isis_lsp *lsp_new (u_char * lsp_id, u_int16_t rem_lifetime,
                     70:                          u_int32_t seq_num, u_int8_t lsp_bits,
                     71:                          u_int16_t checksum, int level);
                     72: struct isis_lsp *lsp_new_from_stream_ptr (struct stream *stream,
                     73:                                          u_int16_t pdu_len,
                     74:                                          struct isis_lsp *lsp0,
1.1.1.2 ! misho      75:                                          struct isis_area *area,
        !            76:                                           int level);
1.1       misho      77: void lsp_insert (struct isis_lsp *lsp, dict_t * lspdb);
                     78: struct isis_lsp *lsp_search (u_char * id, dict_t * lspdb);
                     79: 
1.1.1.2 ! misho      80: void lsp_build_list (u_char * start_id, u_char * stop_id, u_char num_lsps,
1.1       misho      81:                     struct list *list, dict_t * lspdb);
                     82: void lsp_build_list_nonzero_ht (u_char * start_id, u_char * stop_id,
                     83:                                struct list *list, dict_t * lspdb);
1.1.1.2 ! misho      84: void lsp_build_list_ssn (struct isis_circuit *circuit, u_char num_lsps,
        !            85:                          struct list *list, dict_t * lspdb);
1.1       misho      86: 
                     87: void lsp_search_and_destroy (u_char * id, dict_t * lspdb);
1.1.1.2 ! misho      88: void lsp_purge_pseudo (u_char * id, struct isis_circuit *circuit, int level);
1.1       misho      89: void lsp_purge_non_exist (struct isis_link_state_hdr *lsp_hdr,
                     90:                          struct isis_area *area);
                     91: 
                     92: #define LSP_EQUAL 1
                     93: #define LSP_NEWER 2
                     94: #define LSP_OLDER 3
                     95: 
                     96: #define LSP_PSEUDO_ID(I) ((I)[ISIS_SYS_ID_LEN])
                     97: #define LSP_FRAGMENT(I) ((I)[ISIS_SYS_ID_LEN + 1])
                     98: #define OWNLSPID(I) \
                     99:         memcpy ((I), isis->sysid, ISIS_SYS_ID_LEN);\
                    100:         (I)[ISIS_SYS_ID_LEN] = 0;\
                    101:         (I)[ISIS_SYS_ID_LEN + 1] = 0
                    102: int lsp_id_cmp (u_char * id1, u_char * id2);
                    103: int lsp_compare (char *areatag, struct isis_lsp *lsp, u_int32_t seq_num,
                    104:                 u_int16_t checksum, u_int16_t rem_lifetime);
1.1.1.2 ! misho     105: void lsp_update (struct isis_lsp *lsp, struct stream *stream,
        !           106:                  struct isis_area *area, int level);
1.1       misho     107: void lsp_inc_seqnum (struct isis_lsp *lsp, u_int32_t seq_num);
1.1.1.2 ! misho     108: void lsp_print (struct isis_lsp *lsp, struct vty *vty, char dynhost);
        !           109: void lsp_print_detail (struct isis_lsp *lsp, struct vty *vty, char dynhost);
1.1       misho     110: int lsp_print_all (struct vty *vty, dict_t * lspdb, char detail,
                    111:                   char dynhost);
                    112: const char *lsp_bits2string (u_char *);
                    113: 
1.1.1.2 ! misho     114: /* sets SRMflags for all active circuits of an lsp */
        !           115: void lsp_set_all_srmflags (struct isis_lsp *lsp);
        !           116: 
1.1       misho     117: #ifdef TOPOLOGY_GENERATE
                    118: void generate_topology_lsps (struct isis_area *area);
                    119: void remove_topology_lsps (struct isis_area *area);
                    120: void build_topology_lsp_data (struct isis_lsp *lsp,
                    121:                              struct isis_area *area, int lsp_top_num);
                    122: #endif /* TOPOLOGY_GENERATE */
                    123: 
                    124: #endif /* ISIS_LSP */

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