X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=datapath%2Flinux-2.6%2Fcompat-2.6%2Finclude%2Flinux%2Fnetdevice.h;h=04ebd89a77e33b45c6e32382bc0ef020f57a45cb;hb=23e795f4dd9af5191773a5ee840642737a37e91d;hp=379c1a9c70b16fe65c7668d511acb05e1ec443b9;hpb=431585099e82a88a23d5dec28138b5a3a8bb11da;p=sliver-openvswitch.git diff --git a/datapath/linux-2.6/compat-2.6/include/linux/netdevice.h b/datapath/linux-2.6/compat-2.6/include/linux/netdevice.h index 379c1a9c7..04ebd89a7 100644 --- a/datapath/linux-2.6/compat-2.6/include/linux/netdevice.h +++ b/datapath/linux-2.6/compat-2.6/include/linux/netdevice.h @@ -77,12 +77,17 @@ extern void unregister_netdevice_many(struct list_head *head); extern void dev_disable_lro(struct net_device *dev); #endif -#ifndef HAVE_DEV_GET_STATS -static inline const struct net_device_stats * -dev_get_stats(struct net_device *dev) -{ - return dev->get_stats(dev); -} +/* Linux 2.6.28 introduced dev_get_stats(): + * const struct net_device_stats *dev_get_stats(struct net_device *dev); + * + * Linux 2.6.36 changed dev_get_stats() to: + * struct rtnl_link_stats64 *dev_get_stats(struct net_device *dev, + * struct rtnl_link_stats64 *storage); + */ +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,36) +#define dev_get_stats(dev, storage) rpl_dev_get_stats(dev, storage) +struct rtnl_link_stats64 *dev_get_stats(struct net_device *dev, + struct rtnl_link_stats64 *storage); #endif #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19) @@ -94,9 +99,46 @@ static inline int netdev_rx_handler_register(struct net_device *dev, void *rx_handler, void *rx_handler_data) { + if (dev->br_port) + return -EBUSY; + rcu_assign_pointer(dev->br_port, rx_handler_data); return 0; } -static inline void netdev_rx_handler_unregister(struct net_device *dev) { } +static inline void netdev_rx_handler_unregister(struct net_device *dev) +{ + rcu_assign_pointer(dev->br_port, NULL); +} +#endif + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19) +#undef SET_ETHTOOL_OPS +#define SET_ETHTOOL_OPS(netdev, ops) \ + ( (netdev)->ethtool_ops = (struct ethtool_ops *)(ops) ) +#endif + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24) +#define dev_get_by_name(net, name) dev_get_by_name(name) +#define dev_get_by_index(net, ifindex) dev_get_by_index(ifindex) +#define __dev_get_by_name(net, name) __dev_get_by_name(name) +#define __dev_get_by_index(net, ifindex) __dev_get_by_index(ifindex) +#define dev_get_by_index_rcu(net, ifindex) dev_get_by_index_rcu(ifindex) +#endif + +#ifndef HAVE_DEV_GET_BY_INDEX_RCU +static inline struct net_device *dev_get_by_index_rcu(struct net *net, int ifindex) +{ + struct net_device *dev; + + read_lock(&dev_base_lock); + dev = __dev_get_by_index(net, ifindex); + read_unlock(&dev_base_lock); + + return dev; +} +#endif + +#ifndef NETIF_F_FSO +#define NETIF_F_FSO 0 #endif #endif