Commit | Line | Data |
---|---|---|
b9d8b45e SH |
1 | Sysfs tagging |
2 | ------------- | |
3 | ||
4 | (Taken almost verbatim from Eric Biederman's netns tagging patch | |
5 | commit msg) | |
6 | ||
7 | The problem. Network devices show up in sysfs and with the network | |
8 | namespace active multiple devices with the same name can show up in | |
9 | the same directory, ouch! | |
10 | ||
11 | To avoid that problem and allow existing applications in network | |
12 | namespaces to see the same interface that is currently presented in | |
13 | sysfs, sysfs now has tagging directory support. | |
14 | ||
15 | By using the network namespace pointers as tags to separate out the | |
16 | the sysfs directory entries we ensure that we don't have conflicts | |
17 | in the directories and applications only see a limited set of | |
18 | the network devices. | |
19 | ||
9ba41327 UM |
20 | Each sysfs directory entry may be tagged with a namespace via the |
21 | void *ns member of its kernfs_node. If a directory entry is tagged, | |
22 | then kernfs_node->flags will have a flag between KOBJ_NS_TYPE_NONE | |
23 | and KOBJ_NS_TYPES, and ns will point to the namespace to which it | |
24 | belongs. | |
b9d8b45e | 25 | |
9ba41327 | 26 | Each sysfs superblock's kernfs_super_info contains an array void |
c9f3f2d8 | 27 | *ns[KOBJ_NS_TYPES]. When a task in a tagging namespace |
b9d8b45e SH |
28 | kobj_nstype first mounts sysfs, a new superblock is created. It |
29 | will be differentiated from other sysfs mounts by having its | |
30 | s_fs_info->ns[kobj_nstype] set to the new namespace. Note that | |
31 | through bind mounting and mounts propagation, a task can easily view | |
32 | the contents of other namespaces' sysfs mounts. Therefore, when a | |
33 | namespace exits, it will call kobj_ns_exit() to invalidate any | |
9ba41327 | 34 | kernfs_node->ns pointers pointing to it. |
b9d8b45e SH |
35 | |
36 | Users of this interface: | |
37 | - define a type in the kobj_ns_type enumeration. | |
38 | - call kobj_ns_type_register() with its kobj_ns_type_operations which has | |
39 | - current_ns() which returns current's namespace | |
40 | - netlink_ns() which returns a socket's namespace | |
41 | - initial_ns() which returns the initial namesapce | |
42 | - call kobj_ns_exit() when an individual tag is no longer valid |