Annotation of embedaddon/quagga/isisd/isis_lsp.h, revision 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>