diff options
| author | Chirag Shah <chirag@cumulusnetworks.com> | 2017-12-06 18:20:48 -0800 | 
|---|---|---|
| committer | Chirag Shah <chirag@cumulusnetworks.com> | 2018-01-02 10:00:38 -0800 | 
| commit | 064d4355ca82c924ec928c67150f243f17f56139 (patch) | |
| tree | 33a399b265a4668270a6a857baf46b226aaaa29d /ospf6d/ospf6_route.h | |
| parent | baa68bca40d93e01d71f0e2723ef4ceddd3f6f97 (diff) | |
ospf6d: Fix External routes ECMP
Handle RFC 2328 16.4 Calculating AS external routes with ECMP
For ASBR route, if it is learnt via new LSA and contains
different nexthop list. First lookup route in ospf6 route table
if it exists, merge nexthop list to existing and call the callback
to install into FIB (zebra). Delete created new route as it is
identical to existing entry in route table.
Ticket:CM-16139
Testing Done:
Run two ASBR with 2 ECMP paths from each
DUT neighbor receievs 4 ECMP path to a external route.
ospf6 installs all 4 ECMP path to FIB/RIB
Signed-off-by: Chirag Shah <chirag@cumulusnetworks.com>
Diffstat (limited to 'ospf6d/ospf6_route.h')
| -rw-r--r-- | ospf6d/ospf6_route.h | 9 | 
1 files changed, 9 insertions, 0 deletions
diff --git a/ospf6d/ospf6_route.h b/ospf6d/ospf6_route.h index 9eacadbdb7..b759828c39 100644 --- a/ospf6d/ospf6_route.h +++ b/ospf6d/ospf6_route.h @@ -96,6 +96,9 @@ struct ospf6_path {  		u_int32_t cost_config;  	} u;  	u_int32_t tag; + +	/* nh list for this path */ +	struct list *nh_list;  };  #define OSPF6_PATH_TYPE_NONE         0 @@ -149,6 +152,9 @@ struct ospf6_route {  	/* path */  	struct ospf6_path path; +	/* List of Paths. */ +	struct list *paths; +  	/* nexthop */  	struct list *nh_list;  }; @@ -256,6 +262,7 @@ extern void ospf6_linkstate_prefix2str(struct prefix *prefix, char *buf,  				       int size);  extern struct ospf6_nexthop *ospf6_nexthop_create(void); +extern int ospf6_nexthop_cmp(struct ospf6_nexthop *a, struct ospf6_nexthop *b);  extern void ospf6_nexthop_delete(struct ospf6_nexthop *nh);  extern void ospf6_clear_nexthops(struct list *nh_list);  extern int ospf6_num_nexthops(struct list *nh_list); @@ -331,5 +338,7 @@ extern int config_write_ospf6_debug_route(struct vty *vty);  extern void install_element_ospf6_debug_route(void);  extern void ospf6_route_init(void);  extern void ospf6_clean(void); +extern void ospf6_path_free(struct ospf6_path *op); +extern struct ospf6_path *ospf6_path_dup(struct ospf6_path *path);  #endif /* OSPF6_ROUTE_H */  | 
