1Sysfs tagging
   4(Taken almost verbatim from Eric Biederman's netns tagging patch
   5commit msg)
   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!
  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.
  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.
  20Each sysfs directory entry may be tagged with zero or one
  21namespaces.  A sysfs_dirent is augmented with a void *s_ns.  If a
  22directory entry is tagged, then sysfs_dirent->s_flags will have a
  23flag between KOBJ_NS_TYPE_NONE and KOBJ_NS_TYPES, and s_ns will
  24point to the namespace to which it belongs.
  26Each sysfs superblock's sysfs_super_info contains an array void
  27*ns[KOBJ_NS_TYPES].  When a a task in a tagging namespace
  28kobj_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
  34sysfs_dirent->s_ns pointers pointing to it.
  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