Annotation of embedaddon/quagga/isisd/isis_circuit.h, revision 1.1.1.3

1.1       misho       1: /*
                      2:  * IS-IS Rout(e)ing protocol - isis_circuit.h
                      3:  *
                      4:  * Copyright (C) 2001,2002   Sampo Saaristo
                      5:  *                           Tampere University of Technology      
                      6:  *                           Institute of Communications Engineering
                      7:  *
                      8:  * This program is free software; you can redistribute it and/or modify it 
                      9:  * under the terms of the GNU General Public Licenseas published by the Free 
                     10:  * Software Foundation; either version 2 of the License, or (at your option) 
                     11:  * any later version.
                     12:  *
                     13:  * This program is distributed in the hope that it will be useful,but WITHOUT 
                     14:  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
                     15:  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for 
                     16:  * more details.
                     17: 
                     18:  * You should have received a copy of the GNU General Public License along 
                     19:  * with this program; if not, write to the Free Software Foundation, Inc., 
                     20:  * 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
                     21:  */
                     22: 
                     23: #ifndef ISIS_CIRCUIT_H
                     24: #define ISIS_CIRCUIT_H
                     25: 
1.1.1.3 ! misho      26: #include "vty.h"
        !            27: 
1.1       misho      28: #define CIRCUIT_MAX 255
                     29: 
                     30: struct password
                     31: {
                     32:   struct password *next;
                     33:   int len;
                     34:   u_char *pass;
                     35: };
                     36: 
                     37: struct metric
                     38: {
                     39:   u_char metric_default;
                     40:   u_char metric_error;
                     41:   u_char metric_expense;
                     42:   u_char metric_delay;
                     43: };
                     44: 
                     45: struct isis_bcast_info
                     46: {
                     47:   u_char snpa[ETH_ALEN];       /* SNPA of this circuit */
                     48:   char run_dr_elect[2];                /* Should we run dr election ? */
                     49:   struct thread *t_run_dr[2];  /* DR election thread */
                     50:   struct thread *t_send_lan_hello[2];  /* send LAN IIHs in this thread */
                     51:   struct list *adjdb[2];       /* adjacency dbs */
                     52:   struct list *lan_neighs[2];  /* list of lx neigh snpa */
                     53:   char is_dr[2];               /* Are we level x DR ? */
                     54:   u_char l1_desig_is[ISIS_SYS_ID_LEN + 1];     /* level-1 DR */
                     55:   u_char l2_desig_is[ISIS_SYS_ID_LEN + 1];     /* level-2 DR */
                     56:   struct thread *t_refresh_pseudo_lsp[2];      /* refresh pseudo-node LSPs */
                     57: };
                     58: 
                     59: struct isis_p2p_info
                     60: {
                     61:   struct isis_adjacency *neighbor;
                     62:   struct thread *t_send_p2p_hello;     /* send P2P IIHs in this thread  */
                     63: };
                     64: 
                     65: struct isis_circuit
                     66: {
                     67:   int state;
                     68:   u_char circuit_id;           /* l1/l2 p2p/bcast CircuitID */
                     69:   struct isis_area *area;      /* back pointer to the area */
                     70:   struct interface *interface; /* interface info from z */
                     71:   int fd;                      /* IS-IS l1/2 socket */
                     72:   int sap_length;              /* SAP length for DLPI */
                     73:   struct nlpids nlpids;
                     74:   /*
                     75:    * Threads
                     76:    */
                     77:   struct thread *t_read;
                     78:   struct thread *t_send_csnp[2];
                     79:   struct thread *t_send_psnp[2];
                     80:   struct list *lsp_queue;      /* LSPs to be txed (both levels) */
1.1.1.2   misho      81:   time_t lsp_queue_last_cleared;/* timestamp used to enforce transmit interval;
                     82:                                  * for scalability, use one timestamp per 
                     83:                                  * circuit, instead of one per lsp per circuit
                     84:                                  */
1.1       misho      85:   /* there is no real point in two streams, just for programming kicker */
                     86:   int (*rx) (struct isis_circuit * circuit, u_char * ssnpa);
                     87:   struct stream *rcv_stream;   /* Stream for receiving */
                     88:   int (*tx) (struct isis_circuit * circuit, int level);
                     89:   struct stream *snd_stream;   /* Stream for sending */
                     90:   int idx;                     /* idx in S[RM|SN] flags */
1.1.1.2   misho      91: #define CIRCUIT_T_UNKNOWN    0
                     92: #define CIRCUIT_T_BROADCAST  1
                     93: #define CIRCUIT_T_P2P        2
                     94: #define CIRCUIT_T_LOOPBACK   3
1.1       misho      95:   int circ_type;               /* type of the physical interface */
1.1.1.2   misho      96:   int circ_type_config;                /* config type of the physical interface */
1.1       misho      97:   union
                     98:   {
                     99:     struct isis_bcast_info bc;
                    100:     struct isis_p2p_info p2p;
                    101:   } u;
1.1.1.2   misho     102:   u_char priority[2];          /* l1/2 IS configured priority */
                    103:   int pad_hellos;              /* add padding to Hello PDUs ? */
1.1       misho     104:   char ext_domain;             /* externalDomain   (boolean) */
1.1.1.2   misho     105:   int lsp_regenerate_pending[ISIS_LEVELS];
1.1       misho     106:   /* 
                    107:    * Configurables 
                    108:    */
                    109:   struct isis_passwd passwd;   /* Circuit rx/tx password */
1.1.1.2   misho     110:   int is_type;                 /* circuit is type == level of circuit
1.1       misho     111:                                 * diffrenciated from circuit type (media) */
                    112:   u_int32_t hello_interval[2]; /* l1HelloInterval in msecs */
                    113:   u_int16_t hello_multiplier[2];       /* l1HelloMultiplier */
                    114:   u_int16_t csnp_interval[2];  /* level-1 csnp-interval in seconds */
                    115:   u_int16_t psnp_interval[2];  /* level-1 psnp-interval in seconds */
                    116:   struct metric metrics[2];    /* l1XxxMetric */
                    117:   u_int32_t te_metric[2];
                    118:   int ip_router;               /* Route IP ? */
1.1.1.2   misho     119:   int is_passive;              /* Is Passive ? */
1.1       misho     120:   struct list *ip_addrs;       /* our IP addresses */
                    121: #ifdef HAVE_IPV6
                    122:   int ipv6_router;             /* Route IPv6 ? */
                    123:   struct list *ipv6_link;      /* our link local IPv6 addresses */
                    124:   struct list *ipv6_non_link;  /* our non-link local IPv6 addresses */
                    125: #endif                         /* HAVE_IPV6 */
                    126:   u_int16_t upadjcount[2];
1.1.1.2   misho     127: #define ISIS_CIRCUIT_FLAPPED_AFTER_SPF 0x01
                    128:   u_char flags;
1.1       misho     129:   /*
                    130:    * Counters as in 10589--11.2.5.9
                    131:    */
                    132:   u_int32_t adj_state_changes; /* changesInAdjacencyState */
                    133:   u_int32_t init_failures;     /* intialisationFailures */
                    134:   u_int32_t ctrl_pdus_rxed;    /* controlPDUsReceived */
                    135:   u_int32_t ctrl_pdus_txed;    /* controlPDUsSent */
                    136:   u_int32_t desig_changes[2];  /* lanLxDesignatedIntermediateSystemChanges */
                    137:   u_int32_t rej_adjacencies;   /* rejectedAdjacencies */
                    138: };
                    139: 
                    140: void isis_circuit_init (void);
                    141: struct isis_circuit *isis_circuit_new (void);
1.1.1.2   misho     142: void isis_circuit_del (struct isis_circuit *circuit);
1.1       misho     143: struct isis_circuit *circuit_lookup_by_ifp (struct interface *ifp,
                    144:                                            struct list *list);
                    145: struct isis_circuit *circuit_scan_by_ifp (struct interface *ifp);
                    146: void isis_circuit_configure (struct isis_circuit *circuit,
                    147:                             struct isis_area *area);
                    148: void isis_circuit_deconfigure (struct isis_circuit *circuit,
                    149:                               struct isis_area *area);
                    150: void isis_circuit_if_add (struct isis_circuit *circuit,
                    151:                          struct interface *ifp);
1.1.1.2   misho     152: void isis_circuit_if_del (struct isis_circuit *circuit,
                    153:                          struct interface *ifp);
                    154: void isis_circuit_if_bind (struct isis_circuit *circuit,
                    155:                            struct interface *ifp);
                    156: void isis_circuit_if_unbind (struct isis_circuit *circuit,
                    157:                              struct interface *ifp);
1.1       misho     158: void isis_circuit_add_addr (struct isis_circuit *circuit,
                    159:                            struct connected *conn);
                    160: void isis_circuit_del_addr (struct isis_circuit *circuit,
                    161:                            struct connected *conn);
1.1.1.2   misho     162: int isis_circuit_up (struct isis_circuit *circuit);
                    163: void isis_circuit_down (struct isis_circuit *);
                    164: void circuit_update_nlpids (struct isis_circuit *circuit);
                    165: void isis_circuit_print_vty (struct isis_circuit *circuit, struct vty *vty,
                    166:                              char detail);
1.1.1.3 ! misho     167: size_t isis_circuit_pdu_size(struct isis_circuit *circuit);
        !           168: void isis_circuit_stream(struct isis_circuit *circuit, struct stream **stream);
1.1.1.2   misho     169: 
1.1       misho     170: #endif /* _ZEBRA_ISIS_CIRCUIT_H */

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