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

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: 
                     26: #define CIRCUIT_MAX 255
                     27: 
                     28: struct password
                     29: {
                     30:   struct password *next;
                     31:   int len;
                     32:   u_char *pass;
                     33: };
                     34: 
                     35: struct metric
                     36: {
                     37:   u_char metric_default;
                     38:   u_char metric_error;
                     39:   u_char metric_expense;
                     40:   u_char metric_delay;
                     41: };
                     42: 
                     43: struct isis_bcast_info
                     44: {
                     45:   u_char snpa[ETH_ALEN];       /* SNPA of this circuit */
                     46:   char run_dr_elect[2];                /* Should we run dr election ? */
                     47:   struct thread *t_run_dr[2];  /* DR election thread */
                     48:   struct thread *t_send_lan_hello[2];  /* send LAN IIHs in this thread */
                     49:   struct list *adjdb[2];       /* adjacency dbs */
                     50:   struct list *lan_neighs[2];  /* list of lx neigh snpa */
                     51:   char is_dr[2];               /* Are we level x DR ? */
                     52:   u_char l1_desig_is[ISIS_SYS_ID_LEN + 1];     /* level-1 DR */
                     53:   u_char l2_desig_is[ISIS_SYS_ID_LEN + 1];     /* level-2 DR */
                     54:   struct thread *t_refresh_pseudo_lsp[2];      /* refresh pseudo-node LSPs */
                     55: };
                     56: 
                     57: struct isis_p2p_info
                     58: {
                     59:   struct isis_adjacency *neighbor;
                     60:   struct thread *t_send_p2p_hello;     /* send P2P IIHs in this thread  */
                     61: };
                     62: 
                     63: struct isis_circuit
                     64: {
                     65:   int state;
                     66:   u_char circuit_id;           /* l1/l2 p2p/bcast CircuitID */
                     67:   struct isis_area *area;      /* back pointer to the area */
                     68:   struct interface *interface; /* interface info from z */
                     69:   int fd;                      /* IS-IS l1/2 socket */
                     70:   int sap_length;              /* SAP length for DLPI */
                     71:   struct nlpids nlpids;
                     72:   /*
                     73:    * Threads
                     74:    */
                     75:   struct thread *t_read;
                     76:   struct thread *t_send_csnp[2];
                     77:   struct thread *t_send_psnp[2];
                     78:   struct list *lsp_queue;      /* LSPs to be txed (both levels) */
1.1.1.2 ! misho      79:   time_t lsp_queue_last_cleared;/* timestamp used to enforce transmit interval;
        !            80:                                  * for scalability, use one timestamp per 
        !            81:                                  * circuit, instead of one per lsp per circuit
        !            82:                                  */
1.1       misho      83:   /* there is no real point in two streams, just for programming kicker */
                     84:   int (*rx) (struct isis_circuit * circuit, u_char * ssnpa);
                     85:   struct stream *rcv_stream;   /* Stream for receiving */
                     86:   int (*tx) (struct isis_circuit * circuit, int level);
                     87:   struct stream *snd_stream;   /* Stream for sending */
                     88:   int idx;                     /* idx in S[RM|SN] flags */
1.1.1.2 ! misho      89: #define CIRCUIT_T_UNKNOWN    0
        !            90: #define CIRCUIT_T_BROADCAST  1
        !            91: #define CIRCUIT_T_P2P        2
        !            92: #define CIRCUIT_T_LOOPBACK   3
1.1       misho      93:   int circ_type;               /* type of the physical interface */
1.1.1.2 ! misho      94:   int circ_type_config;                /* config type of the physical interface */
1.1       misho      95:   union
                     96:   {
                     97:     struct isis_bcast_info bc;
                     98:     struct isis_p2p_info p2p;
                     99:   } u;
1.1.1.2 ! misho     100:   u_char priority[2];          /* l1/2 IS configured priority */
        !           101:   int pad_hellos;              /* add padding to Hello PDUs ? */
1.1       misho     102:   char ext_domain;             /* externalDomain   (boolean) */
1.1.1.2 ! misho     103:   int lsp_regenerate_pending[ISIS_LEVELS];
1.1       misho     104:   /* 
                    105:    * Configurables 
                    106:    */
                    107:   struct isis_passwd passwd;   /* Circuit rx/tx password */
1.1.1.2 ! misho     108:   int is_type;                 /* circuit is type == level of circuit
1.1       misho     109:                                 * diffrenciated from circuit type (media) */
                    110:   u_int32_t hello_interval[2]; /* l1HelloInterval in msecs */
                    111:   u_int16_t hello_multiplier[2];       /* l1HelloMultiplier */
                    112:   u_int16_t csnp_interval[2];  /* level-1 csnp-interval in seconds */
                    113:   u_int16_t psnp_interval[2];  /* level-1 psnp-interval in seconds */
                    114:   struct metric metrics[2];    /* l1XxxMetric */
                    115:   u_int32_t te_metric[2];
                    116:   int ip_router;               /* Route IP ? */
1.1.1.2 ! misho     117:   int is_passive;              /* Is Passive ? */
1.1       misho     118:   struct list *ip_addrs;       /* our IP addresses */
                    119: #ifdef HAVE_IPV6
                    120:   int ipv6_router;             /* Route IPv6 ? */
                    121:   struct list *ipv6_link;      /* our link local IPv6 addresses */
                    122:   struct list *ipv6_non_link;  /* our non-link local IPv6 addresses */
                    123: #endif                         /* HAVE_IPV6 */
                    124:   u_int16_t upadjcount[2];
1.1.1.2 ! misho     125: #define ISIS_CIRCUIT_FLAPPED_AFTER_SPF 0x01
        !           126:   u_char flags;
1.1       misho     127:   /*
                    128:    * Counters as in 10589--11.2.5.9
                    129:    */
                    130:   u_int32_t adj_state_changes; /* changesInAdjacencyState */
                    131:   u_int32_t init_failures;     /* intialisationFailures */
                    132:   u_int32_t ctrl_pdus_rxed;    /* controlPDUsReceived */
                    133:   u_int32_t ctrl_pdus_txed;    /* controlPDUsSent */
                    134:   u_int32_t desig_changes[2];  /* lanLxDesignatedIntermediateSystemChanges */
                    135:   u_int32_t rej_adjacencies;   /* rejectedAdjacencies */
                    136: };
                    137: 
                    138: void isis_circuit_init (void);
                    139: struct isis_circuit *isis_circuit_new (void);
1.1.1.2 ! misho     140: void isis_circuit_del (struct isis_circuit *circuit);
1.1       misho     141: struct isis_circuit *circuit_lookup_by_ifp (struct interface *ifp,
                    142:                                            struct list *list);
                    143: struct isis_circuit *circuit_scan_by_ifp (struct interface *ifp);
                    144: void isis_circuit_configure (struct isis_circuit *circuit,
                    145:                             struct isis_area *area);
                    146: void isis_circuit_deconfigure (struct isis_circuit *circuit,
                    147:                               struct isis_area *area);
                    148: void isis_circuit_if_add (struct isis_circuit *circuit,
                    149:                          struct interface *ifp);
1.1.1.2 ! misho     150: void isis_circuit_if_del (struct isis_circuit *circuit,
        !           151:                          struct interface *ifp);
        !           152: void isis_circuit_if_bind (struct isis_circuit *circuit,
        !           153:                            struct interface *ifp);
        !           154: void isis_circuit_if_unbind (struct isis_circuit *circuit,
        !           155:                              struct interface *ifp);
1.1       misho     156: void isis_circuit_add_addr (struct isis_circuit *circuit,
                    157:                            struct connected *conn);
                    158: void isis_circuit_del_addr (struct isis_circuit *circuit,
                    159:                            struct connected *conn);
1.1.1.2 ! misho     160: int isis_circuit_up (struct isis_circuit *circuit);
        !           161: void isis_circuit_down (struct isis_circuit *);
        !           162: void circuit_update_nlpids (struct isis_circuit *circuit);
        !           163: void isis_circuit_print_vty (struct isis_circuit *circuit, struct vty *vty,
        !           164:                              char detail);
        !           165: 
1.1       misho     166: #endif /* _ZEBRA_ISIS_CIRCUIT_H */

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