2
* IS-IS Rout(e)ing protocol - isis_adjacency.h
3
* IS-IS adjacency handling
5
* Copyright (C) 2001,2002 Sampo Saaristo
6
* Tampere University of Technology
7
* Institute of Communications Engineering
10
* This program is free software; you can redistribute it and/or modify it
11
* under the terms of the GNU General Public Licenseas published by the Free
12
* Software Foundation; either version 2 of the License, or (at your option)
15
* This program is distributed in the hope that it will be useful,but WITHOUT
16
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
17
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
20
* You should have received a copy of the GNU General Public License along
21
* with this program; if not, write to the Free Software Foundation, Inc.,
22
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
25
#ifndef _ZEBRA_ISIS_ADJACENCY_H
26
#define _ZEBRA_ISIS_ADJACENCY_H
47
ISIS_ADJ_INITIALIZING,
53
* we use the following codes to give an indication _why_
54
* a specific adjacency is up or down
56
enum isis_adj_updown_reason
58
ISIS_ADJ_REASON_SEENSELF,
59
ISIS_ADJ_REASON_AREA_MISMATCH,
60
ISIS_ADJ_REASON_HOLDTIMER_EXPIRED,
61
ISIS_ADJ_REASON_AUTH_FAILED,
62
ISIS_ADJ_REASON_CHECKSUM_FAILED
65
#define DIS_RECORDS 8 /* keep the last 8 DIS state changes on record */
67
struct isis_dis_record {
68
int dis; /* is our neighbor the DIS ? */ time_t last_dis_change; /* timestamp for last dis change */
71
struct isis_adjacency{
72
u_char snpa[ETH_ALEN]; /* NeighbourSNPAAddress */
73
u_char sysid[ISIS_SYS_ID_LEN]; /* neighbourSystemIdentifier */
74
u_char lanid[ISIS_SYS_ID_LEN+1]; /* LAN id on bcast circuits */
75
int dischanges[ISIS_LEVELS]; /* how many DIS changes ?*/
76
/* an array of N levels for M records */
77
struct isis_dis_record dis_record[DIS_RECORDS * ISIS_LEVELS];
78
enum isis_adj_state adj_state; /* adjacencyState */
79
enum isis_adj_usage adj_usage; /* adjacencyUsage */
80
struct list *area_addrs; /* areaAdressesOfNeighbour */
81
struct nlpids nlpids; /* protocols spoken ... */
82
struct list *ipv4_addrs;
84
struct list *ipv6_addrs;
85
#endif /* HAVE_IPV6 */
86
u_char prio[ISIS_LEVELS]; /* priorityOfNeighbour for DIS*/
87
int circuit_t; /* from hello PDU hdr */
88
int level; /* level (1 or 2) */
89
enum isis_system_type sys_type; /* neighbourSystemType */
90
u_int16_t hold_time; /* entryRemainingTime */
92
u_int32_t last_flap; /* last time the adj flapped */
93
int flaps; /* number of adjacency flaps */
94
struct thread *t_expire; /* expire after hold_time */
95
struct isis_circuit *circuit; /* back pointer */
99
struct isis_adjacency *isis_adj_lookup (u_char *sysid, struct list *adjdb);
100
struct isis_adjacency *isis_adj_lookup_snpa (u_char *ssnpa,
102
struct isis_adjacency *isis_new_adj (u_char *id, u_char *snpa, int level,
103
struct isis_circuit *circuit);
104
void isis_delete_adj (struct isis_adjacency *adj, struct list *adjdb);
105
void isis_adj_state_change (struct isis_adjacency *adj,
106
enum isis_adj_state state, char *reason);
107
void isis_adj_print (struct isis_adjacency *adj);
108
int isis_adj_expire (struct thread *thread);
109
void isis_adj_print_vty (struct isis_adjacency *adj, struct vty *vty);
110
void isis_adj_print_vty_detail (struct isis_adjacency *adj, struct vty *vty);
111
void isis_adj_print_vty_extensive (struct isis_adjacency *adj,
113
void isis_adj_p2p_print_vty (struct isis_adjacency *adj, struct vty *vty);
114
void isis_adj_p2p_print_vty_detail (struct isis_adjacency *adj,
116
void isis_adj_p2p_print_vty_extensive (struct isis_adjacency *adj,
119
void isis_adj_build_neigh_list (struct list *adjdb, struct list *list);
120
void isis_adj_build_up_list (struct list *adjdb, struct list *list);
121
void isis_adjdb_iterate (struct list *adjdb,
122
void (*func)(struct isis_adjacency*,
125
#endif /* ISIS_ADJACENCY_H */