File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / quagga / isisd / isis_circuit.h
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 17:26:11 2012 UTC (12 years, 5 months ago) by misho
Branches: quagga, MAIN
CVS tags: v0_99_20_1, v0_99_20, HEAD
quagga

    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>