From bf157075034f16fae836aa43268d5e4c956d9ed1 Mon Sep 17 00:00:00 2001
From: Masafumi Aramoto <aramoto.masafumi@sharp.co.jp>
Date: Thu, 28 Dec 2006 12:39:46 +0900
Subject: [KERNELIF] ADDR: Specify prefix route lifetime with addr_add.

This fix enable to add the prefix route by addr_add instead of
prefix_add.
---
 src/movement.c |   14 +++++++++++---
 1 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/src/movement.c b/src/movement.c
index f80200c..8dda13c 100644
--- a/src/movement.c
+++ b/src/movement.c
@@ -1181,6 +1181,7 @@ static void md_router_timeout_probe(struct tq_elem *tqe)
 static void md_update_router_stats(struct md_router *rtr)
 {
 	struct list_head *list;
+	struct in6_addr coa;
 
 	MDBG2("adding default route via %x:%x:%x:%x:%x:%x:%x:%x\n", 
 	      NIP6ADDR(&rtr->lladdr));
@@ -1198,9 +1199,16 @@ static void md_update_router_stats(struct md_router *rtr)
 		/* pass prefix to kernel if it was included in the latest RA */
 		if (!tsbefore(rtr->timestamp, p->timestamp) &&
 		    p->ple_prefd_time <= p->ple_valid_time) {
-			MDBG2("adding prefix %x:%x:%x:%x:%x:%x:%x:%x/%d\n", 
-			      NIP6ADDR(&p->ple_prefix), p->ple_plen);
-			prefix_add(rtr->ifindex, &p->pinfo);
+			ipv6_addr_set(&coa,
+				(&p->ple_prefix)->s6_addr32[0],
+				(&p->ple_prefix)->s6_addr32[1],
+				(&(rtr->iface)->lladdr)->s6_addr32[2],
+				(&(rtr->iface)->lladdr)->s6_addr32[3]);
+			MDBG("add coa %x:%x:%x:%x:%x:%x:%x:%x on interface (%d)\n",
+						NIP6ADDR(&coa),rtr->ifindex);
+
+			addr_add(&coa, p->ple_plen, 0, RT_SCOPE_UNIVERSE,
+				rtr->ifindex, p->ple_prefd_time,p->ple_valid_time);
 
 			if (p->ple_flags & ND_OPT_PI_FLAG_RADDR)
 				neigh_add(rtr->ifindex, NUD_STALE,
-- 
1.5.0.3

