Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
include
linux
if_macvlan.h
Go to the documentation of this file.
1
#ifndef _LINUX_IF_MACVLAN_H
2
#define _LINUX_IF_MACVLAN_H
3
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
#include <
linux/u64_stats_sync.h
>
10
11
#if defined(CONFIG_MACVTAP) || defined(CONFIG_MACVTAP_MODULE)
12
struct
socket
*
macvtap_get_socket
(
struct
file
*);
13
#else
14
#include <
linux/err.h
>
15
#include <linux/errno.h>
16
struct
file
;
17
struct
socket
;
18
static
inline
struct
socket
*
macvtap_get_socket
(
struct
file
*
f
)
19
{
20
return
ERR_PTR(-
EINVAL
);
21
}
22
#endif
/* CONFIG_MACVTAP */
23
24
struct
macvlan_port
;
25
struct
macvtap_queue
;
26
38
struct
macvlan_pcpu_stats
{
39
u64
rx_packets
;
40
u64
rx_bytes
;
41
u64
rx_multicast
;
42
u64
tx_packets
;
43
u64
tx_bytes
;
44
struct
u64_stats_sync
syncp
;
45
u32
rx_errors
;
46
u32
tx_dropped
;
47
};
48
49
/*
50
* Maximum times a macvtap device can be opened. This can be used to
51
* configure the number of receive queue, e.g. for multiqueue virtio.
52
*/
53
#define MAX_MACVTAP_QUEUES (NR_CPUS < 16 ? NR_CPUS : 16)
54
55
struct
macvlan_dev
{
56
struct
net_device
*
dev
;
57
struct
list_head
list
;
58
struct
hlist_node
hlist
;
59
struct
macvlan_port
*
port
;
60
struct
net_device
*
lowerdev
;
61
struct
macvlan_pcpu_stats
__percpu
*
pcpu_stats
;
62
enum
macvlan_mode
mode
;
63
u16
flags
;
64
int
(*
receive
)(
struct
sk_buff
*
skb
);
65
int
(*
forward
)(
struct
net_device
*
dev
,
struct
sk_buff
*
skb
);
66
struct
macvtap_queue
*
taps
[
MAX_MACVTAP_QUEUES
];
67
int
numvtaps
;
68
int
minor
;
69
};
70
71
static
inline
void
macvlan_count_rx(
const
struct
macvlan_dev
*
vlan
,
72
unsigned
int
len,
bool
success,
73
bool
multicast)
74
{
75
if
(
likely
(success)) {
76
struct
macvlan_pcpu_stats
*pcpu_stats;
77
78
pcpu_stats =
this_cpu_ptr
(vlan->
pcpu_stats
);
79
u64_stats_update_begin(&pcpu_stats->
syncp
);
80
pcpu_stats->
rx_packets
++;
81
pcpu_stats->
rx_bytes
+= len;
82
if
(multicast)
83
pcpu_stats->
rx_multicast
++;
84
u64_stats_update_end(&pcpu_stats->
syncp
);
85
}
else
{
86
this_cpu_inc
(vlan->
pcpu_stats
->rx_errors);
87
}
88
}
89
90
extern
void
macvlan_common_setup
(
struct
net_device
*
dev
);
91
92
extern
int
macvlan_common_newlink
(
struct
net
*src_net,
struct
net_device
*
dev
,
93
struct
nlattr
*
tb
[],
struct
nlattr
*
data
[],
94
int
(*receive)(
struct
sk_buff
*
skb
),
95
int
(*forward)(
struct
net_device
*dev,
96
struct
sk_buff
*skb));
97
98
extern
void
macvlan_count_rx(
const
struct
macvlan_dev
*
vlan
,
99
unsigned
int
len,
bool
success,
100
bool
multicast);
101
102
extern
void
macvlan_dellink
(
struct
net_device
*dev,
struct
list_head
*
head
);
103
104
extern
int
macvlan_link_register
(
struct
rtnl_link_ops
*ops);
105
106
extern
netdev_tx_t
macvlan_start_xmit
(
struct
sk_buff
*skb,
107
struct
net_device
*dev);
108
109
#endif
/* _LINUX_IF_MACVLAN_H */
Generated on Thu Jan 10 2013 14:51:34 for Linux Kernel by
1.8.2