|
@@ -4729,7 +4729,8 @@ static void snmp6_fill_stats(u64 *stats, struct inet6_dev *idev, int attrtype,
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-static int inet6_fill_ifla6_attrs(struct sk_buff *skb, struct inet6_dev *idev)
|
|
|
+static int inet6_fill_ifla6_attrs(struct sk_buff *skb, struct inet6_dev *idev,
|
|
|
+ u32 ext_filter_mask)
|
|
|
{
|
|
|
struct nlattr *nla;
|
|
|
struct ifla_cacheinfo ci;
|
|
@@ -4749,6 +4750,9 @@ static int inet6_fill_ifla6_attrs(struct sk_buff *skb, struct inet6_dev *idev)
|
|
|
|
|
|
/* XXX - MC not implemented */
|
|
|
|
|
|
+ if (ext_filter_mask & RTEXT_FILTER_SKIP_STATS)
|
|
|
+ return 0;
|
|
|
+
|
|
|
nla = nla_reserve(skb, IFLA_INET6_STATS, IPSTATS_MIB_MAX * sizeof(u64));
|
|
|
if (!nla)
|
|
|
goto nla_put_failure;
|
|
@@ -4784,14 +4788,15 @@ static size_t inet6_get_link_af_size(const struct net_device *dev)
|
|
|
return inet6_ifla6_size();
|
|
|
}
|
|
|
|
|
|
-static int inet6_fill_link_af(struct sk_buff *skb, const struct net_device *dev)
|
|
|
+static int inet6_fill_link_af(struct sk_buff *skb, const struct net_device *dev,
|
|
|
+ u32 ext_filter_mask)
|
|
|
{
|
|
|
struct inet6_dev *idev = __in6_dev_get(dev);
|
|
|
|
|
|
if (!idev)
|
|
|
return -ENODATA;
|
|
|
|
|
|
- if (inet6_fill_ifla6_attrs(skb, idev) < 0)
|
|
|
+ if (inet6_fill_ifla6_attrs(skb, idev, ext_filter_mask) < 0)
|
|
|
return -EMSGSIZE;
|
|
|
|
|
|
return 0;
|
|
@@ -4946,7 +4951,7 @@ static int inet6_fill_ifinfo(struct sk_buff *skb, struct inet6_dev *idev,
|
|
|
if (!protoinfo)
|
|
|
goto nla_put_failure;
|
|
|
|
|
|
- if (inet6_fill_ifla6_attrs(skb, idev) < 0)
|
|
|
+ if (inet6_fill_ifla6_attrs(skb, idev, 0) < 0)
|
|
|
goto nla_put_failure;
|
|
|
|
|
|
nla_nest_end(skb, protoinfo);
|