summaryrefslogtreecommitdiff
path: root/proto/ospf/ospf.h
diff options
context:
space:
mode:
Diffstat (limited to 'proto/ospf/ospf.h')
-rw-r--r--proto/ospf/ospf.h88
1 files changed, 66 insertions, 22 deletions
diff --git a/proto/ospf/ospf.h b/proto/ospf/ospf.h
index ff55621a..22b87ebe 100644
--- a/proto/ospf/ospf.h
+++ b/proto/ospf/ospf.h
@@ -223,6 +223,7 @@ struct ospf_proto
u8 rfc1583; /* RFC1583 compatibility */
u8 stub_router; /* Do not forward transit traffic */
u8 merge_external; /* Should i merge external routes? */
+ u8 instance_id; /* Differentiate between more OSPF instances */
u8 asbr; /* May i originate any ext/NSSA lsa? */
u8 ecmp; /* Maximal number of nexthops in ECMP route, or 0 */
u64 csn64; /* Last used cryptographic sequence number */
@@ -466,6 +467,7 @@ struct ospf_neighbor
#define OPT_L_V2 0x0010 /* OSPFv2, link-local signaling, not used */
#define OPT_R 0x0010 /* OSPFv3, originator is active router */
#define OPT_DC 0x0020 /* Related to demand circuits, not used */
+#define OPT_O 0x0040 /* OSPFv2 Opaque LSA (RFC 5250) */
#define OPT_AF 0x0100 /* OSPFv3 Address Families (RFC 5838) */
#define OPT_L_V3 0x0200 /* OSPFv3, link-local signaling */
#define OPT_AT 0x0400 /* OSPFv3, authentication trailer */
@@ -541,25 +543,44 @@ struct ospf_auth3
#define DBDES_IMMS (DBDES_I | DBDES_M | DBDES_MS)
-#define LSA_T_RT 0x2001
-#define LSA_T_NET 0x2002
-#define LSA_T_SUM_NET 0x2003
-#define LSA_T_SUM_RT 0x2004
-#define LSA_T_EXT 0x4005
-#define LSA_T_NSSA 0x2007
-#define LSA_T_LINK 0x0008
-#define LSA_T_PREFIX 0x2009
-
-#define LSA_T_V2_MASK 0x00ff
-
-#define LSA_UBIT 0x8000
-
-#define LSA_SCOPE_LINK 0x0000
-#define LSA_SCOPE_AREA 0x2000
-#define LSA_SCOPE_AS 0x4000
-#define LSA_SCOPE_RES 0x6000
-#define LSA_SCOPE_MASK 0x6000
-#define LSA_SCOPE(type) ((type) & LSA_SCOPE_MASK)
+/* OSPFv3 LSA Types / LSA Function Codes */
+/* https://www.iana.org/assignments/ospfv3-parameters/ospfv3-parameters.xhtml#ospfv3-parameters-3 */
+#define LSA_T_RT 0x2001
+#define LSA_T_NET 0x2002
+#define LSA_T_SUM_NET 0x2003
+#define LSA_T_SUM_RT 0x2004
+#define LSA_T_EXT 0x4005
+#define LSA_T_NSSA 0x2007
+#define LSA_T_LINK 0x0008
+#define LSA_T_PREFIX 0x2009
+#define LSA_T_RI_ 0x000C
+#define LSA_T_RI_LINK 0x800C
+#define LSA_T_RI_AREA 0xA00C
+#define LSA_T_RI_AS 0xC00C
+#define LSA_T_OPAQUE_ 0x1FFF
+#define LSA_T_OPAQUE_LINK 0x9FFF
+#define LSA_T_OPAQUE_AREA 0xBFFF
+#define LSA_T_OPAQUE_AS 0xDFFF
+
+#define LSA_T_V2_OPAQUE_ 0x0009
+#define LSA_T_V2_MASK 0x00ff
+
+/* OSPFv2 Opaque LSA Types */
+/* https://www.iana.org/assignments/ospf-opaque-types/ospf-opaque-types.xhtml#ospf-opaque-types-2 */
+#define LSA_OT_RI 0x04
+
+#define LSA_FUNCTION_MASK 0x1FFF
+#define LSA_FUNCTION(type) ((type) & LSA_FUNCTION_MASK)
+
+#define LSA_UBIT 0x8000
+
+#define LSA_SCOPE_LINK 0x0000
+#define LSA_SCOPE_AREA 0x2000
+#define LSA_SCOPE_AS 0x4000
+#define LSA_SCOPE_RES 0x6000
+#define LSA_SCOPE_MASK 0x6000
+#define LSA_SCOPE(type) ((type) & LSA_SCOPE_MASK)
+#define LSA_SCOPE_ORDER(type) (((type) >> 13) & 0x3)
#define LSA_MAXAGE 3600 /* 1 hour */
@@ -586,9 +607,20 @@ struct ospf_auth3
#define LSA_EXT2_TOS 0x7F000000
#define LSA_EXT2_EBIT 0x80000000
-#define LSA_EXT3_EBIT 0x4000000
-#define LSA_EXT3_FBIT 0x2000000
-#define LSA_EXT3_TBIT 0x1000000
+#define LSA_EXT3_EBIT 0x04000000
+#define LSA_EXT3_FBIT 0x02000000
+#define LSA_EXT3_TBIT 0x01000000
+
+/* OSPF Router Information (RI) TLVs */
+/* https://www.iana.org/assignments/ospf-parameters/ospf-parameters.xhtml#ri-tlv */
+#define LSA_RI_RIC 1
+#define LSA_RI_RFC 2
+
+/* OSPF Router Informational Capability Bits */
+/* https://www.iana.org/assignments/ospf-parameters/ospf-parameters.xhtml#router-informational-capability */
+#define LSA_RIC_GR_CAPABLE 0
+#define LSA_RIC_GR_HELPER 1
+#define LSA_RIC_STUB_ROUTER 2
struct ospf_lsa_header
@@ -731,6 +763,18 @@ struct ospf_lsa_prefix
u32 rest[];
};
+struct ospf_tlv
+{
+#ifdef CPU_BIG_ENDIAN
+ u16 type;
+ u16 length;
+#else
+ u16 length;
+ u16 type;
+#endif
+ u32 data[];
+};
+
static inline uint
lsa_net_count(struct ospf_lsa_header *lsa)