File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / quagga / isisd / isis_circuit.h
Revision 1.1.1.3 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Wed Nov 2 10:09:10 2016 UTC (7 years, 8 months ago) by misho
Branches: quagga, MAIN
CVS tags: v1_0_20160315, HEAD
quagga 1.0.20160315

    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: #include "vty.h"
   27: 
   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) */
   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:                                  */
   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 */
   91: #define CIRCUIT_T_UNKNOWN    0
   92: #define CIRCUIT_T_BROADCAST  1
   93: #define CIRCUIT_T_P2P        2
   94: #define CIRCUIT_T_LOOPBACK   3
   95:   int circ_type;		/* type of the physical interface */
   96:   int circ_type_config;		/* config type of the physical interface */
   97:   union
   98:   {
   99:     struct isis_bcast_info bc;
  100:     struct isis_p2p_info p2p;
  101:   } u;
  102:   u_char priority[2];		/* l1/2 IS configured priority */
  103:   int pad_hellos;		/* add padding to Hello PDUs ? */
  104:   char ext_domain;		/* externalDomain   (boolean) */
  105:   int lsp_regenerate_pending[ISIS_LEVELS];
  106:   /* 
  107:    * Configurables 
  108:    */
  109:   struct isis_passwd passwd;	/* Circuit rx/tx password */
  110:   int is_type;	                /* circuit is type == level of circuit
  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 ? */
  119:   int is_passive;		/* Is Passive ? */
  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];
  127: #define ISIS_CIRCUIT_FLAPPED_AFTER_SPF 0x01
  128:   u_char flags;
  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);
  142: void isis_circuit_del (struct isis_circuit *circuit);
  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);
  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);
  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);
  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);
  167: size_t isis_circuit_pdu_size(struct isis_circuit *circuit);
  168: void isis_circuit_stream(struct isis_circuit *circuit, struct stream **stream);
  169: 
  170: #endif /* _ZEBRA_ISIS_CIRCUIT_H */

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