1 #ifndef _LINUX_IF_MACVLAN_H
2 #define _LINUX_IF_MACVLAN_H
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>
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
20 struct macvlan_rx_stats {
21 unsigned long rx_packets;
22 unsigned long rx_bytes;
23 unsigned long multicast;
24 unsigned long rx_errors;
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 __percpu *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 struct macvtap_queue *tap;
40 static inline void macvlan_count_rx(const struct macvlan_dev *vlan,
41 unsigned int len, bool success,
44 struct macvlan_rx_stats *rx_stats;
46 rx_stats = per_cpu_ptr(vlan->rx_stats, smp_processor_id());
47 if (likely(success)) {
48 rx_stats->rx_packets++;;
49 rx_stats->rx_bytes += len;
51 rx_stats->multicast++;
53 rx_stats->rx_errors++;
57 extern int macvlan_common_newlink(struct net *src_net, struct net_device *dev,
58 struct nlattr *tb[], struct nlattr *data[],
59 int (*receive)(struct sk_buff *skb),
60 int (*forward)(struct net_device *dev,
61 struct sk_buff *skb));
63 extern void macvlan_count_rx(const struct macvlan_dev *vlan,
64 unsigned int len, bool success,
67 extern void macvlan_dellink(struct net_device *dev, struct list_head *head);
69 extern int macvlan_link_register(struct rtnl_link_ops *ops);
71 extern netdev_tx_t macvlan_start_xmit(struct sk_buff *skb,
72 struct net_device *dev);
75 extern struct sk_buff *(*macvlan_handle_frame_hook)(struct sk_buff *);
77 #endif /* _LINUX_IF_MACVLAN_H */