summaryrefslogtreecommitdiffstats
path: root/usr.sbin/ppp/route.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr.sbin/ppp/route.c')
-rw-r--r--usr.sbin/ppp/route.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/usr.sbin/ppp/route.c b/usr.sbin/ppp/route.c
index d55a06b..e7db97e 100644
--- a/usr.sbin/ppp/route.c
+++ b/usr.sbin/ppp/route.c
@@ -532,7 +532,8 @@ route_UpdateMTU(struct bundle *bundle)
" 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]);
}
}
@@ -870,7 +871,8 @@ failed:
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;
@@ -920,6 +922,13 @@ rt_Update(struct bundle *bundle, const struct sockaddr *dst,
p += memcpy_roundup(p, mask, mask->sa_len);
}
+ if (ifa && ifp && ifp->sa_family == AF_LINK) {
+ 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);
OpenPOWER on IntegriCloud