2
0
mirror of https://github.com/openvswitch/ovs synced 2025-10-21 14:49:41 +00:00
Files
openvswitch/datapath/linux-2.6/compat-2.6/include/linux/netdevice.h
Jesse Gross 2de320799d datapath: Disable large receive offload.
LRO can play fast and loose with the packets that it merges, which
isn't very polite when you are bridging packets for other operating
systems.  This disables LRO on any underlying devices that are added
to the datapath, which is the same as what the bridge does.

Note that this does not disable GRO, which has a more strict set of
rules about what is merged and is therefore safe for bridging.  Both
are typically done in software anyways.
2010-03-05 16:31:26 -05:00

81 lines
2.1 KiB
C

#ifndef __LINUX_NETDEVICE_WRAPPER_H
#define __LINUX_NETDEVICE_WRAPPER_H 1
#include_next <linux/netdevice.h>
struct net;
#include <linux/version.h>
/* Before 2.6.21, struct net_device has a "struct class_device" member named
* class_dev. Beginning with 2.6.21, struct net_device instead has a "struct
* device" member named dev. Otherwise the usage of these members is pretty
* much the same. */
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21)
#define NETDEV_DEV_MEMBER class_dev
#else
#define NETDEV_DEV_MEMBER dev
#endif
#ifndef to_net_dev
#define to_net_dev(class) container_of(class, struct net_device, NETDEV_DEV_MEMBER)
#endif
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,26)
static inline
struct net *dev_net(const struct net_device *dev)
{
#ifdef CONFIG_NET_NS
return dev->nd_net;
#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,25)
return &init_net;
#else
return NULL;
#endif
}
static inline
void dev_net_set(struct net_device *dev, const struct net *net)
{
#ifdef CONFIG_NET_NS
dev->nd_dev = net;
#endif
}
#endif /* linux kernel < 2.6.26 */
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)
#define NETIF_F_NETNS_LOCAL 0
#endif
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
#define proc_net init_net.proc_net
#endif
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,32)
typedef int netdev_tx_t;
#endif
#ifndef for_each_netdev
/* Linux before 2.6.22 didn't have for_each_netdev at all. */
#define for_each_netdev(net, d) for (d = dev_base; d; d = d->next)
#elif LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)
/* Linux 2.6.24 added a network namespace pointer to the macro. */
#undef for_each_netdev
#define for_each_netdev(net,d) list_for_each_entry(d, &dev_base_head, dev_list)
#endif
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)
#define net_xmit_eval(e) ((e) == NET_XMIT_CN? 0 : (e))
#endif
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,33)
extern void unregister_netdevice_queue(struct net_device *dev,
struct list_head *head);
extern void unregister_netdevice_many(struct list_head *head);
#endif
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27)
extern void dev_disable_lro(struct net_device *dev);
#endif
#endif