net: replace hooks in __netif_receive_skb V5
What this patch does is it removes two receive frame hooks (for bridge and for macvlan) from __netif_receive_skb. These are replaced them with a single hook for both. It only supports one hook per device because it makes no sense to do bridging and macvlan on the same device. Then a network driver (of virtual netdev like macvlan or bridge) can register an rx_handler for needed net device. Signed-off-by: Jiri Pirko <jpirko@redhat.com> Signed-off-by: Stephen Hemminger <shemminger@vyatta.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
20c59de2e6
commit
ab95bfe01f
@@ -381,6 +381,8 @@ enum gro_result {
|
||||
};
|
||||
typedef enum gro_result gro_result_t;
|
||||
|
||||
typedef struct sk_buff *rx_handler_func_t(struct sk_buff *skb);
|
||||
|
||||
extern void __napi_schedule(struct napi_struct *n);
|
||||
|
||||
static inline int napi_disable_pending(struct napi_struct *n)
|
||||
@@ -957,6 +959,7 @@ struct net_device {
|
||||
#endif
|
||||
|
||||
struct netdev_queue rx_queue;
|
||||
rx_handler_func_t *rx_handler;
|
||||
|
||||
struct netdev_queue *_tx ____cacheline_aligned_in_smp;
|
||||
|
||||
@@ -1689,6 +1692,10 @@ static inline void napi_free_frags(struct napi_struct *napi)
|
||||
napi->skb = NULL;
|
||||
}
|
||||
|
||||
extern int netdev_rx_handler_register(struct net_device *dev,
|
||||
rx_handler_func_t *rx_handler);
|
||||
extern void netdev_rx_handler_unregister(struct net_device *dev);
|
||||
|
||||
extern void netif_nit_deliver(struct sk_buff *skb);
|
||||
extern int dev_valid_name(const char *name);
|
||||
extern int dev_ioctl(struct net *net, unsigned int cmd, void __user *);
|
||||
|
Reference in New Issue
Block a user