diff -u ipcp.c.orig ipcp.c --- ipcp.c.orig 2005-01-27 12:09:33.000000000 -0200 +++ ipcp.c 2008-12-02 19:12:49.000000000 -0200 @@ -690,7 +690,7 @@ if (bundle->ncp.cfg.sendpipe > 0 || bundle->ncp.cfg.recvpipe > 0) { ncprange_getsa(&myrange, &ssgw, &ssmask); ncpaddr_getsa(&hisncpaddr, &ssdst); - rt_Update(bundle, sadst, sagw, samask); + rt_Update(bundle, sadst, sagw, samask, NULL, NULL); } if (Enabled(bundle, OPT_SROUTES)) diff -ur ipv6cp.c.orig ipv6cp.c --- ipv6cp.c.orig 2005-01-27 12:09:33.000000000 -0200 +++ ipv6cp.c 2008-12-02 19:12:58.000000000 -0200 @@ -245,7 +245,7 @@ ncpaddr_getsa(&ipv6cp->hisaddr, &ssdst); else sadst = NULL; - rt_Update(bundle, sadst, sagw, samask); + rt_Update(bundle, sadst, sagw, samask, NULL, NULL); } if (Enabled(bundle, OPT_SROUTES)) diff -ur route.c.orig route.c --- route.c.orig 2005-01-10 09:12:36.000000000 -0200 +++ route.c 2008-12-03 10:09:09.000000000 -0200 @@ -524,7 +524,8 @@ " mtu %lu\n", rtm->rtm_index, Index2Nam(rtm->rtm_index), ncprange_ntoa(&dst), bundle->iface->mtu); } - rt_Update(bundle, sa[RTAX_DST], sa[RTAX_GATEWAY], sa[RTAX_NETMASK]); + rt_Update(bundle, sa[RTAX_DST], sa[RTAX_GATEWAY], sa[RTAX_NETMASK], + sa[RTAX_IFP], sa[RTAX_IFA]); } } @@ -862,7 +863,8 @@ void rt_Update(struct bundle *bundle, const struct sockaddr *dst, - const struct sockaddr *gw, const struct sockaddr *mask) + const struct sockaddr *gw, const struct sockaddr *mask, + const struct sockaddr *ifp, const struct sockaddr *ifa) { struct ncprange ncpdst; struct rtmsg rtmes; @@ -909,6 +911,13 @@ p += memcpy_roundup(p, mask, mask->sa_len); } + if (ifp && ifp->sa_family == AF_LINK && ifa) { + rtmes.m_rtm.rtm_addrs |= RTA_IFP; + p += memcpy_roundup(p, ifp, ifp->sa_len); + rtmes.m_rtm.rtm_addrs |= RTA_IFA; + p += memcpy_roundup(p, ifa, ifa->sa_len); + } + rtmes.m_rtm.rtm_msglen = p - (char *)&rtmes; wb = ID0write(s, &rtmes, rtmes.m_rtm.rtm_msglen); diff -ur route.h.orig route.h --- route.h.orig 2001-08-15 23:01:05.000000000 -0300 +++ route.h 2008-12-03 10:07:30.000000000 -0200 @@ -70,4 +70,5 @@ extern int rt_Set(struct bundle *, int, const struct ncprange *, const struct ncpaddr *, int, int); extern void rt_Update(struct bundle *, const struct sockaddr *, + const struct sockaddr *, const struct sockaddr *, const struct sockaddr *, const struct sockaddr *);