blob: c7c8e643895844412f62ac3469229b564d7ee5e5 [file] [log] [blame]
Serge E. Hallynb9d8b452010-05-04 21:45:38 -05001Sysfs tagging
2-------------
3
4(Taken almost verbatim from Eric Biederman's netns tagging patch
5commit msg)
6
7The problem. Network devices show up in sysfs and with the network
8namespace active multiple devices with the same name can show up in
9the same directory, ouch!
10
11To avoid that problem and allow existing applications in network
12namespaces to see the same interface that is currently presented in
13sysfs, sysfs now has tagging directory support.
14
15By using the network namespace pointers as tags to separate out the
16the sysfs directory entries we ensure that we don't have conflicts
17in the directories and applications only see a limited set of
18the network devices.
19
Ulf Magnusson9ba41322015-09-02 14:34:53 +020020Each sysfs directory entry may be tagged with a namespace via the
21void *ns member of its kernfs_node. If a directory entry is tagged,
22then kernfs_node->flags will have a flag between KOBJ_NS_TYPE_NONE
23and KOBJ_NS_TYPES, and ns will point to the namespace to which it
24belongs.
Serge E. Hallynb9d8b452010-05-04 21:45:38 -050025
Ulf Magnusson9ba41322015-09-02 14:34:53 +020026Each sysfs superblock's kernfs_super_info contains an array void
Masanari Iidac9f3f2d2013-07-18 01:29:12 +090027*ns[KOBJ_NS_TYPES]. When a task in a tagging namespace
Serge E. Hallynb9d8b452010-05-04 21:45:38 -050028kobj_nstype first mounts sysfs, a new superblock is created. It
29will be differentiated from other sysfs mounts by having its
30s_fs_info->ns[kobj_nstype] set to the new namespace. Note that
31through bind mounting and mounts propagation, a task can easily view
32the contents of other namespaces' sysfs mounts. Therefore, when a
33namespace exits, it will call kobj_ns_exit() to invalidate any
Ulf Magnusson9ba41322015-09-02 14:34:53 +020034kernfs_node->ns pointers pointing to it.
Serge E. Hallynb9d8b452010-05-04 21:45:38 -050035
36Users 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