#define pr_fmt(fmt) …
#include <linux/moduleparam.h>
#include <linux/kernel.h>
#include <linux/netdevice.h>
#include <linux/etherdevice.h>
#include <linux/string.h>
#include <linux/if_arp.h>
#include <linux/inetdevice.h>
#include <linux/inet.h>
#include <linux/interrupt.h>
#include <linux/netpoll.h>
#include <linux/sched.h>
#include <linux/delay.h>
#include <linux/rcupdate.h>
#include <linux/workqueue.h>
#include <linux/slab.h>
#include <linux/export.h>
#include <linux/if_vlan.h>
#include <net/tcp.h>
#include <net/udp.h>
#include <net/addrconf.h>
#include <net/ndisc.h>
#include <net/ip6_checksum.h>
#include <asm/unaligned.h>
#include <trace/events/napi.h>
#include <linux/kconfig.h>
#define MAX_UDP_CHUNK …
#define MAX_SKBS …
static struct sk_buff_head skb_pool;
DEFINE_STATIC_SRCU(…);
#define USEC_PER_POLL …
#define MAX_SKB_SIZE …
static void zap_completion_queue(void);
static unsigned int carrier_timeout = …;
module_param(carrier_timeout, uint, 0644);
#define np_info(np, fmt, ...) …
#define np_err(np, fmt, ...) …
#define np_notice(np, fmt, ...) …
static netdev_tx_t netpoll_start_xmit(struct sk_buff *skb,
struct net_device *dev,
struct netdev_queue *txq)
{ … }
static void queue_process(struct work_struct *work)
{ … }
static int netif_local_xmit_active(struct net_device *dev)
{ … }
static void poll_one_napi(struct napi_struct *napi)
{ … }
static void poll_napi(struct net_device *dev)
{ … }
void netpoll_poll_dev(struct net_device *dev)
{ … }
EXPORT_SYMBOL(…);
void netpoll_poll_disable(struct net_device *dev)
{ … }
EXPORT_SYMBOL(…);
void netpoll_poll_enable(struct net_device *dev)
{ … }
EXPORT_SYMBOL(…);
static void refill_skbs(void)
{ … }
static void zap_completion_queue(void)
{ … }
static struct sk_buff *find_skb(struct netpoll *np, int len, int reserve)
{ … }
static int netpoll_owner_active(struct net_device *dev)
{ … }
static netdev_tx_t __netpoll_send_skb(struct netpoll *np, struct sk_buff *skb)
{ … }
netdev_tx_t netpoll_send_skb(struct netpoll *np, struct sk_buff *skb)
{ … }
EXPORT_SYMBOL(…);
void netpoll_send_udp(struct netpoll *np, const char *msg, int len)
{ … }
EXPORT_SYMBOL(…);
void netpoll_print_options(struct netpoll *np)
{ … }
EXPORT_SYMBOL(…);
static int netpoll_parse_ip_addr(const char *str, union inet_addr *addr)
{ … }
int netpoll_parse_options(struct netpoll *np, char *opt)
{ … }
EXPORT_SYMBOL(…);
int __netpoll_setup(struct netpoll *np, struct net_device *ndev)
{ … }
EXPORT_SYMBOL_GPL(…);
int netpoll_setup(struct netpoll *np)
{ … }
EXPORT_SYMBOL(…);
static int __init netpoll_init(void)
{ … }
core_initcall(netpoll_init);
static void rcu_cleanup_netpoll_info(struct rcu_head *rcu_head)
{ … }
void __netpoll_cleanup(struct netpoll *np)
{ … }
EXPORT_SYMBOL_GPL(…);
void __netpoll_free(struct netpoll *np)
{ … }
EXPORT_SYMBOL_GPL(…);
void netpoll_cleanup(struct netpoll *np)
{ … }
EXPORT_SYMBOL(…);