summaryrefslogtreecommitdiffstats
path: root/ospf6d/ospf6_interface.h
diff options
context:
space:
mode:
Diffstat (limited to 'ospf6d/ospf6_interface.h')
-rw-r--r--ospf6d/ospf6_interface.h252
1 files changed, 252 insertions, 0 deletions
diff --git a/ospf6d/ospf6_interface.h b/ospf6d/ospf6_interface.h
new file mode 100644
index 0000000..9a57a7f
--- /dev/null
+++ b/ospf6d/ospf6_interface.h
@@ -0,0 +1,252 @@
+/*
+ * Copyright (C) 2003 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 this program; see the file COPYING; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifndef OSPF6_INTERFACE_H
+#define OSPF6_INTERFACE_H
+
+#include "qobj.h"
+#include "hook.h"
+#include "if.h"
+#include "ospf6d.h"
+
+DECLARE_MTYPE(OSPF6_AUTH_MANUAL_KEY);
+
+/* Debug option */
+extern unsigned char conf_debug_ospf6_interface;
+#define OSPF6_DEBUG_INTERFACE_ON() (conf_debug_ospf6_interface = 1)
+#define OSPF6_DEBUG_INTERFACE_OFF() (conf_debug_ospf6_interface = 0)
+#define IS_OSPF6_DEBUG_INTERFACE (conf_debug_ospf6_interface)
+
+struct ospf6_auth_data {
+ /* config data */
+ uint8_t hash_algo; /* hash algorithm type */
+ uint16_t key_id; /* key-id used as SA in auth packet */
+ char *auth_key; /* Auth key */
+ char *keychain; /* keychain name */
+
+ /* operational data */
+ uint8_t flags; /* Flags related to auth config */
+
+ /* Counters and Statistics */
+ uint32_t tx_drop; /* Pkt drop due to auth fail while sending */
+ uint32_t rx_drop; /* Pkt drop due to auth fail while reading */
+};
+
+/* Interface structure */
+struct ospf6_interface {
+ /* IF info from zebra */
+ struct interface *interface;
+
+ /* back pointer */
+ struct ospf6_area *area;
+
+ uint32_t area_id;
+ int area_id_format;
+
+ /* list of ospf6 neighbor */
+ struct list *neighbor_list;
+
+ /* linklocal address of this I/F */
+ struct in6_addr *linklocal_addr;
+
+ /* Interface ID; use interface->ifindex */
+
+ /* ospf6 instance id */
+ uint8_t instance_id;
+
+ /* I/F transmission delay */
+ uint32_t transdelay;
+
+ /* Packet send buffer. */
+ struct ospf6_fifo *obuf; /* Output queue */
+
+ /* Network Type */
+ uint8_t type;
+ bool type_cfg;
+
+ /* Router Priority */
+ uint8_t priority;
+
+ /* Time Interval */
+ uint16_t hello_interval;
+ uint16_t dead_interval;
+ uint32_t rxmt_interval;
+
+ uint32_t state_change;
+
+ /* Cost */
+ uint32_t cost;
+
+ /* I/F MTU */
+ uint32_t ifmtu;
+
+ /* Configured MTU */
+ uint32_t c_ifmtu;
+
+ /* Interface State */
+ uint8_t state;
+
+ /* Interface socket setting trial counter, resets on success */
+ uint8_t sso_try_cnt;
+ struct thread *thread_sso;
+
+ /* OSPF6 Interface flag */
+ char flag;
+
+ /* MTU mismatch check */
+ uint8_t mtu_ignore;
+
+ /* Authentication trailer related config */
+ struct ospf6_auth_data at_data;
+
+ /* Decision of DR Election */
+ in_addr_t drouter;
+ in_addr_t bdrouter;
+ in_addr_t prev_drouter;
+ in_addr_t prev_bdrouter;
+
+ /* Linklocal LSA Database: includes Link-LSA */
+ struct ospf6_lsdb *lsdb;
+ struct ospf6_lsdb *lsdb_self;
+
+ struct ospf6_lsdb *lsupdate_list;
+ struct ospf6_lsdb *lsack_list;
+
+ /* Ongoing Tasks */
+ struct thread *thread_send_hello;
+ struct thread *thread_send_lsupdate;
+ struct thread *thread_send_lsack;
+
+ struct thread *thread_network_lsa;
+ struct thread *thread_link_lsa;
+ struct thread *thread_intra_prefix_lsa;
+ struct thread *thread_as_extern_lsa;
+ struct thread *thread_wait_timer;
+
+ struct ospf6_route_table *route_connected;
+
+ /* last hello sent */
+ struct timeval last_hello;
+
+ /* prefix-list name to filter connected prefix */
+ char *plist_name;
+
+ /* BFD information */
+ struct {
+ bool enabled;
+ uint8_t detection_multiplier;
+ uint32_t min_rx;
+ uint32_t min_tx;
+ char *profile;
+ } bfd_config;
+
+ int on_write_q;
+
+ /* Statistics Fields */
+ uint32_t hello_in;
+ uint32_t hello_out;
+ uint32_t db_desc_in;
+ uint32_t db_desc_out;
+ uint32_t ls_req_in;
+ uint32_t ls_req_out;
+ uint32_t ls_upd_in;
+ uint32_t ls_upd_out;
+ uint32_t ls_ack_in;
+ uint32_t ls_ack_out;
+ uint32_t discarded;
+
+ QOBJ_FIELDS;
+};
+DECLARE_QOBJ_TYPE(ospf6_interface);
+
+/* interface state */
+#define OSPF6_INTERFACE_NONE 0
+#define OSPF6_INTERFACE_DOWN 1
+#define OSPF6_INTERFACE_LOOPBACK 2
+#define OSPF6_INTERFACE_WAITING 3
+#define OSPF6_INTERFACE_POINTTOPOINT 4
+#define OSPF6_INTERFACE_DROTHER 5
+#define OSPF6_INTERFACE_BDR 6
+#define OSPF6_INTERFACE_DR 7
+#define OSPF6_INTERFACE_MAX 8
+
+extern const char *const ospf6_interface_state_str[];
+
+/* flags */
+#define OSPF6_INTERFACE_DISABLE 0x01
+#define OSPF6_INTERFACE_PASSIVE 0x02
+#define OSPF6_INTERFACE_NOAUTOCOST 0x04
+
+/* default values */
+#define OSPF6_INTERFACE_HELLO_INTERVAL 10
+#define OSPF6_INTERFACE_DEAD_INTERVAL 40
+#define OSPF6_INTERFACE_RXMT_INTERVAL 5
+#define OSPF6_INTERFACE_COST 1
+#define OSPF6_INTERFACE_PRIORITY 1
+#define OSPF6_INTERFACE_TRANSDELAY 1
+#define OSPF6_INTERFACE_INSTANCE_ID 0
+#define OSPF6_INTERFACE_BANDWIDTH 10000 /* Mbps */
+#define OSPF6_REFERENCE_BANDWIDTH 100000 /* Mbps */
+#define OSPF6_INTERFACE_SSO_RETRY_INT 1
+#define OSPF6_INTERFACE_SSO_RETRY_MAX 5
+
+/* Function Prototypes */
+
+extern void ospf6_interface_start(struct ospf6_interface *oi);
+extern void ospf6_interface_stop(struct ospf6_interface *oi);
+
+extern struct ospf6_interface *
+ospf6_interface_lookup_by_ifindex(ifindex_t, vrf_id_t vrf_id);
+extern struct ospf6_interface *ospf6_interface_create(struct interface *ifp);
+extern void ospf6_interface_delete(struct ospf6_interface *oi);
+
+extern void ospf6_interface_enable(struct ospf6_interface *oi);
+extern void ospf6_interface_disable(struct ospf6_interface *oi);
+
+extern void ospf6_interface_state_update(struct interface *ifp);
+extern void ospf6_interface_connected_route_update(struct interface *ifp);
+extern struct in6_addr *
+ospf6_interface_get_global_address(struct interface *ifp);
+
+/* interface event */
+extern void interface_up(struct thread *thread);
+extern void interface_down(struct thread *thread);
+extern void wait_timer(struct thread *thread);
+extern void backup_seen(struct thread *thread);
+extern void neighbor_change(struct thread *thread);
+
+extern void ospf6_interface_init(void);
+extern void ospf6_interface_clear(struct interface *ifp);
+
+extern void install_element_ospf6_clear_interface(void);
+
+extern int config_write_ospf6_debug_interface(struct vty *vty);
+extern void install_element_ospf6_debug_interface(void);
+extern int ospf6_interface_neighbor_count(struct ospf6_interface *oi);
+extern uint8_t dr_election(struct ospf6_interface *oi);
+
+extern void ospf6_interface_auth_trailer_cmd_init(void);
+extern void ospf6_auth_write_config(struct vty *vty,
+ struct ospf6_auth_data *at_data);
+DECLARE_HOOK(ospf6_interface_change,
+ (struct ospf6_interface * oi, int state, int old_state),
+ (oi, state, old_state));
+
+#endif /* OSPF6_INTERFACE_H */