diff options
Diffstat (limited to 'net/ipv6/addrconf.c')
-rw-r--r-- | net/ipv6/addrconf.c | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c index 1486f76f7878..9ba9e92d1934 100644 --- a/net/ipv6/addrconf.c +++ b/net/ipv6/addrconf.c | |||
@@ -3433,6 +3433,8 @@ static inline size_t inet6_if_nlmsg_size(void) | |||
3433 | nla_total_size(4) /* IFLA_INET6_FLAGS */ | 3433 | nla_total_size(4) /* IFLA_INET6_FLAGS */ |
3434 | + nla_total_size(sizeof(struct ifla_cacheinfo)) | 3434 | + nla_total_size(sizeof(struct ifla_cacheinfo)) |
3435 | + nla_total_size(DEVCONF_MAX * 4) /* IFLA_INET6_CONF */ | 3435 | + nla_total_size(DEVCONF_MAX * 4) /* IFLA_INET6_CONF */ |
3436 | + nla_total_size(IPSTATS_MIB_MAX * 8) /* IFLA_INET6_STATS */ | ||
3437 | + nla_total_size(ICMP6_MIB_MAX * 8) /* IFLA_INET6_ICMP6STATS */ | ||
3436 | ); | 3438 | ); |
3437 | } | 3439 | } |
3438 | 3440 | ||
@@ -3440,7 +3442,7 @@ static int inet6_fill_ifinfo(struct sk_buff *skb, struct inet6_dev *idev, | |||
3440 | u32 pid, u32 seq, int event, unsigned int flags) | 3442 | u32 pid, u32 seq, int event, unsigned int flags) |
3441 | { | 3443 | { |
3442 | struct net_device *dev = idev->dev; | 3444 | struct net_device *dev = idev->dev; |
3443 | struct nlattr *conf; | 3445 | struct nlattr *nla; |
3444 | struct ifinfomsg *hdr; | 3446 | struct ifinfomsg *hdr; |
3445 | struct nlmsghdr *nlh; | 3447 | struct nlmsghdr *nlh; |
3446 | void *protoinfo; | 3448 | void *protoinfo; |
@@ -3480,12 +3482,22 @@ static int inet6_fill_ifinfo(struct sk_buff *skb, struct inet6_dev *idev, | |||
3480 | ci.retrans_time = idev->nd_parms->retrans_time; | 3482 | ci.retrans_time = idev->nd_parms->retrans_time; |
3481 | NLA_PUT(skb, IFLA_INET6_CACHEINFO, sizeof(ci), &ci); | 3483 | NLA_PUT(skb, IFLA_INET6_CACHEINFO, sizeof(ci), &ci); |
3482 | 3484 | ||
3483 | conf = nla_reserve(skb, IFLA_INET6_CONF, DEVCONF_MAX * sizeof(s32)); | 3485 | nla = nla_reserve(skb, IFLA_INET6_CONF, DEVCONF_MAX * sizeof(s32)); |
3484 | if (conf == NULL) | 3486 | if (nla == NULL) |
3485 | goto nla_put_failure; | 3487 | goto nla_put_failure; |
3486 | ipv6_store_devconf(&idev->cnf, nla_data(conf), nla_len(conf)); | 3488 | ipv6_store_devconf(&idev->cnf, nla_data(nla), nla_len(nla)); |
3487 | 3489 | ||
3488 | /* XXX - Statistics/MC not implemented */ | 3490 | /* XXX - MC not implemented */ |
3491 | |||
3492 | nla = nla_reserve(skb, IFLA_INET6_STATS, IPSTATS_MIB_MAX * sizeof(u64)); | ||
3493 | if (nla == NULL) | ||
3494 | goto nla_put_failure; | ||
3495 | snmp6_fill_stats(nla_data(nla), idev, IFLA_INET6_STATS, nla_len(nla)); | ||
3496 | |||
3497 | nla = nla_reserve(skb, IFLA_INET6_ICMP6STATS, ICMP6_MIB_MAX * sizeof(u64)); | ||
3498 | if (nla == NULL) | ||
3499 | goto nla_put_failure; | ||
3500 | snmp6_fill_stats(nla_data(nla), idev, IFLA_INET6_ICMP6STATS, nla_len(nla)); | ||
3489 | 3501 | ||
3490 | nla_nest_end(skb, protoinfo); | 3502 | nla_nest_end(skb, protoinfo); |
3491 | return nlmsg_end(skb, nlh); | 3503 | return nlmsg_end(skb, nlh); |