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

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:   int pad_hellos;              /* add padding to Hello PDUs ? */
                     56:   u_char priority[2];          /* l1/2 IS Priority */
                     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) */
                     81:   /* there is no real point in two streams, just for programming kicker */
                     82:   int (*rx) (struct isis_circuit * circuit, u_char * ssnpa);
                     83:   struct stream *rcv_stream;   /* Stream for receiving */
                     84:   int (*tx) (struct isis_circuit * circuit, int level);
                     85:   struct stream *snd_stream;   /* Stream for sending */
                     86:   int idx;                     /* idx in S[RM|SN] flags */
                     87: #define CIRCUIT_T_BROADCAST  0
                     88: #define CIRCUIT_T_P2P        1
                     89: #define CIRCUIT_T_STATIC_IN  2
                     90: #define CIRCUIT_T_STATIC_OUT 3
                     91: #define CIRCUIT_T_DA         4
                     92:   int circ_type;               /* type of the physical interface */
                     93:   union
                     94:   {
                     95:     struct isis_bcast_info bc;
                     96:     struct isis_p2p_info p2p;
                     97:   } u;
                     98:   char ext_domain;             /* externalDomain   (boolean) */
                     99:   /* 
                    100:    * Configurables 
                    101:    */
                    102:   struct isis_passwd passwd;   /* Circuit rx/tx password */
                    103:   long lsp_interval;
                    104:   int manual_l2_only;          /* manualL2OnlyMode (boolean) */
                    105:   int circuit_is_type;         /* circuit is type == level of circuit
                    106:                                 * diffrenciated from circuit type (media) */
                    107:   u_int32_t hello_interval[2]; /* l1HelloInterval in msecs */
                    108:   u_int16_t hello_multiplier[2];       /* l1HelloMultiplier */
                    109:   u_int16_t csnp_interval[2];  /* level-1 csnp-interval in seconds */
                    110:   u_int16_t psnp_interval[2];  /* level-1 psnp-interval in seconds */
                    111:   struct metric metrics[2];    /* l1XxxMetric */
                    112:   u_int32_t te_metric[2];
                    113:   struct password *c_rx_passwds;       /* circuitReceivePasswords */
                    114:   struct password *c_tc_passwd;        /* circuitTransmitPassword */
                    115:   int ip_router;               /* Route IP ? */
                    116:   struct list *ip_addrs;       /* our IP addresses */
                    117: #ifdef HAVE_IPV6
                    118:   int ipv6_router;             /* Route IPv6 ? */
                    119:   struct list *ipv6_link;      /* our link local IPv6 addresses */
                    120:   struct list *ipv6_non_link;  /* our non-link local IPv6 addresses */
                    121: #endif                         /* HAVE_IPV6 */
                    122:   /* 
                    123:    * RFC 2973 IS-IS Mesh Groups 
                    124:    */
                    125: #define MESH_INACTIVE 0
                    126: #define MESH_BLOCKED  1
                    127: #define MESH_SET      2
                    128:   int mesh_enabled;            /* meshGroupEnabled */
                    129:   u_int16_t mesh_group;                /* meshGroup */
                    130:   u_int16_t upadjcount[2];
                    131:   /*
                    132:    * Counters as in 10589--11.2.5.9
                    133:    */
                    134:   u_int32_t adj_state_changes; /* changesInAdjacencyState */
                    135:   u_int32_t init_failures;     /* intialisationFailures */
                    136:   u_int32_t ctrl_pdus_rxed;    /* controlPDUsReceived */
                    137:   u_int32_t ctrl_pdus_txed;    /* controlPDUsSent */
                    138:   u_int32_t desig_changes[2];  /* lanLxDesignatedIntermediateSystemChanges */
                    139:   u_int32_t rej_adjacencies;   /* rejectedAdjacencies */
                    140: };
                    141: 
                    142: void isis_circuit_init (void);
                    143: struct isis_circuit *isis_circuit_new (void);
                    144: struct isis_circuit *circuit_lookup_by_ifp (struct interface *ifp,
                    145:                                            struct list *list);
                    146: struct isis_circuit *circuit_scan_by_ifp (struct interface *ifp);
                    147: void isis_circuit_del (struct isis_circuit *circuit);
                    148: void isis_circuit_configure (struct isis_circuit *circuit,
                    149:                             struct isis_area *area);
                    150: void isis_circuit_up (struct isis_circuit *circuit);
                    151: void isis_circuit_deconfigure (struct isis_circuit *circuit,
                    152:                               struct isis_area *area);
                    153: 
                    154: int isis_circuit_destroy (struct isis_circuit *circuit);
                    155: void isis_circuit_if_add (struct isis_circuit *circuit,
                    156:                          struct interface *ifp);
                    157: void isis_circuit_if_del (struct isis_circuit *circuit);
                    158: void circuit_update_nlpids (struct isis_circuit *circuit);
                    159: void isis_circuit_update_params (struct isis_circuit *circuit,
                    160:                                 struct interface *ifp);
                    161: void isis_circuit_add_addr (struct isis_circuit *circuit,
                    162:                            struct connected *conn);
                    163: void isis_circuit_del_addr (struct isis_circuit *circuit,
                    164:                            struct connected *conn);
                    165: #endif /* _ZEBRA_ISIS_CIRCUIT_H */

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