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
net
netns
generic.h
Go to the documentation of this file.
1
/*
2
* generic net pointers
3
*/
4
5
#ifndef __NET_GENERIC_H__
6
#define __NET_GENERIC_H__
7
8
#include <
linux/bug.h
>
9
#include <
linux/rcupdate.h
>
10
11
/*
12
* Generic net pointers are to be used by modules to put some private
13
* stuff on the struct net without explicit struct net modification
14
*
15
* The rules are simple:
16
* 1. set pernet_operations->id. After register_pernet_device you
17
* will have the id of your private pointer.
18
* 2. set pernet_operations->size to have the code allocate and free
19
* a private structure pointed to from struct net.
20
* 3. do not change this pointer while the net is alive;
21
* 4. do not try to have any private reference on the net_generic object.
22
*
23
* After accomplishing all of the above, the private pointer can be
24
* accessed with the net_generic() call.
25
*/
26
27
struct
net_generic
{
28
unsigned
int
len
;
29
struct
rcu_head
rcu
;
30
31
void
*
ptr
[0];
32
};
33
34
static
inline
void
*
net_generic
(
const
struct
net
*
net
,
int
id
)
35
{
36
struct
net_generic
*ng;
37
void
*
ptr
;
38
39
rcu_read_lock();
40
ng =
rcu_dereference
(net->
gen
);
41
BUG_ON
(
id
== 0 ||
id
> ng->
len
);
42
ptr = ng->
ptr
[
id
- 1];
43
rcu_read_unlock();
44
45
BUG_ON
(!ptr);
46
return
ptr
;
47
}
48
#endif
Generated on Thu Jan 10 2013 12:56:45 for Linux Kernel by
1.8.2