#include <linux/module.h>
#include <linux/errno.h>
#include <linux/netdevice.h>
#include <linux/etherdevice.h>
#include <linux/if_link.h>
#include <linux/if_ether.h>
#include <net/netlink.h>
#include <net/rtnetlink.h>
#include <net/bonding.h>
#include <net/ipv6.h>
static size_t bond_get_slave_size(const struct net_device *bond_dev,
const struct net_device *slave_dev)
{ … }
static int bond_fill_slave_info(struct sk_buff *skb,
const struct net_device *bond_dev,
const struct net_device *slave_dev)
{ … }
static const struct netlink_range_validation delay_range = …;
static const struct nla_policy bond_policy[IFLA_BOND_MAX + 1] = …;
static const struct nla_policy bond_slave_policy[IFLA_BOND_SLAVE_MAX + 1] = …;
static int bond_validate(struct nlattr *tb[], struct nlattr *data[],
struct netlink_ext_ack *extack)
{ … }
static int bond_slave_changelink(struct net_device *bond_dev,
struct net_device *slave_dev,
struct nlattr *tb[], struct nlattr *data[],
struct netlink_ext_ack *extack)
{ … }
static int bond_changelink(struct net_device *bond_dev, struct nlattr *tb[],
struct nlattr *data[],
struct netlink_ext_ack *extack)
{ … }
static int bond_newlink(struct net *src_net, struct net_device *bond_dev,
struct nlattr *tb[], struct nlattr *data[],
struct netlink_ext_ack *extack)
{ … }
static size_t bond_get_size(const struct net_device *bond_dev)
{ … }
static int bond_option_active_slave_get_ifindex(struct bonding *bond)
{ … }
static int bond_fill_info(struct sk_buff *skb,
const struct net_device *bond_dev)
{ … }
static size_t bond_get_linkxstats_size(const struct net_device *dev, int attr)
{ … }
static int bond_fill_linkxstats(struct sk_buff *skb,
const struct net_device *dev,
int *prividx, int attr)
{ … }
struct rtnl_link_ops bond_link_ops __read_mostly = …;
int __init bond_netlink_init(void)
{ … }
void bond_netlink_fini(void)
{ … }
MODULE_ALIAS_RTNL_LINK(…) …;