]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Added pointer to network to RTE. The complications with passing NET separately
authorMartin Mares <mj@ucw.cz>
Tue, 20 Oct 1998 15:13:18 +0000 (15:13 +0000)
committerMartin Mares <mj@ucw.cz>
Tue, 20 Oct 1998 15:13:18 +0000 (15:13 +0000)
aren't worth 4 bytes per RTE.

rte_discard and rte_dump don't need net * as parameter.

nest/route.h
nest/rt-dev.c
nest/rt-table.c

index 39c6ef7bfb6bb825a87823053b3c3f784d481c5a..d3a1304cf55d0305cd2c8f7be8ae99de24a51129 100644 (file)
@@ -85,7 +85,8 @@ typedef struct network {
 
 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 */
@@ -125,8 +126,8 @@ net *net_get(rtable *tab, unsigned tos, ip_addr addr, unsigned len);
 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);
index 1794b90a82c9bbd9e47e7d944f691b89d7edea46..7ef04f0965c60884906855a7bc9c5d7f4c46e463 100644 (file)
@@ -53,6 +53,7 @@ dev_if_notify(struct proto *p, unsigned c, struct iface *old, struct iface *new)
       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);
     }
index f278c517f29de497c2ac0735a37bc6b201440fda..7ec40113f9cd2ba05e42be693f0635ec438fa54f 100644 (file)
@@ -209,16 +209,19 @@ rte_update(net *net, struct proto *p, rte *new)
 }
 
 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)
@@ -240,7 +243,7 @@ rt_dump(rtable *t)
        {
          n = (net *) fn;
          for(e=n->routes; e; e=e->next)
-           rte_dump(n, e);
+           rte_dump(e);
        }
       FIB_WALK_END;
       t = t->sibling;