summaryrefslogtreecommitdiffstats
path: root/ospf6d/ospf6_abr.c
diff options
context:
space:
mode:
authorDavid Lamparter <equinox@opensourcerouting.org>2017-08-23 16:54:15 +0200
committerDavid Lamparter <equinox@opensourcerouting.org>2017-08-24 00:18:53 +0200
commit427f8e61bb711b51891dbaee845215ca228951f1 (patch)
treebafe78de9e9f109c2f840eaf4a357511275695aa /ospf6d/ospf6_abr.c
parentlib: fix cosmetic issue with exit race (diff)
downloadfrr-427f8e61bb711b51891dbaee845215ca228951f1.tar.xz
frr-427f8e61bb711b51891dbaee845215ca228951f1.zip
ospf6d: properly update prefix list references
Register add/delete hooks with the prefix list code to properly change ospf6_area's prefix list in/out pointers. There are 2 other uncached uses of prefix lists in the ASBR route-map code and the interface code; these should probably be cached too. (To be fixed another day...) Fixes: #453 Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
Diffstat (limited to 'ospf6d/ospf6_abr.c')
-rw-r--r--ospf6d/ospf6_abr.c59
1 files changed, 23 insertions, 36 deletions
diff --git a/ospf6d/ospf6_abr.c b/ospf6d/ospf6_abr.c
index f198ac4af..36528d063 100644
--- a/ospf6d/ospf6_abr.c
+++ b/ospf6d/ospf6_abr.c
@@ -386,27 +386,20 @@ int ospf6_abr_originate_summary_to_area(struct ospf6_route *route,
}
/* Check filter-list */
- if (PREFIX_NAME_OUT(area)) {
- if (PREFIX_LIST_OUT(area) == NULL)
- PREFIX_LIST_OUT(area) = prefix_list_lookup(
- AFI_IP6, PREFIX_NAME_OUT(area));
-
- if (PREFIX_LIST_OUT(area))
- if (prefix_list_apply(PREFIX_LIST_OUT(area),
- &route->prefix)
- != PREFIX_PERMIT) {
- if (is_debug) {
- inet_ntop(AF_INET,
- &(ADV_ROUTER_IN_PREFIX(
- &route->prefix)),
- buf, sizeof(buf));
- zlog_debug(
- "prefix %s was denied by filter-list out",
- buf);
- }
- return 0;
+ if (PREFIX_LIST_OUT(area))
+ if (prefix_list_apply(PREFIX_LIST_OUT(area), &route->prefix)
+ != PREFIX_PERMIT) {
+ if (is_debug) {
+ inet_ntop(AF_INET,
+ &(ADV_ROUTER_IN_PREFIX(
+ &route->prefix)),
+ buf, sizeof(buf));
+ zlog_debug(
+ "prefix %s was denied by filter-list out",
+ buf);
}
- }
+ return 0;
+ }
/* the route is going to be originated. store it in area's summary_table
*/
@@ -873,22 +866,16 @@ void ospf6_abr_examin_summary(struct ospf6_lsa *lsa, struct ospf6_area *oa)
}
/* Check input prefix-list */
- if (PREFIX_NAME_IN(oa)) {
- if (PREFIX_LIST_IN(oa) == NULL)
- PREFIX_LIST_IN(oa) =
- prefix_list_lookup(AFI_IP6, PREFIX_NAME_IN(oa));
-
- if (PREFIX_LIST_IN(oa))
- if (prefix_list_apply(PREFIX_LIST_IN(oa), &prefix)
- != PREFIX_PERMIT) {
- if (is_debug)
- zlog_debug(
- "Prefix was denied by prefix-list");
- if (old)
- ospf6_route_remove(old, table);
- return;
- }
- }
+ if (PREFIX_LIST_IN(oa))
+ if (prefix_list_apply(PREFIX_LIST_IN(oa), &prefix)
+ != PREFIX_PERMIT) {
+ if (is_debug)
+ zlog_debug(
+ "Prefix was denied by prefix-list");
+ if (old)
+ ospf6_route_remove(old, table);
+ return;
+ }
/* (5),(6): the path preference is handled by the sorting
in the routing table. Always install the path by substituting