]> bbs.cooldavid.org Git - net-next-2.6.git/blame - include/linux/if_macvlan.h
macvlan: allow multiple driver backends
[net-next-2.6.git] / include / linux / if_macvlan.h
CommitLineData
b863ceb7
PM
1#ifndef _LINUX_IF_MACVLAN_H
2#define _LINUX_IF_MACVLAN_H
3
fc0663d6
AB
4#include <linux/if_link.h>
5#include <linux/list.h>
6#include <linux/netdevice.h>
7#include <linux/netlink.h>
8#include <net/netlink.h>
9
10struct macvlan_port;
11struct macvtap_queue;
12
13/**
14 * struct macvlan_rx_stats - MACVLAN percpu rx stats
15 * @rx_packets: number of received packets
16 * @rx_bytes: number of received bytes
17 * @multicast: number of received multicast packets
18 * @rx_errors: number of errors
19 */
20struct macvlan_rx_stats {
21 unsigned long rx_packets;
22 unsigned long rx_bytes;
23 unsigned long multicast;
24 unsigned long rx_errors;
25};
26
27struct macvlan_dev {
28 struct net_device *dev;
29 struct list_head list;
30 struct hlist_node hlist;
31 struct macvlan_port *port;
32 struct net_device *lowerdev;
33 struct macvlan_rx_stats *rx_stats;
34 enum macvlan_mode mode;
35 int (*receive)(struct sk_buff *skb);
36 int (*forward)(struct net_device *dev, struct sk_buff *skb);
37};
38
39static inline void macvlan_count_rx(const struct macvlan_dev *vlan,
40 unsigned int len, bool success,
41 bool multicast)
42{
43 struct macvlan_rx_stats *rx_stats;
44
45 rx_stats = per_cpu_ptr(vlan->rx_stats, smp_processor_id());
46 if (likely(success)) {
47 rx_stats->rx_packets++;;
48 rx_stats->rx_bytes += len;
49 if (multicast)
50 rx_stats->multicast++;
51 } else {
52 rx_stats->rx_errors++;
53 }
54}
55
56extern int macvlan_common_newlink(struct net *src_net, struct net_device *dev,
57 struct nlattr *tb[], struct nlattr *data[],
58 int (*receive)(struct sk_buff *skb),
59 int (*forward)(struct net_device *dev,
60 struct sk_buff *skb));
61
62extern void macvlan_count_rx(const struct macvlan_dev *vlan,
63 unsigned int len, bool success,
64 bool multicast);
65
66extern void macvlan_dellink(struct net_device *dev, struct list_head *head);
67
68extern int macvlan_link_register(struct rtnl_link_ops *ops);
69
70extern netdev_tx_t macvlan_start_xmit(struct sk_buff *skb,
71 struct net_device *dev);
72
73
b863ceb7
PM
74extern struct sk_buff *(*macvlan_handle_frame_hook)(struct sk_buff *);
75
b863ceb7 76#endif /* _LINUX_IF_MACVLAN_H */