kobject_ns.h 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. // SPDX-License-Identifier: GPL-2.0
  2. /* Kernel object name space definitions
  3. *
  4. * Copyright (c) 2002-2003 Patrick Mochel
  5. * Copyright (c) 2002-2003 Open Source Development Labs
  6. * Copyright (c) 2006-2008 Greg Kroah-Hartman <greg@kroah.com>
  7. * Copyright (c) 2006-2008 Novell Inc.
  8. *
  9. * Split from kobject.h by David Howells (dhowells@redhat.com)
  10. *
  11. * Please read Documentation/core-api/kobject.rst before using the kobject
  12. * interface, ESPECIALLY the parts about reference counts and object
  13. * destructors.
  14. */
  15. #ifndef _LINUX_KOBJECT_NS_H
  16. #define _LINUX_KOBJECT_NS_H
  17. struct sock;
  18. struct kobject;
  19. /*
  20. * Namespace types which are used to tag kobjects and sysfs entries.
  21. * Network namespace will likely be the first.
  22. */
  23. enum kobj_ns_type {
  24. KOBJ_NS_TYPE_NONE = 0,
  25. KOBJ_NS_TYPE_NET,
  26. KOBJ_NS_TYPES
  27. };
  28. /*
  29. * Callbacks so sysfs can determine namespaces
  30. * @grab_current_ns: return a new reference to calling task's namespace
  31. * @netlink_ns: return namespace to which a sock belongs (right?)
  32. * @initial_ns: return the initial namespace (i.e. init_net_ns)
  33. * @drop_ns: drops a reference to namespace
  34. */
  35. struct kobj_ns_type_operations {
  36. enum kobj_ns_type type;
  37. bool (*current_may_mount)(void);
  38. void *(*grab_current_ns)(void);
  39. const void *(*netlink_ns)(struct sock *sk);
  40. const void *(*initial_ns)(void);
  41. void (*drop_ns)(void *);
  42. };
  43. int kobj_ns_type_register(const struct kobj_ns_type_operations *ops);
  44. int kobj_ns_type_registered(enum kobj_ns_type type);
  45. const struct kobj_ns_type_operations *kobj_child_ns_ops(struct kobject *parent);
  46. const struct kobj_ns_type_operations *kobj_ns_ops(struct kobject *kobj);
  47. bool kobj_ns_current_may_mount(enum kobj_ns_type type);
  48. void *kobj_ns_grab_current(enum kobj_ns_type type);
  49. const void *kobj_ns_netlink(enum kobj_ns_type type, struct sock *sk);
  50. const void *kobj_ns_initial(enum kobj_ns_type type);
  51. void kobj_ns_drop(enum kobj_ns_type type, void *ns);
  52. #endif /* _LINUX_KOBJECT_NS_H */