summaryrefslogtreecommitdiff
path: root/ospfd/ospf_interface.h
diff options
context:
space:
mode:
Diffstat (limited to 'ospfd/ospf_interface.h')
-rw-r--r--ospfd/ospf_interface.h42
1 files changed, 40 insertions, 2 deletions
diff --git a/ospfd/ospf_interface.h b/ospfd/ospf_interface.h
index 649df437a4..721ab1a9d7 100644
--- a/ospfd/ospf_interface.h
+++ b/ospfd/ospf_interface.h
@@ -10,6 +10,7 @@
#include "lib/bfd.h"
#include "qobj.h"
#include "hook.h"
+#include "keychain.h"
#include "ospfd/ospf_packet.h"
#include "ospfd/ospf_spf.h"
@@ -72,12 +73,18 @@ struct ospf_if_params {
DECLARE_IF_PARAM(uint32_t, v_wait); /* Router Dead Interval */
bool is_v_wait_set; /* Check for Dead Interval set */
+ /* GR Hello Delay Interval */
+ DECLARE_IF_PARAM(uint16_t, v_gr_hello_delay);
+
/* MTU mismatch check (see RFC2328, chap 10.6) */
DECLARE_IF_PARAM(uint8_t, mtu_ignore);
/* Fast-Hellos */
DECLARE_IF_PARAM(uint8_t, fast_hello);
+ /* Prefix-Suppression */
+ DECLARE_IF_PARAM(bool, prefix_suppression);
+
/* Authentication data. */
uint8_t auth_simple[OSPF_AUTH_SIMPLE_SIZE + 1]; /* Simple password. */
uint8_t auth_simple__config : 1;
@@ -86,6 +93,8 @@ struct ospf_if_params {
auth_crypt); /* List of Auth cryptographic data. */
DECLARE_IF_PARAM(int, auth_type); /* OSPF authentication type */
+ DECLARE_IF_PARAM(char*, keychain_name); /* OSPF HMAC Cryptographic Authentication*/
+
/* Other, non-configuration state */
uint32_t network_lsa_seqnum; /* Network LSA seqnum */
@@ -106,6 +115,15 @@ struct ospf_if_params {
/* point-to-point DMVPN configuration */
uint8_t ptp_dmvpn;
+
+ /* point-to-multipoint delayed reflooding configuration */
+ bool p2mp_delay_reflood;
+
+ /* point-to-multipoint doesn't support broadcast */
+ bool p2mp_non_broadcast;
+
+ /* Opaque LSA capability at interface level (see RFC5250) */
+ DECLARE_IF_PARAM(bool, opaque_capable);
};
enum { MEMBER_ALLROUTERS = 0,
@@ -170,10 +188,20 @@ struct ospf_interface {
/* OSPF Network Type. */
uint8_t type;
+#define OSPF_IF_NON_BROADCAST(O) \
+ (((O)->type == OSPF_IFTYPE_NBMA) || \
+ ((((O)->type == OSPF_IFTYPE_POINTOMULTIPOINT) && \
+ (O)->p2mp_non_broadcast)))
/* point-to-point DMVPN configuration */
uint8_t ptp_dmvpn;
+ /* point-to-multipoint delayed reflooding */
+ bool p2mp_delay_reflood;
+
+ /* point-to-multipoint doesn't support broadcast */
+ bool p2mp_non_broadcast;
+
/* State of Interface State Machine. */
uint8_t state;
@@ -214,6 +242,14 @@ struct ospf_interface {
/* List of configured NBMA neighbor. */
struct list *nbr_nbma;
+ /* Graceful-Restart data. */
+ struct {
+ struct {
+ uint16_t elapsed_seconds;
+ struct event *t_grace_send;
+ } hello_delay;
+ } gr;
+
/* self-originated LSAs. */
struct ospf_lsa *network_lsa_self; /* network-LSA. */
struct list *opaque_lsa_self; /* Type-9 Opaque-LSAs */
@@ -256,6 +292,10 @@ struct ospf_interface {
uint32_t full_nbrs;
+ /* Buffered values for keychain and key */
+ struct keychain *keychain;
+ struct key *key;
+
QOBJ_FIELDS;
};
DECLARE_QOBJ_TYPE(ospf_interface);
@@ -270,7 +310,6 @@ extern int ospf_if_up(struct ospf_interface *oi);
extern int ospf_if_down(struct ospf_interface *oi);
extern int ospf_if_is_up(struct ospf_interface *oi);
-extern struct ospf_interface *ospf_if_exists(struct ospf_interface *oi);
extern struct ospf_interface *ospf_if_lookup_by_lsa_pos(struct ospf_area *area,
int lsa_pos);
extern struct ospf_interface *
@@ -297,7 +336,6 @@ extern void ospf_if_update_params(struct interface *ifp, struct in_addr addr);
extern int ospf_if_new_hook(struct interface *ifp);
extern void ospf_if_init(void);
extern void ospf_if_stream_unset(struct ospf_interface *oi);
-extern void ospf_if_reset_variables(struct ospf_interface *oi);
extern int ospf_if_is_enable(struct ospf_interface *oi);
extern int ospf_if_get_output_cost(struct ospf_interface *oi);
extern void ospf_if_recalculate_output_cost(struct interface *ifp);