1: /*
2: * OSPF Neighbor functions.
3: * Copyright (C) 1999, 2000 Toshiaki Takada
4: *
5: * This file is part of GNU Zebra.
6: *
7: * GNU Zebra is free software; you can redistribute it and/or modify
8: * it under the terms of the GNU General Public License as published
9: * by the Free Software Foundation; either version 2, or (at your
10: * option) any later version.
11: *
12: * GNU Zebra is distributed in the hope that it will be useful, but
13: * WITHOUT ANY WARRANTY; without even the implied warranty of
14: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15: * General Public License for more details.
16: *
17: * You should have received a copy of the GNU General Public License
18: * along with GNU Zebra; see the file COPYING. If not, write to the
19: * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20: * Boston, MA 02111-1307, USA.
21: */
22:
23: #ifndef _ZEBRA_OSPF_NEIGHBOR_H
24: #define _ZEBRA_OSPF_NEIGHBOR_H
25:
26: #include <ospfd/ospf_packet.h>
27:
28: /* Neighbor Data Structure */
29: struct ospf_neighbor
30: {
31: /* This neighbor's parent ospf interface. */
32: struct ospf_interface *oi;
33:
34: /* OSPF neighbor Information */
35: u_char state; /* NSM status. */
36: u_char dd_flags; /* DD bit flags. */
37: u_int32_t dd_seqnum; /* DD Sequence Number. */
38:
39: /* Neighbor Information from Hello. */
40: struct prefix address; /* Neighbor Interface Address. */
41:
42: struct in_addr src; /* Src address. */
43: struct in_addr router_id; /* Router ID. */
44: u_char options; /* Options. */
45: int priority; /* Router Priority. */
46: struct in_addr d_router; /* Designated Router. */
47: struct in_addr bd_router; /* Backup Designated Router. */
48:
49: /* Last sent Database Description packet. */
50: struct ospf_packet *last_send;
51: /* Timestemp when last Database Description packet was sent */
52: struct timeval last_send_ts;
53:
54: /* Last received Databse Description packet. */
55: struct
56: {
57: u_char options;
58: u_char flags;
59: u_int32_t dd_seqnum;
60: } last_recv;
61:
62: /* LSA data. */
63: struct ospf_lsdb ls_rxmt;
64: struct ospf_lsdb db_sum;
65: struct ospf_lsdb ls_req;
66: struct ospf_lsa *ls_req_last;
67:
68: u_int32_t crypt_seqnum; /* Cryptographic Sequence Number. */
69:
70: /* Timer values. */
71: u_int32_t v_inactivity;
72: u_int32_t v_db_desc;
73: u_int32_t v_ls_req;
74: u_int32_t v_ls_upd;
75:
76: /* Threads. */
77: struct thread *t_inactivity;
78: struct thread *t_db_desc;
79: struct thread *t_ls_req;
80: struct thread *t_ls_upd;
81: struct thread *t_hello_reply;
82:
83: /* NBMA configured neighbour */
84: struct ospf_nbr_nbma *nbr_nbma;
85:
86: /* Statistics */
87: struct timeval ts_last_progress; /* last advance of NSM */
88: struct timeval ts_last_regress; /* last regressive NSM change */
89: const char *last_regress_str; /* Event which last regressed NSM */
90: u_int32_t state_change; /* NSM state change counter */
91: };
92:
93: /* Macros. */
94: #define NBR_IS_DR(n) IPV4_ADDR_SAME (&n->address.u.prefix4, &n->d_router)
95: #define NBR_IS_BDR(n) IPV4_ADDR_SAME (&n->address.u.prefix4, &n->bd_router)
96:
97: /* Prototypes. */
98: extern struct ospf_neighbor *ospf_nbr_new (struct ospf_interface *);
99: extern void ospf_nbr_free (struct ospf_neighbor *);
100: extern void ospf_nbr_delete (struct ospf_neighbor *);
101: extern int ospf_nbr_bidirectional (struct in_addr *, struct in_addr *, int);
102: extern void ospf_nbr_self_reset (struct ospf_interface *);
103: extern void ospf_nbr_add_self (struct ospf_interface *);
104: extern int ospf_nbr_count (struct ospf_interface *, int);
105: extern int ospf_nbr_count_opaque_capable (struct ospf_interface *);
106: extern struct ospf_neighbor *ospf_nbr_get (struct ospf_interface *,
107: struct ospf_header *,
108: struct ip *, struct prefix *);
109: extern struct ospf_neighbor *ospf_nbr_lookup (struct ospf_interface *,
110: struct ip *,
111: struct ospf_header *);
112: extern struct ospf_neighbor *ospf_nbr_lookup_by_addr (struct route_table *,
113: struct in_addr *);
114: extern struct ospf_neighbor *ospf_nbr_lookup_by_routerid (struct route_table
115: *,
116: struct in_addr *);
117: extern void ospf_renegotiate_optional_capabilities (struct ospf *top);
118:
119: #endif /* _ZEBRA_OSPF_NEIGHBOR_H */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>