#include <linux/ethtool.h>
#include "ipvlan.h"
static int ipvlan_set_port_mode(struct ipvl_port *port, u16 nval,
struct netlink_ext_ack *extack)
{ … }
static int ipvlan_port_create(struct net_device *dev)
{ … }
static void ipvlan_port_destroy(struct net_device *dev)
{ … }
#define IPVLAN_ALWAYS_ON_OFLOADS …
#define IPVLAN_ALWAYS_ON …
#define IPVLAN_FEATURES …
#define IPVLAN_STATE_MASK …
static int ipvlan_init(struct net_device *dev)
{ … }
static void ipvlan_uninit(struct net_device *dev)
{ … }
static int ipvlan_open(struct net_device *dev)
{ … }
static int ipvlan_stop(struct net_device *dev)
{ … }
static netdev_tx_t ipvlan_start_xmit(struct sk_buff *skb,
struct net_device *dev)
{ … }
static netdev_features_t ipvlan_fix_features(struct net_device *dev,
netdev_features_t features)
{ … }
static void ipvlan_change_rx_flags(struct net_device *dev, int change)
{ … }
static void ipvlan_set_multicast_mac_filter(struct net_device *dev)
{ … }
static void ipvlan_get_stats64(struct net_device *dev,
struct rtnl_link_stats64 *s)
{ … }
static int ipvlan_vlan_rx_add_vid(struct net_device *dev, __be16 proto, u16 vid)
{ … }
static int ipvlan_vlan_rx_kill_vid(struct net_device *dev, __be16 proto,
u16 vid)
{ … }
static int ipvlan_get_iflink(const struct net_device *dev)
{ … }
static const struct net_device_ops ipvlan_netdev_ops = …;
static int ipvlan_hard_header(struct sk_buff *skb, struct net_device *dev,
unsigned short type, const void *daddr,
const void *saddr, unsigned len)
{ … }
static const struct header_ops ipvlan_header_ops = …;
static void ipvlan_adjust_mtu(struct ipvl_dev *ipvlan, struct net_device *dev)
{ … }
static bool netif_is_ipvlan(const struct net_device *dev)
{ … }
static int ipvlan_ethtool_get_link_ksettings(struct net_device *dev,
struct ethtool_link_ksettings *cmd)
{ … }
static void ipvlan_ethtool_get_drvinfo(struct net_device *dev,
struct ethtool_drvinfo *drvinfo)
{ … }
static u32 ipvlan_ethtool_get_msglevel(struct net_device *dev)
{ … }
static void ipvlan_ethtool_set_msglevel(struct net_device *dev, u32 value)
{ … }
static const struct ethtool_ops ipvlan_ethtool_ops = …;
static int ipvlan_nl_changelink(struct net_device *dev,
struct nlattr *tb[], struct nlattr *data[],
struct netlink_ext_ack *extack)
{ … }
static size_t ipvlan_nl_getsize(const struct net_device *dev)
{ … }
static int ipvlan_nl_validate(struct nlattr *tb[], struct nlattr *data[],
struct netlink_ext_ack *extack)
{ … }
static int ipvlan_nl_fillinfo(struct sk_buff *skb,
const struct net_device *dev)
{ … }
int ipvlan_link_new(struct net *src_net, struct net_device *dev,
struct nlattr *tb[], struct nlattr *data[],
struct netlink_ext_ack *extack)
{ … }
EXPORT_SYMBOL_GPL(…);
void ipvlan_link_delete(struct net_device *dev, struct list_head *head)
{ … }
EXPORT_SYMBOL_GPL(…);
void ipvlan_link_setup(struct net_device *dev)
{ … }
EXPORT_SYMBOL_GPL(…);
static const struct nla_policy ipvlan_nl_policy[IFLA_IPVLAN_MAX + 1] = …;
static struct net *ipvlan_get_link_net(const struct net_device *dev)
{ … }
static struct rtnl_link_ops ipvlan_link_ops = …;
int ipvlan_link_register(struct rtnl_link_ops *ops)
{ … }
EXPORT_SYMBOL_GPL(…);
static int ipvlan_device_event(struct notifier_block *unused,
unsigned long event, void *ptr)
{ … }
static int ipvlan_add_addr(struct ipvl_dev *ipvlan, void *iaddr, bool is_v6)
{ … }
static void ipvlan_del_addr(struct ipvl_dev *ipvlan, void *iaddr, bool is_v6)
{ … }
static bool ipvlan_is_valid_dev(const struct net_device *dev)
{ … }
#if IS_ENABLED(CONFIG_IPV6)
static int ipvlan_add_addr6(struct ipvl_dev *ipvlan, struct in6_addr *ip6_addr)
{ … }
static void ipvlan_del_addr6(struct ipvl_dev *ipvlan, struct in6_addr *ip6_addr)
{ … }
static int ipvlan_addr6_event(struct notifier_block *unused,
unsigned long event, void *ptr)
{ … }
static int ipvlan_addr6_validator_event(struct notifier_block *unused,
unsigned long event, void *ptr)
{ … }
#endif
static int ipvlan_add_addr4(struct ipvl_dev *ipvlan, struct in_addr *ip4_addr)
{ … }
static void ipvlan_del_addr4(struct ipvl_dev *ipvlan, struct in_addr *ip4_addr)
{ … }
static int ipvlan_addr4_event(struct notifier_block *unused,
unsigned long event, void *ptr)
{ … }
static int ipvlan_addr4_validator_event(struct notifier_block *unused,
unsigned long event, void *ptr)
{ … }
static struct notifier_block ipvlan_addr4_notifier_block __read_mostly = …;
static struct notifier_block ipvlan_addr4_vtor_notifier_block __read_mostly = …;
static struct notifier_block ipvlan_notifier_block __read_mostly = …;
#if IS_ENABLED(CONFIG_IPV6)
static struct notifier_block ipvlan_addr6_notifier_block __read_mostly = …;
static struct notifier_block ipvlan_addr6_vtor_notifier_block __read_mostly = …;
#endif
static int __init ipvlan_init_module(void)
{ … }
static void __exit ipvlan_cleanup_module(void)
{ … }
module_init(…) …;
module_exit(ipvlan_cleanup_module);
MODULE_LICENSE(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_ALIAS_RTNL_LINK(…) …;