#include <net/sock.h>
#include <linux/module.h>
#include <linux/netlink.h>
#include <linux/netdevice.h>
#include "rmnet_config.h"
#include "rmnet_handlers.h"
#include "rmnet_vnd.h"
#include "rmnet_private.h"
#include "rmnet_map.h"
static const struct nla_policy rmnet_policy[IFLA_RMNET_MAX + 1] = …;
static int rmnet_is_real_dev_registered(const struct net_device *real_dev)
{ … }
struct rmnet_port*
rmnet_get_port_rtnl(const struct net_device *real_dev)
{ … }
static int rmnet_unregister_real_device(struct net_device *real_dev)
{ … }
static int rmnet_register_real_device(struct net_device *real_dev,
struct netlink_ext_ack *extack)
{ … }
static void rmnet_unregister_bridge(struct rmnet_port *port)
{ … }
static int rmnet_newlink(struct net *src_net, struct net_device *dev,
struct nlattr *tb[], struct nlattr *data[],
struct netlink_ext_ack *extack)
{ … }
static void rmnet_dellink(struct net_device *dev, struct list_head *head)
{ … }
static void rmnet_force_unassociate_device(struct net_device *real_dev)
{ … }
static int rmnet_config_notify_cb(struct notifier_block *nb,
unsigned long event, void *data)
{ … }
static struct notifier_block rmnet_dev_notifier __read_mostly = …;
static int rmnet_rtnl_validate(struct nlattr *tb[], struct nlattr *data[],
struct netlink_ext_ack *extack)
{ … }
static int rmnet_changelink(struct net_device *dev, struct nlattr *tb[],
struct nlattr *data[],
struct netlink_ext_ack *extack)
{ … }
static size_t rmnet_get_size(const struct net_device *dev)
{ … }
static int rmnet_fill_info(struct sk_buff *skb, const struct net_device *dev)
{ … }
struct rtnl_link_ops rmnet_link_ops __read_mostly = …;
struct rmnet_port *rmnet_get_port_rcu(struct net_device *real_dev)
{ … }
struct rmnet_endpoint *rmnet_get_endpoint(struct rmnet_port *port, u8 mux_id)
{ … }
int rmnet_add_bridge(struct net_device *rmnet_dev,
struct net_device *slave_dev,
struct netlink_ext_ack *extack)
{ … }
int rmnet_del_bridge(struct net_device *rmnet_dev,
struct net_device *slave_dev)
{ … }
static int __init rmnet_init(void)
{ … }
static void __exit rmnet_exit(void)
{ … }
module_init(…) …
module_exit(…)
MODULE_ALIAS_RTNL_LINK(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;