diff options
author | Martin Mares <mj@ucw.cz> | 1998-12-07 22:59:15 +0100 |
---|---|---|
committer | Martin Mares <mj@ucw.cz> | 1998-12-07 22:59:15 +0100 |
commit | 04925e9040330afc92f8001e6a19ae2146e36782 (patch) | |
tree | 66f976a8ebb63fc1e29206a345a142df59286ed5 /nest/rt-attr.c | |
parent | cdc6bfa70f730c3741537cc21cdd0a5d13ed2af9 (diff) | |
download | bird-04925e9040330afc92f8001e6a19ae2146e36782.tar bird-04925e9040330afc92f8001e6a19ae2146e36782.zip |
Minor rte/rta interface changes:
o rte can now contain a pointer to both cached and uncached rta. Protocols
which don't need their own attribute caching can now just fill-in a rta,
link it to rte without any calls to attribute cache and call rte_update()
which will replace rte->attrs by a cached copy.
o In order to support this, one of previously pad bytes in struct rta
now holds new attribute flags (RTAF_CACHED). If you call rte_update()
with uncached rta, you _must_ clear these flags. In other cases rta_lookup()
sets it appropriately.
o Added rte_free() which is useful when you construct a rte and then the
circumstances change and you decide not to use it for an update. (Needed
for temporary rte's in kernel syncer...)
Diffstat (limited to 'nest/rt-attr.c')
-rw-r--r-- | nest/rt-attr.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/nest/rt-attr.c b/nest/rt-attr.c index 9f7fd2b..afce7f8 100644 --- a/nest/rt-attr.c +++ b/nest/rt-attr.c @@ -116,6 +116,7 @@ rta_lookup(rta *o) if (rta_same(r, o)) return rta_clone(r); r = rta_copy(o); + r->aflags = RTAF_CACHED; r->next = first_rta; first_rta = r; return r; @@ -144,6 +145,8 @@ rta_dump(rta *a) debug(" EXT"); if (a->flags & RTF_TAGGED) debug(" TAG"); + if (!(a->aflags & RTAF_CACHED)) + debug(" !CACHED"); debug(" <-%I", a->from); if (a->dest == RTD_ROUTER) debug(" ->%I", a->gw); |