diff options
| author | jardin <jardin> | 2003-12-23 08:09:43 +0000 | 
|---|---|---|
| committer | jardin <jardin> | 2003-12-23 08:09:43 +0000 | 
| commit | eb5d44eb8dcf25a1b328e57d1eabb1f89e3bc59b (patch) | |
| tree | 2973e8563fcbd4a8cf901d211ff4f8de00c36381 /isisd/isis_lsp.h | |
| parent | 3dbf99698a3be2e920871c3127ea089e061a127c (diff) | |
Initial revision
Diffstat (limited to 'isisd/isis_lsp.h')
| -rw-r--r-- | isisd/isis_lsp.h | 132 | 
1 files changed, 132 insertions, 0 deletions
diff --git a/isisd/isis_lsp.h b/isisd/isis_lsp.h new file mode 100644 index 0000000000..71a75089aa --- /dev/null +++ b/isisd/isis_lsp.h @@ -0,0 +1,132 @@ +/* + * IS-IS Rout(e)ing protocol - isis_lsp.h    + *                             LSP processing + * + * Copyright (C) 2001,2002   Sampo Saaristo + *                           Tampere University of Technology       + *                           Institute of Communications Engineering + * + * This program is free software; you can redistribute it and/or modify it  + * under the terms of the GNU General Public Licenseas published by the Free  + * Software Foundation; either version 2 of the License, or (at your option)  + * any later version. + * + * This program is distributed in the hope that it will be useful,but WITHOUT  + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or  + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for  + * more details. + + * You should have received a copy of the GNU General Public License along  + * with this program; if not, write to the Free Software Foundation, Inc.,  + * 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. + */ + +#ifndef _ZEBRA_ISIS_LSP_H +#define _ZEBRA_ISIS_LSP_H + +/* The grand plan is to support 1024 circuits so we have 32*32 bit flags + * the support will be achived using the newest drafts */ +#define ISIS_MAX_CIRCUITS 32 /* = 1024 */ /*FIXME:defined in flags.h as well*/ + +/* Structure for isis_lsp, this structure will only support the fixed + * System ID (Currently 6) (atleast for now). In order to support more + * We will have to split the header into two parts, and for readability + * sake it should better be avoided */ +struct isis_lsp +{ +  struct isis_fixed_hdr *isis_header;       /* normally equals pdu */ +  struct isis_link_state_hdr *lsp_header;   /* pdu + isis_header_len */ +  struct stream *pdu;                       /* full pdu lsp */ +  union { +    struct list *frags; +    struct isis_lsp *zero_lsp; +  } lspu; +  u_int32_t SRMflags[ISIS_MAX_CIRCUITS]; +  u_int32_t SSNflags[ISIS_MAX_CIRCUITS]; +  u_int32_t rexmit_queue[ISIS_MAX_CIRCUITS]; +  int level;                                /* L1 or L2? */ +  int purged;                               /* have purged this one */ +  int scheduled;                            /* scheduled for sending */ +  time_t installed; +  time_t last_generated; +  time_t last_sent; +  int own_lsp; +#ifdef TOPOLOGY_GENERATE +  int from_topology; +  struct thread *t_lsp_top_ref; +#endif +  /* used for 60 second counting when rem_lifetime is zero */ +  int age_out;  +  struct isis_adjacency *adj; +  struct tlvs tlv_data;                     /* Simplifies TLV access */ +}; + +dict_t *lsp_db_init (void); +void lsp_db_destroy (dict_t *lspdb); +int lsp_tick (struct thread *thread); + +int lsp_l1_generate (struct isis_area *area); +int lsp_l2_generate (struct isis_area *area); +int lsp_refresh_l1 (struct thread *thread); +int lsp_refresh_l2 (struct thread *thread); +int lsp_regenerate_schedule (struct isis_area *area); + +int lsp_l1_pseudo_generate (struct isis_circuit *circuit); +int lsp_l2_pseudo_generate (struct isis_circuit *circuit); +int lsp_l1_refresh_pseudo  (struct thread *thread); +int lsp_l2_refresh_pseudo  (struct thread *thread); +int isis_lsp_authinfo_check (struct stream *stream, struct isis_area *area, +			     int  pdulen, struct isis_passwd *passwd); +struct isis_lsp *lsp_new (u_char *lsp_id, u_int16_t rem_lifetime,  +                          u_int32_t seq_num, u_int8_t lsp_bits,  +                          u_int16_t checksum, int level); +struct isis_lsp *lsp_new_from_stream_ptr (struct stream *stream,  +					  u_int16_t pdu_len,   +                                          struct isis_lsp *lsp0,  +                                          struct isis_area *area); +void lsp_insert (struct isis_lsp *lsp, dict_t *lspdb); +struct isis_lsp *lsp_search (u_char *id, dict_t *lspdb); + +void lsp_build_list (u_char *start_id, u_char *stop_id,  +                     struct list *list, dict_t *lspdb); +void lsp_build_list_nonzero_ht (u_char *start_id, u_char *stop_id,  +                                struct list *list, dict_t *lspdb); +void lsp_build_list_ssn (struct isis_circuit *circuit, struct list *list,  +                         dict_t *lspdb); + +void lsp_search_and_destroy (u_char *id, dict_t *lspdb); +void lsp_purge_dr (u_char *id, struct isis_circuit *circuit, int level); +void lsp_purge_non_exist (struct isis_link_state_hdr *lsp_hdr,  +                          struct isis_area *area); + +#define LSP_EQUAL 1 +#define LSP_NEWER 2 +#define LSP_OLDER 3 + +#define LSP_PSEUDO_ID(I) ((u_char)(I)[ISIS_SYS_ID_LEN]) +#define LSP_FRAGMENT(I) ((u_char)(I)[ISIS_SYS_ID_LEN + 1]) +#define OWNLSPID(I) \ +        memcpy ((I), isis->sysid, ISIS_SYS_ID_LEN);\ +        (I)[ISIS_SYS_ID_LEN] = 0;\ +        (I)[ISIS_SYS_ID_LEN + 1] = 0 +int lsp_id_cmp (u_char *id1, u_char *id2); +int lsp_compare (char *areatag, struct isis_lsp *lsp, u_int32_t seq_num,  +                 u_int16_t checksum, u_int16_t rem_lifetime); +void lsp_update (struct isis_lsp *lsp, struct isis_link_state_hdr *lsp_hdr, +                 struct stream *stream, struct isis_area *area); +void lsp_inc_seqnum (struct isis_lsp *lsp, u_int32_t seq_num); +int lsp_print_all (struct vty *vty, dict_t *lspdb, char detail, char dynhost); +char *lsp_bits2string (u_char *); + +/* staticly assigned vars for printing purposes */ +char lsp_bits_string[200]; /* FIXME: enough ? */ + +#ifdef TOPOLOGY_GENERATE +void generate_topology_lsps (struct isis_area *area); +void remove_topology_lsps (struct isis_area *area); +void build_topology_lsp_data (struct isis_lsp *lsp, +            struct isis_area *area, int lsp_top_num); +#endif /* TOPOLOGY_GENERATE */ + +#endif /* ISIS_LSP */ +  | 
