|
@@ -2629,7 +2629,8 @@ static int rt_fill_info(struct sk_buff *skb, u32 pid, u32 seq, int event,
|
|
|
struct rtable *rt = (struct rtable*)skb->dst;
|
|
|
struct rtmsg *r;
|
|
|
struct nlmsghdr *nlh;
|
|
|
- struct rta_cacheinfo ci;
|
|
|
+ long expires;
|
|
|
+ u32 id = 0, ts = 0, tsage = 0, error;
|
|
|
|
|
|
nlh = nlmsg_put(skb, pid, seq, event, sizeof(*r), flags);
|
|
|
if (nlh == NULL)
|
|
@@ -2676,20 +2677,13 @@ static int rt_fill_info(struct sk_buff *skb, u32 pid, u32 seq, int event,
|
|
|
if (rtnetlink_put_metrics(skb, rt->u.dst.metrics) < 0)
|
|
|
goto nla_put_failure;
|
|
|
|
|
|
- ci.rta_lastuse = jiffies_to_clock_t(jiffies - rt->u.dst.lastuse);
|
|
|
- ci.rta_used = rt->u.dst.__use;
|
|
|
- ci.rta_clntref = atomic_read(&rt->u.dst.__refcnt);
|
|
|
- if (rt->u.dst.expires)
|
|
|
- ci.rta_expires = jiffies_to_clock_t(rt->u.dst.expires - jiffies);
|
|
|
- else
|
|
|
- ci.rta_expires = 0;
|
|
|
- ci.rta_error = rt->u.dst.error;
|
|
|
- ci.rta_id = ci.rta_ts = ci.rta_tsage = 0;
|
|
|
+ error = rt->u.dst.error;
|
|
|
+ expires = rt->u.dst.expires ? rt->u.dst.expires - jiffies : 0;
|
|
|
if (rt->peer) {
|
|
|
- ci.rta_id = rt->peer->ip_id_count;
|
|
|
+ id = rt->peer->ip_id_count;
|
|
|
if (rt->peer->tcp_ts_stamp) {
|
|
|
- ci.rta_ts = rt->peer->tcp_ts;
|
|
|
- ci.rta_tsage = xtime.tv_sec - rt->peer->tcp_ts_stamp;
|
|
|
+ ts = rt->peer->tcp_ts;
|
|
|
+ tsage = xtime.tv_sec - rt->peer->tcp_ts_stamp;
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -2708,7 +2702,7 @@ static int rt_fill_info(struct sk_buff *skb, u32 pid, u32 seq, int event,
|
|
|
} else {
|
|
|
if (err == -EMSGSIZE)
|
|
|
goto nla_put_failure;
|
|
|
- ci.rta_error = err;
|
|
|
+ error = err;
|
|
|
}
|
|
|
}
|
|
|
} else
|
|
@@ -2716,7 +2710,9 @@ static int rt_fill_info(struct sk_buff *skb, u32 pid, u32 seq, int event,
|
|
|
NLA_PUT_U32(skb, RTA_IIF, rt->fl.iif);
|
|
|
}
|
|
|
|
|
|
- NLA_PUT(skb, RTA_CACHEINFO, sizeof(ci), &ci);
|
|
|
+ if (rtnl_put_cacheinfo(skb, &rt->u.dst, id, ts, tsage,
|
|
|
+ expires, error) < 0)
|
|
|
+ goto nla_put_failure;
|
|
|
|
|
|
return nlmsg_end(skb, nlh);
|
|
|
|