diff options
Diffstat (limited to 'ospf6d/ospf6_interface.h')
-rw-r--r-- | ospf6d/ospf6_interface.h | 153 |
1 files changed, 153 insertions, 0 deletions
diff --git a/ospf6d/ospf6_interface.h b/ospf6d/ospf6_interface.h new file mode 100644 index 00000000..a96ef25a --- /dev/null +++ b/ospf6d/ospf6_interface.h @@ -0,0 +1,153 @@ +/* + * Copyright (C) 1999 Yasuhiro Ohara + * + * This file is part of GNU Zebra. + * + * GNU Zebra is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2, or (at your option) any + * later version. + * + * GNU Zebra is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Zebra; see the file COPYING. If not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifndef OSPF6_INTERFACE_H +#define OSPF6_INTERFACE_H + +#include "ospf6_message.h" + +/* This file defines interface data structure. */ + +struct ospf6_interface +{ + /* IF info from zebra */ + struct interface *interface; + + /* back pointer */ + struct ospf6_area *area; + + /* list of ospf6 neighbor */ + list neighbor_list; + + /* linklocal address of this I/F */ + struct in6_addr *lladdr; + + /* Interface ID; same as ifindex */ + u_int32_t if_id; + + /* ospf6 instance id */ + u_char instance_id; + + /* I/F transmission delay */ + u_int32_t transdelay; + + /* Router Priority */ + u_char priority; + + /* Timers */ + u_int16_t hello_interval; + u_int16_t dead_interval; + u_int32_t rxmt_interval; + + /* Cost */ + u_int32_t cost; + + /* I/F MTU */ + u_int32_t ifmtu; + + /* Interface State */ + u_char state; + + /* OSPF6 Interface flag */ + char flag; + + /* Decision of DR Election */ + u_int32_t dr; + u_int32_t bdr; + u_int32_t prevdr; + u_int32_t prevbdr; + + /* Ongoing Tasks */ + struct thread *thread_send_hello; + struct thread *thread_send_lsack_delayed; + + /* LSAs to Delayed Acknowledge */ + struct ospf6_lsdb *ack_list; + + /* Linklocal LSA Database: includes Link-LSA */ + struct ospf6_lsdb *lsdb; + + /* statistics */ + u_int ospf6_stat_dr_election; + u_int ospf6_stat_delayed_lsack; + + struct ospf6_message_stat message_stat[OSPF6_MESSAGE_TYPE_MAX]; + + void (*foreach_nei) (struct ospf6_interface *, void *, int, + void (*func) (void *, int, void *)); + + struct thread *maxage_remover; + + /* route-map to filter connected prefix */ + char *plist_name; +}; + +extern char *ospf6_interface_state_string[]; + +#define OSPF6_INTERFACE_FLAG_PASSIVE 0x01 +#define OSPF6_INTERFACE_FLAG_FORCE_PREFIX 0x02 + + +/* Function Prototypes */ + +void +ospf6_interface_schedule_maxage_remover (void *arg, int val, void *obj); + +struct ospf6_interface * +ospf6_interface_create (struct interface *); +void +ospf6_interface_delete (struct ospf6_interface *); + +struct ospf6_interface * +ospf6_interface_lookup_by_index (int); +struct ospf6_interface * +ospf6_interface_lookup_by_name (char *); + +void ospf6_interface_if_add (struct interface *); +void ospf6_interface_if_del (struct interface *); +void ospf6_interface_state_update (struct interface *); +void ospf6_interface_address_update (struct interface *); + +void ospf6_interface_init (); + +#if 0 +int +ospf6_interface_count_neighbor_in_state (u_char state, + struct ospf6_interface *o6i); +int +ospf6_interface_count_full_neighbor (struct ospf6_interface *); +#endif + +int ospf6_interface_is_enabled (u_int32_t ifindex); + +void +ospf6_interface_delayed_ack_add (struct ospf6_lsa *lsa, + struct ospf6_interface *o6i); +void +ospf6_interface_delayed_ack_remove (struct ospf6_lsa *lsa, + struct ospf6_interface *o6i); + +void +ospf6_interface_statistics_show (struct vty *vty, + struct ospf6_interface *o6i); + +#endif /* OSPF6_INTERFACE_H */ + |