mirror of
https://gitlab.labs.nic.cz/labs/bird.git
synced 2024-05-11 16:54:54 +00:00
OSPF NSSA support, inter-area LSA translation.
This commit is contained in:
@@ -35,6 +35,9 @@ typedef struct orta
|
||||
* intra-area (type == RTS_OSPF) and its area is not a backbone.
|
||||
*/
|
||||
#define ORTA_PREF 0x80000000
|
||||
#define ORTA_NSSA 0x40000000
|
||||
#define ORTA_PROP 0x20000000
|
||||
|
||||
u32 metric1;
|
||||
u32 metric2;
|
||||
u32 tag;
|
||||
@@ -43,13 +46,10 @@ typedef struct orta
|
||||
struct ospf_area *voa; /* Used when route is replaced in ospf_rt_sum_tr(),
|
||||
NULL otherwise */
|
||||
struct mpnh *nhs; /* Next hops computed during SPF */
|
||||
struct top_hash_entry *en; /* LSA responsible for this orta */
|
||||
}
|
||||
orta;
|
||||
|
||||
// struct ospf_iface *ifa; /* Outgoing interface */
|
||||
// ip_addr nh; /* Next hop */
|
||||
|
||||
|
||||
typedef struct ort
|
||||
{
|
||||
/*
|
||||
@@ -57,6 +57,10 @@ typedef struct ort
|
||||
* LSAs that don't have 'proper' rt entry (area networks + default to stubs)
|
||||
* to keep uid stable (used for LSA ID in OSPFv3 - see fibnode_to_lsaid()).
|
||||
*
|
||||
* We use fn.x1 to note whether the external route was originated
|
||||
* from the route export (in ospf_rt_notify()) or from the NSSA
|
||||
* route translation (in check_nssa_lsa()).
|
||||
*
|
||||
* old_* values are here to represent the last route update. old_rta
|
||||
* is cached (we keep reference), mainly for multipath nexthops.
|
||||
* old_rta == NULL means route wasn not in the last update, in that
|
||||
@@ -69,6 +73,13 @@ typedef struct ort
|
||||
}
|
||||
ort;
|
||||
|
||||
static inline int rt_is_nssa(ort *nf)
|
||||
{ return nf->n.options & ORTA_NSSA; }
|
||||
|
||||
|
||||
#define EXT_EXPORT 1
|
||||
#define EXT_NSSA 2
|
||||
|
||||
/*
|
||||
* Invariants for structs top_hash_entry (nodes of LSA db)
|
||||
* enforced by SPF calculation for final nodes (color == INSPF):
|
||||
|
Reference in New Issue
Block a user