diff options
author | Claudio Jeker <claudio@cvs.openbsd.org> | 2006-07-06 13:03:40 +0000 |
---|---|---|
committer | Claudio Jeker <claudio@cvs.openbsd.org> | 2006-07-06 13:03:40 +0000 |
commit | 53a40be1e3582d70c63c2197ac3c66b1e07e32d4 (patch) | |
tree | ebb24dda59a49ff1e48b963943f384ccef702e29 /usr.sbin/ospfd/rde_spf.c | |
parent | 737e3f589ea63478eb41f993ea0659fc68441d4c (diff) |
In rt_invalidate() skip all as_ext routes if routes matching a specific area
are invalidated. as_ext routes have a uninitalised area id (aka 0.0.0.0) and
so bad stuff happend when area 0.0.0.0 was invalidated. Because of this the
FIB and RIB got out of sync in some scenarios.
Diffstat (limited to 'usr.sbin/ospfd/rde_spf.c')
-rw-r--r-- | usr.sbin/ospfd/rde_spf.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/usr.sbin/ospfd/rde_spf.c b/usr.sbin/ospfd/rde_spf.c index fb62ec60762..1c84eae7898 100644 --- a/usr.sbin/ospfd/rde_spf.c +++ b/usr.sbin/ospfd/rde_spf.c @@ -1,4 +1,4 @@ -/* $OpenBSD: rde_spf.c,v 1.54 2006/05/30 22:15:55 claudio Exp $ */ +/* $OpenBSD: rde_spf.c,v 1.55 2006/07/06 13:03:39 claudio Exp $ */ /* * Copyright (c) 2005 Esben Norby <norby@openbsd.org> @@ -674,6 +674,11 @@ rt_invalidate(struct area *area) r->p_type != PT_TYPE2_EXT) continue; } else { + /* ignore all as_ext routes */ + if (r->p_type == PT_TYPE1_EXT || + r->p_type == PT_TYPE2_EXT) + continue; + /* look only at routes matching the area */ if (r->area.s_addr != area->id.s_addr) continue; |