X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=datapath%2Flinux%2Fcompat%2Finclude%2Flinux%2Fnetdevice.h;h=d726390ef482941ddc70ced2dcefe3563e4540d4;hb=e2f3178f0582eda302bdc5629189b6a56d9fbcdd;hp=d2822017fabcb945c7e0a8be4c5344cfdc6ff6a7;hpb=8e04c6e10c28e42c715eb9fef749554c123bddbc;p=sliver-openvswitch.git diff --git a/datapath/linux/compat/include/linux/netdevice.h b/datapath/linux/compat/include/linux/netdevice.h index d2822017f..d726390ef 100644 --- a/datapath/linux/compat/include/linux/netdevice.h +++ b/datapath/linux/compat/include/linux/netdevice.h @@ -2,6 +2,7 @@ #define __LINUX_NETDEVICE_WRAPPER_H 1 #include_next +#include struct net; @@ -11,11 +12,6 @@ struct net; #define to_net_dev(class) container_of(class, struct net_device, NETDEV_DEV_MEMBER) #endif -#ifdef HAVE_RHEL_OVS_HOOK -extern struct sk_buff *(*openvswitch_handle_frame_hook)(struct sk_buff *skb); -extern int nr_bridges; -#endif - #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,33) extern void unregister_netdevice_queue(struct net_device *dev, struct list_head *head); @@ -28,32 +24,23 @@ extern void dev_disable_lro(struct net_device *dev); #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,36) || \ defined HAVE_RHEL_OVS_HOOK -static inline int netdev_rx_handler_register(struct net_device *dev, - void *rx_handler, - void *rx_handler_data) -{ -#ifdef HAVE_RHEL_OVS_HOOK - rcu_assign_pointer(dev->ax25_ptr, rx_handler_data); - nr_bridges++; - rcu_assign_pointer(openvswitch_handle_frame_hook, rx_handler); -#else - if (dev->br_port) - return -EBUSY; - rcu_assign_pointer(dev->br_port, rx_handler_data); -#endif - return 0; -} -static inline void netdev_rx_handler_unregister(struct net_device *dev) -{ + #ifdef HAVE_RHEL_OVS_HOOK - rcu_assign_pointer(dev->ax25_ptr, NULL); +typedef struct sk_buff *(openvswitch_handle_frame_hook_t)(struct sk_buff *skb); +extern openvswitch_handle_frame_hook_t *openvswitch_handle_frame_hook; - if (--nr_bridges <= 0) - rcu_assign_pointer(openvswitch_handle_frame_hook, NULL); +int netdev_rx_handler_register(struct net_device *dev, + openvswitch_handle_frame_hook_t *hook, + void *rx_handler_data); #else - rcu_assign_pointer(dev->br_port, NULL); + +int netdev_rx_handler_register(struct net_device *dev, + struct sk_buff *(*netdev_hook)(struct net_bridge_port *p, + struct sk_buff *skb), + void *rx_handler_data); #endif -} + +void netdev_rx_handler_unregister(struct net_device *dev); #endif #ifndef HAVE_DEV_GET_BY_INDEX_RCU @@ -73,12 +60,17 @@ static inline struct net_device *dev_get_by_index_rcu(struct net *net, int ifind #define NETIF_F_FSO 0 #endif +#ifndef HAVE_NETDEV_FEATURES_T +typedef u32 netdev_features_t; +#endif + #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38) #define skb_gso_segment rpl_skb_gso_segment -struct sk_buff *rpl_skb_gso_segment(struct sk_buff *skb, u32 features); +struct sk_buff *rpl_skb_gso_segment(struct sk_buff *skb, + netdev_features_t features); #define netif_skb_features rpl_netif_skb_features -u32 rpl_netif_skb_features(struct sk_buff *skb); +netdev_features_t rpl_netif_skb_features(struct sk_buff *skb); #define netif_needs_gso rpl_netif_needs_gso static inline int rpl_netif_needs_gso(struct sk_buff *skb, int features) @@ -88,10 +80,6 @@ static inline int rpl_netif_needs_gso(struct sk_buff *skb, int features) } #endif -#if LINUX_VERSION_CODE < KERNEL_VERSION(3,3,0) -typedef u32 netdev_features_t; -#endif - #ifndef HAVE___SKB_GSO_SEGMENT static inline struct sk_buff *__skb_gso_segment(struct sk_buff *skb, netdev_features_t features, @@ -130,4 +118,24 @@ static inline struct net_device *netdev_master_upper_dev_get(struct net_device * int dev_queue_xmit(struct sk_buff *skb); #endif +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,11,0) +static inline struct net_device *netdev_notifier_info_to_dev(void *info) +{ + return info; +} +#endif + +#ifndef HAVE_PCPU_SW_NETSTATS + +#include + +struct pcpu_sw_netstats { + u64 rx_packets; + u64 rx_bytes; + u64 tx_packets; + u64 tx_bytes; + struct u64_stats_sync syncp; +}; +#endif + #endif