net: Pass neighbours and dest address into NETEVENT_REDIRECT events.
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / net / ipv6 / ip6mr.c
index 8110362e0af558a9ff77824bc78c1b3677369855..4532973f0dd4fc8fd3467a81cc0a2ce0581c72f1 100644 (file)
@@ -1147,8 +1147,7 @@ static int ip6mr_cache_report(struct mr6_table *mrt, struct sk_buff *pkt,
         */
        ret = sock_queue_rcv_skb(mrt->mroute6_sk, skb);
        if (ret < 0) {
-               if (net_ratelimit())
-                       printk(KERN_WARNING "mroute6: pending queue full, dropping entries.\n");
+               net_warn_ratelimited("mroute6: pending queue full, dropping entries\n");
                kfree_skb(skb);
        }
 
@@ -1351,7 +1350,7 @@ int __init ip6_mr_init(void)
                goto reg_notif_fail;
 #ifdef CONFIG_IPV6_PIMSM_V2
        if (inet6_add_protocol(&pim6_protocol, IPPROTO_PIM) < 0) {
-               printk(KERN_ERR "ip6_mr_init: can't add PIM protocol\n");
+               pr_err("%s: can't add PIM protocol\n", __func__);
                err = -EAGAIN;
                goto add_proto_fail;
        }
@@ -1887,6 +1886,8 @@ static inline int ip6mr_forward2_finish(struct sk_buff *skb)
 {
        IP6_INC_STATS_BH(dev_net(skb_dst(skb)->dev), ip6_dst_idev(skb_dst(skb)),
                         IPSTATS_MIB_OUTFORWDATAGRAMS);
+       IP6_ADD_STATS_BH(dev_net(skb_dst(skb)->dev), ip6_dst_idev(skb_dst(skb)),
+                        IPSTATS_MIB_OUTOCTETS, skb->len);
        return dst_output(skb);
 }
 
@@ -2103,8 +2104,9 @@ static int __ip6mr_fill_mroute(struct mr6_table *mrt, struct sk_buff *skb,
        if (c->mf6c_parent >= MAXMIFS)
                return -ENOENT;
 
-       if (MIF_EXISTS(mrt, c->mf6c_parent))
-               RTA_PUT(skb, RTA_IIF, 4, &mrt->vif6_table[c->mf6c_parent].dev->ifindex);
+       if (MIF_EXISTS(mrt, c->mf6c_parent) &&
+           nla_put_u32(skb, RTA_IIF, mrt->vif6_table[c->mf6c_parent].dev->ifindex) < 0)
+               return -EMSGSIZE;
 
        mp_head = (struct rtattr *)skb_put(skb, RTA_LENGTH(0));
 
@@ -2215,14 +2217,15 @@ static int ip6mr_fill_mroute(struct mr6_table *mrt, struct sk_buff *skb,
        rtm->rtm_src_len  = 128;
        rtm->rtm_tos      = 0;
        rtm->rtm_table    = mrt->id;
-       NLA_PUT_U32(skb, RTA_TABLE, mrt->id);
+       if (nla_put_u32(skb, RTA_TABLE, mrt->id))
+               goto nla_put_failure;
        rtm->rtm_scope    = RT_SCOPE_UNIVERSE;
        rtm->rtm_protocol = RTPROT_UNSPEC;
        rtm->rtm_flags    = 0;
 
-       NLA_PUT(skb, RTA_SRC, 16, &c->mf6c_origin);
-       NLA_PUT(skb, RTA_DST, 16, &c->mf6c_mcastgrp);
-
+       if (nla_put(skb, RTA_SRC, 16, &c->mf6c_origin) ||
+           nla_put(skb, RTA_DST, 16, &c->mf6c_mcastgrp))
+               goto nla_put_failure;
        if (__ip6mr_fill_mroute(mrt, skb, c, rtm) < 0)
                goto nla_put_failure;