File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / quagga / ospfd / ospf_neighbor.h
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 17:26:12 2012 UTC (12 years, 4 months ago) by misho
Branches: quagga, MAIN
CVS tags: v0_99_22p0, v0_99_22, v0_99_21, v0_99_20_1, v0_99_20, HEAD
quagga

    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_add_self (struct ospf_interface *);
  103: extern int ospf_nbr_count (struct ospf_interface *, int);
  104: #ifdef HAVE_OPAQUE_LSA
  105: extern int ospf_nbr_count_opaque_capable (struct ospf_interface *);
  106: #endif /* HAVE_OPAQUE_LSA */
  107: extern struct ospf_neighbor *ospf_nbr_get (struct ospf_interface *,
  108: 					   struct ospf_header *,
  109: 					   struct ip *, struct prefix *);
  110: extern struct ospf_neighbor *ospf_nbr_lookup (struct ospf_interface *,
  111: 					      struct ip *,
  112: 					      struct ospf_header *);
  113: extern struct ospf_neighbor *ospf_nbr_lookup_by_addr (struct route_table *,
  114: 						      struct in_addr *);
  115: extern struct ospf_neighbor *ospf_nbr_lookup_by_routerid (struct route_table
  116: 							  *,
  117: 							  struct in_addr *);
  118: extern void ospf_renegotiate_optional_capabilities (struct ospf *top);
  119: 
  120: #endif /* _ZEBRA_OSPF_NEIGHBOR_H */

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