Annotation of embedaddon/quagga/isisd/isis_circuit.h, revision 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>