X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;ds=sidebyside;f=datapath%2Flinux%2Fcompat%2Finclude%2Flinux%2Fnetdevice.h;h=e04f308cf29d2237b649cebf0474f69bfcfd8b70;hb=4b0424809b823101c969a0691fc1db0c880ae64a;hp=2b2c85511fba5a74c07ca288529e2f49f7fdf59d;hpb=2bd135b5f88b1633042fe4dc99119bfbe14bd73e;p=sliver-openvswitch.git diff --git a/datapath/linux/compat/include/linux/netdevice.h b/datapath/linux/compat/include/linux/netdevice.h index 2b2c85511..e04f308cf 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, @@ -118,6 +106,11 @@ static inline void netdev_upper_dev_unlink(struct net_device *dev, struct net_device *upper_dev) { } + +static inline struct net_device *netdev_master_upper_dev_get(struct net_device *dev) +{ + return NULL; +} #endif #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,37) @@ -125,4 +118,11 @@ static inline void netdev_upper_dev_unlink(struct net_device *dev, 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 + #endif