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 */ 29struct 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. */ 98extern struct ospf_neighbor *ospf_nbr_new (struct ospf_interface *); 99extern void ospf_nbr_free (struct ospf_neighbor *); 100extern void ospf_nbr_delete (struct ospf_neighbor *); 101extern int ospf_nbr_bidirectional (struct in_addr *, struct in_addr *, int); 102extern void ospf_nbr_add_self (struct ospf_interface *); 103extern int ospf_nbr_count (struct ospf_interface *, int); 104#ifdef HAVE_OPAQUE_LSA 105extern int ospf_nbr_count_opaque_capable (struct ospf_interface *); 106#endif /* HAVE_OPAQUE_LSA */ 107extern struct ospf_neighbor *ospf_nbr_get (struct ospf_interface *, 108 struct ospf_header *, 109 struct ip *, struct prefix *); 110extern struct ospf_neighbor *ospf_nbr_lookup (struct ospf_interface *, 111 struct ip *, 112 struct ospf_header *); 113extern struct ospf_neighbor *ospf_nbr_lookup_by_addr (struct route_table *, 114 struct in_addr *); 115extern struct ospf_neighbor *ospf_nbr_lookup_by_routerid (struct route_table 116 *, 117 struct in_addr *); 118extern void ospf_renegotiate_optional_capabilities (struct ospf *top); 119 120#endif /* _ZEBRA_OSPF_NEIGHBOR_H */ 121