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>