summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ripngd/ChangeLog4
-rw-r--r--ripngd/ripng_zebra.c6
-rw-r--r--ripngd/ripngd.c9
-rw-r--r--ripngd/ripngd.h2
4 files changed, 14 insertions, 7 deletions
diff --git a/ripngd/ChangeLog b/ripngd/ChangeLog
index 8f874e0e..84c3ea0a 100644
--- a/ripngd/ChangeLog
+++ b/ripngd/ChangeLog
@@ -1,3 +1,7 @@
+2005-08-27 Hasso Tepper <hasso at quagga.net>
+
+ * ripng_zebra.c, ripngd.[ch]: Pass metric info to the zebra daemon.
+
2005-04-11 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
* ripng_zebra.c (ripng_redistribute_unset, ripng_redistribute_clean):
diff --git a/ripngd/ripng_zebra.c b/ripngd/ripng_zebra.c
index 51e73a01..7744fd55 100644
--- a/ripngd/ripng_zebra.c
+++ b/ripngd/ripng_zebra.c
@@ -44,7 +44,7 @@ int ripng_interface_address_delete (int, struct zclient *, zebra_size_t);
void
ripng_zebra_ipv6_add (struct prefix_ipv6 *p, struct in6_addr *nexthop,
- unsigned int ifindex)
+ unsigned int ifindex, u_char metric)
{
struct zapi_ipv6 api;
@@ -59,7 +59,9 @@ ripng_zebra_ipv6_add (struct prefix_ipv6 *p, struct in6_addr *nexthop,
SET_FLAG (api.message, ZAPI_MESSAGE_IFINDEX);
api.ifindex_num = 1;
api.ifindex = &ifindex;
-
+ SET_FLAG (api.message, ZAPI_MESSAGE_METRIC);
+ api.metric = metric;
+
zapi_ipv6_route (ZEBRA_IPV6_ROUTE_ADD, zclient, p, &api);
}
}
diff --git a/ripngd/ripngd.c b/ripngd/ripngd.c
index 453637c3..cf0d5784 100644
--- a/ripngd/ripngd.c
+++ b/ripngd/ripngd.c
@@ -783,7 +783,8 @@ ripng_route_process (struct rte *rte, struct sockaddr_in6 *from,
rinfo->type = ZEBRA_ROUTE_RIPNG;
rinfo->sub_type = RIPNG_ROUTE_RTE;
- ripng_zebra_ipv6_add (&p, &rinfo->nexthop, rinfo->ifindex);
+ ripng_zebra_ipv6_add (&p, &rinfo->nexthop, rinfo->ifindex,
+ rinfo->metric);
rinfo->flags |= RIPNG_RTF_FIB;
/* Aggregate check. */
@@ -835,9 +836,9 @@ ripng_route_process (struct rte *rte, struct sockaddr_in6 *from,
RIPNG_TIMER_OFF (rinfo->t_garbage_collect);
if (! IPV6_ADDR_SAME (&rinfo->nexthop, nexthop))
- IPV6_ADDR_COPY (&rinfo->nexthop, nexthop);
+ IPV6_ADDR_COPY (&rinfo->nexthop, nexthop);
- ripng_zebra_ipv6_add (&p, nexthop, ifp->ifindex);
+ ripng_zebra_ipv6_add (&p, nexthop, ifp->ifindex, rinfo->metric);
rinfo->flags |= RIPNG_RTF_FIB;
/* The aggregation counter needs to be updated because
@@ -850,7 +851,7 @@ ripng_route_process (struct rte *rte, struct sockaddr_in6 *from,
if (oldmetric != RIPNG_METRIC_INFINITY)
{
ripng_zebra_ipv6_delete (&p, &rinfo->nexthop, rinfo->ifindex);
- ripng_zebra_ipv6_add (&p, nexthop, ifp->ifindex);
+ ripng_zebra_ipv6_add (&p, nexthop, ifp->ifindex, rinfo->metric);
rinfo->flags |= RIPNG_RTF_FIB;
if (! IPV6_ADDR_SAME (&rinfo->nexthop, nexthop))
diff --git a/ripngd/ripngd.h b/ripngd/ripngd.h
index 68da71da..b478e9bc 100644
--- a/ripngd/ripngd.h
+++ b/ripngd/ripngd.h
@@ -383,7 +383,7 @@ void ripng_redistribute_withdraw (int type);
void ripng_distribute_update_interface (struct interface *);
void ripng_if_rmap_update_interface (struct interface *);
-void ripng_zebra_ipv6_add (struct prefix_ipv6 *p, struct in6_addr *nexthop, unsigned int ifindex);
+void ripng_zebra_ipv6_add (struct prefix_ipv6 *p, struct in6_addr *nexthop, unsigned int ifindex, u_char metric);
void ripng_zebra_ipv6_delete (struct prefix_ipv6 *p, struct in6_addr *nexthop, unsigned int ifindex);
void ripng_redistribute_clean ();