return err;
 }
+
+int tipc_nl_link_reset_stats(struct sk_buff *skb, struct genl_info *info)
+{
+       int err;
+       char *link_name;
+       unsigned int bearer_id;
+       struct tipc_link *link;
+       struct tipc_node *node;
+       struct nlattr *attrs[TIPC_NLA_LINK_MAX + 1];
+
+       if (!info->attrs[TIPC_NLA_LINK])
+               return -EINVAL;
+
+       err = nla_parse_nested(attrs, TIPC_NLA_LINK_MAX,
+                              info->attrs[TIPC_NLA_LINK],
+                              tipc_nl_link_policy);
+       if (err)
+               return err;
+
+       if (!attrs[TIPC_NLA_LINK_NAME])
+               return -EINVAL;
+
+       link_name = nla_data(attrs[TIPC_NLA_LINK_NAME]);
+
+       if (strcmp(link_name, tipc_bclink_name) == 0) {
+               err = tipc_bclink_reset_stats();
+               if (err)
+                       return err;
+               return 0;
+       }
+
+       node = tipc_link_find_owner(link_name, &bearer_id);
+       if (!node)
+               return -EINVAL;
+
+       tipc_node_lock(node);
+
+       link = node->links[bearer_id];
+       if (!link) {
+               tipc_node_unlock(node);
+               return -EINVAL;
+       }
+
+       link_reset_statistics(link);
+
+       tipc_node_unlock(node);
+
+       return 0;
+}
 
 int tipc_nl_link_dump(struct sk_buff *skb, struct netlink_callback *cb);
 int tipc_nl_link_get(struct sk_buff *skb, struct genl_info *info);
 int tipc_nl_link_set(struct sk_buff *skb, struct genl_info *info);
+int tipc_nl_link_reset_stats(struct sk_buff *skb, struct genl_info *info);
 int tipc_nl_parse_link_prop(struct nlattr *prop, struct nlattr *props[]);
 
 /*
 
                .cmd    = TIPC_NL_LINK_SET,
                .doit   = tipc_nl_link_set,
                .policy = tipc_nl_policy,
+       },
+       {
+               .cmd    = TIPC_NL_LINK_RESET_STATS,
+               .doit   = tipc_nl_link_reset_stats,
+               .policy = tipc_nl_policy,
        }
 };