diff options
| author | Chirag Shah <chirag@cumulusnetworks.com> | 2018-05-17 14:20:25 -0700 | 
|---|---|---|
| committer | Chirag Shah <chirag@cumulusnetworks.com> | 2018-05-21 07:29:21 -0700 | 
| commit | 6f19bb0ee7ca4bf788ef4756a0c81717d06b40bb (patch) | |
| tree | 70f441663f12eb0f3e7f768bc3214fc5d6f4183b /ospf6d/ospf6_abr.h | |
| parent | ba6ccc944f91f06ae23eac237d9c88751c612bba (diff) | |
ospf6d: Fix inter area prefix
Inter Area Prefix LSA ECMP is not working properly.
Two ABRs advertising IAP routes to backbone, not installed
with correct cost or if ABR restarted the route is removed
from backbone.
The current implementation ABR was not suppressing IAP update
for prefix cost is not better or route is not installed.
The better cost or path route was overwritten with non optimal
cost. This caused a loop with nexthops pointing each other
at backbone and non-backbone routers.
Consider to only send BEST/installed route's IAP notification
at ABRs.
When receiving IAP update from multiple ABRs, preserve multiple
advertising routers under the prefix route node.
Upon LSA maxage only remove the advertising route's which is
impacted and update route's nexthops and update FIB.
Testing Done:
Top to Bottom is part of area 0 on the Right, and
from Left side in area 1.
Top and Bottom act as ABRs.
H1 route is sent as Inter-Area Prefix to Right.
Trigger multiple triggers for ABR routes.
1) Shutting down link between, top to right to eliminate nhs
2) Restart frr at Top.
3) Restart frr at Right.
                                     +-----------+
                                     .           |
                                   ,'|   Top     |`.
                                  /  .           |  \
                                ,' ,'+.----------+`. `.
                               /  /  `          `.  \  ',
                             ,' ,' ,'             \  `.  .
                            -  /  `                `.  ', `,
                          ,` ,` ,'                   \   \  \
                         '  -  `                      `.  `, `,
       +--------+    +--`--`--`--+                  +---'---'--'+    +--------+
       |        |    |           |                  |           |    |        |
       |    H1  ------  Left     |                  |   Right   ------   H2   |
       |        |    |           |                  |           |    |        |
       +--------+    +-----------+                  +----.--,-,-+    +--------+
                        `.  `   \                       -  / /
                          \  `.  `                    ,' .` `
                           '   .  \                  /  /  '
                            `.  \  `.               `  / ,'
                              \  `   .            ,`  / /
                               `. `.  .          /   / /
                                 \  .  \       ,'   ' /
                                  '  '--'--------+,'.`
                                   `.|           - /
                                     '  mid1     |/
                                     |           -
                                     +-----------+
Signed-off-by: Chirag Shah <chirag@cumulusnetworks.com>
Diffstat (limited to 'ospf6d/ospf6_abr.h')
| -rw-r--r-- | ospf6d/ospf6_abr.h | 7 | 
1 files changed, 6 insertions, 1 deletions
diff --git a/ospf6d/ospf6_abr.h b/ospf6d/ospf6_abr.h index abc383463f..e40d155037 100644 --- a/ospf6d/ospf6_abr.h +++ b/ospf6d/ospf6_abr.h @@ -76,7 +76,12 @@ extern void ospf6_abr_prefix_resummarize(struct ospf6 *ospf6);  extern int config_write_ospf6_debug_abr(struct vty *vty);  extern void install_element_ospf6_debug_abr(void);  extern int ospf6_abr_config_write(struct vty *vty); - +extern void ospf6_abr_old_route_remove(struct ospf6_lsa *lsa, +				       struct ospf6_route *old, +				       struct ospf6_route_table *table); +extern void ospf6_abr_old_path_update(struct ospf6_route *old_route, +				      struct ospf6_route *route, +				      struct ospf6_route_table *table);  extern void ospf6_abr_init(void);  #endif /*OSPF6_ABR_H*/  | 
