aren't worth 4 bytes per RTE.
rte_discard and rte_dump don't need net * as parameter.
typedef struct rte {
struct rte *next;
- struct rtattr *attrs;
+ net *net; /* Network this RTE belongs to */
+ struct rtattr *attrs; /* Attributes of this route */
byte flags; /* Flags (REF_...) */
byte pflags; /* Protocol-specific flags */
word pref; /* Route preference */
rte *rte_find(net *net, struct proto *p);
rte *rte_get_temp(struct rtattr *);
void rte_update(net *net, struct proto *p, rte *new);
-void rte_discard(net *net, rte *old);
-void rte_dump(net *, rte *);
+void rte_discard(rte *old);
+void rte_dump(rte *);
void rt_dump(rtable *);
void rt_dump_all(void);
void rt_feed_baby(struct proto *p);
else
n = net_get(&master_table, 0, new->prefix, new->pxlen);
e = rte_get_temp(a);
+ e->net = n;
e->pflags = 0;
rte_update(n, p, e);
}
}
void
-rte_discard(net *net, rte *old) /* Non-filtered route deletion, used during garbage collection */
+rte_discard(rte *old) /* Non-filtered route deletion, used during garbage collection */
{
- rte_update(net, old->attrs->proto, NULL);
+ rte_update(old->net, old->attrs->proto, NULL);
}
void
-rte_dump(net *n, rte *e)
+rte_dump(rte *e)
{
+ net *n = e->net;
if (n)
debug("%1I/%2d ", n->n.prefix, n->n.pxlen);
+ else
+ debug("??? ");
debug("PF=%02x pref=%d lm=%d ", e->pflags, e->pref, now-e->lastmod);
rta_dump(e->attrs);
if (e->flags & REF_CHOSEN)
{
n = (net *) fn;
for(e=n->routes; e; e=e->next)
- rte_dump(n, e);
+ rte_dump(e);
}
FIB_WALK_END;
t = t->sibling;