|
@@ -2360,11 +2360,13 @@ static int rt6_fill_node(struct net *net,
|
|
|
int iif, int type, u32 pid, u32 seq,
|
|
|
int prefix, int nowait, unsigned int flags)
|
|
|
{
|
|
|
+ const struct inet_peer *peer;
|
|
|
struct rtmsg *rtm;
|
|
|
struct nlmsghdr *nlh;
|
|
|
long expires;
|
|
|
u32 table;
|
|
|
struct neighbour *n;
|
|
|
+ u32 ts, tsage;
|
|
|
|
|
|
if (prefix) { /* user wants prefix routes only */
|
|
|
if (!(rt->rt6i_flags & RTF_PREFIX_RT)) {
|
|
@@ -2471,7 +2473,14 @@ static int rt6_fill_node(struct net *net,
|
|
|
else
|
|
|
expires = INT_MAX;
|
|
|
|
|
|
- if (rtnl_put_cacheinfo(skb, &rt->dst, 0, 0, 0,
|
|
|
+ peer = rt->rt6i_peer;
|
|
|
+ ts = tsage = 0;
|
|
|
+ if (peer && peer->tcp_ts_stamp) {
|
|
|
+ ts = peer->tcp_ts;
|
|
|
+ tsage = get_seconds() - peer->tcp_ts_stamp;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (rtnl_put_cacheinfo(skb, &rt->dst, 0, ts, tsage,
|
|
|
expires, rt->dst.error) < 0)
|
|
|
goto nla_put_failure;
|
|
|
|