1/* 2 * Copyright (C) 2003 Yasuhiro Ohara 3 * 4 * This file is part of GNU Zebra. 5 * 6 * GNU Zebra is free software; you can redistribute it and/or modify it 7 * under the terms of the GNU General Public License as published by the 8 * Free Software Foundation; either version 2, or (at your option) any 9 * later version. 10 * 11 * GNU Zebra is distributed in the hope that it will be useful, but 12 * WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * General Public License for more details. 15 * 16 * You should have received a copy of the GNU General Public License 17 * along with GNU Zebra; see the file COPYING. If not, write to the 18 * Free Software Foundation, Inc., 59 Temple Place - Suite 330, 19 * Boston, MA 02111-1307, USA. 20 */ 21 22#ifndef OSPF6_INTERFACE_H 23#define OSPF6_INTERFACE_H 24 25#include "if.h" 26 27/* Debug option */ 28extern unsigned char conf_debug_ospf6_interface; 29#define OSPF6_DEBUG_INTERFACE_ON() \ 30 (conf_debug_ospf6_interface = 1) 31#define OSPF6_DEBUG_INTERFACE_OFF() \ 32 (conf_debug_ospf6_interface = 0) 33#define IS_OSPF6_DEBUG_INTERFACE \ 34 (conf_debug_ospf6_interface) 35 36/* Interface structure */ 37struct ospf6_interface 38{ 39 /* IF info from zebra */ 40 struct interface *interface; 41 42 /* back pointer */ 43 struct ospf6_area *area; 44 45 /* list of ospf6 neighbor */ 46 struct list *neighbor_list; 47 48 /* linklocal address of this I/F */ 49 struct in6_addr *linklocal_addr; 50 51 /* Interface ID; use interface->ifindex */ 52 53 /* ospf6 instance id */ 54 u_char instance_id; 55 56 /* I/F transmission delay */ 57 u_int32_t transdelay; 58 59 /* Network Type */ 60 u_char type; 61 62 /* Router Priority */ 63 u_char priority; 64 65 /* Time Interval */ 66 u_int16_t hello_interval; 67 u_int16_t dead_interval; 68 u_int32_t rxmt_interval; 69 70 u_int32_t state_change; 71 72 /* Cost */ 73 u_int32_t cost; 74 75 /* I/F MTU */ 76 u_int32_t ifmtu; 77 78 /* Interface State */ 79 u_char state; 80 81 /* OSPF6 Interface flag */ 82 char flag; 83 84 /* MTU mismatch check */ 85 u_char mtu_ignore; 86 87 /* Decision of DR Election */ 88 u_int32_t drouter; 89 u_int32_t bdrouter; 90 u_int32_t prev_drouter; 91 u_int32_t prev_bdrouter; 92 93 /* Linklocal LSA Database: includes Link-LSA */ 94 struct ospf6_lsdb *lsdb; 95 struct ospf6_lsdb *lsdb_self; 96 97 struct ospf6_lsdb *lsupdate_list; 98 struct ospf6_lsdb *lsack_list; 99 100 /* Ongoing Tasks */ 101 struct thread *thread_send_hello; 102 struct thread *thread_send_lsupdate; 103 struct thread *thread_send_lsack; 104 105 struct thread *thread_network_lsa; 106 struct thread *thread_link_lsa; 107 struct thread *thread_intra_prefix_lsa; 108 109 struct ospf6_route_table *route_connected; 110 111 /* prefix-list name to filter connected prefix */ 112 char *plist_name; 113}; 114 115/* interface state */ 116#define OSPF6_INTERFACE_NONE 0 117#define OSPF6_INTERFACE_DOWN 1 118#define OSPF6_INTERFACE_LOOPBACK 2 119#define OSPF6_INTERFACE_WAITING 3 120#define OSPF6_INTERFACE_POINTTOPOINT 4 121#define OSPF6_INTERFACE_DROTHER 5 122#define OSPF6_INTERFACE_BDR 6 123#define OSPF6_INTERFACE_DR 7 124#define OSPF6_INTERFACE_MAX 8 125 126extern const char *ospf6_interface_state_str[]; 127 128/* flags */ 129#define OSPF6_INTERFACE_DISABLE 0x01 130#define OSPF6_INTERFACE_PASSIVE 0x02 131#define OSPF6_INTERFACE_NOAUTOCOST 0x04 132 133/* default values */ 134#define OSPF6_INTERFACE_HELLO_INTERVAL 10 135#define OSPF6_INTERFACE_DEAD_INTERVAL 40 136#define OSPF6_INTERFACE_RXMT_INTERVAL 5 137#define OSPF6_INTERFACE_COST 1 138#define OSPF6_INTERFACE_PRIORITY 1 139#define OSPF6_INTERFACE_TRANSDELAY 1 140#define OSPF6_INTERFACE_INSTANCE_ID 0 141#define OSPF6_INTERFACE_BANDWIDTH 10000 /* Kbps */ 142#define OSPF6_REFERENCE_BANDWIDTH 100000 /* Kbps */ 143 144 145 146/* Function Prototypes */ 147 148extern struct ospf6_interface *ospf6_interface_lookup_by_ifindex (int); 149extern struct ospf6_interface *ospf6_interface_create (struct interface *); 150extern void ospf6_interface_delete (struct ospf6_interface *); 151 152extern void ospf6_interface_enable (struct ospf6_interface *); 153extern void ospf6_interface_disable (struct ospf6_interface *); 154 155extern void ospf6_interface_if_add (struct interface *); 156extern void ospf6_interface_if_del (struct interface *); 157extern void ospf6_interface_state_update (struct interface *); 158extern void ospf6_interface_connected_route_update (struct interface *); 159 160/* interface event */ 161extern int interface_up (struct thread *); 162extern int interface_down (struct thread *); 163extern int wait_timer (struct thread *); 164extern int backup_seen (struct thread *); 165extern int neighbor_change (struct thread *); 166 167extern void ospf6_interface_init (void); 168 169extern int config_write_ospf6_debug_interface (struct vty *vty); 170extern void install_element_ospf6_debug_interface (void); 171 172#endif /* OSPF6_INTERFACE_H */ 173