]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blame - include/linux/if_macvlan.h
macvtap: rework object lifetime rules
[mirror_ubuntu-artful-kernel.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;
47d74275 33 struct macvlan_rx_stats __percpu *rx_stats;
fc0663d6
AB
34 enum macvlan_mode mode;
35 int (*receive)(struct sk_buff *skb);
36 int (*forward)(struct net_device *dev, struct sk_buff *skb);
20d29d7a 37 struct macvtap_queue *tap;
fc0663d6
AB
38};
39
40static inline void macvlan_count_rx(const struct macvlan_dev *vlan,
41 unsigned int len, bool success,
42 bool multicast)
43{
44 struct macvlan_rx_stats *rx_stats;
45
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;
50 if (multicast)
51 rx_stats->multicast++;
52 } else {
53 rx_stats->rx_errors++;
54 }
55}
56
57extern 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));
62
63extern void macvlan_count_rx(const struct macvlan_dev *vlan,
64 unsigned int len, bool success,
65 bool multicast);
66
67extern void macvlan_dellink(struct net_device *dev, struct list_head *head);
68
69extern int macvlan_link_register(struct rtnl_link_ops *ops);
70
71extern netdev_tx_t macvlan_start_xmit(struct sk_buff *skb,
72 struct net_device *dev);
73
74
b863ceb7
PM
75extern struct sk_buff *(*macvlan_handle_frame_hook)(struct sk_buff *);
76
b863ceb7 77#endif /* _LINUX_IF_MACVLAN_H */