linux/include/linux/ipc_namespace.h
<<
>>
Prefs
   1#ifndef __IPC_NAMESPACE_H__
   2#define __IPC_NAMESPACE_H__
   3
   4#include <linux/err.h>
   5#include <linux/idr.h>
   6#include <linux/rwsem.h>
   7#include <linux/notifier.h>
   8
   9/*
  10 * ipc namespace events
  11 */
  12#define IPCNS_MEMCHANGED   0x00000001   /* Notify lowmem size changed */
  13#define IPCNS_CREATED  0x00000002   /* Notify new ipc namespace created */
  14#define IPCNS_REMOVED  0x00000003   /* Notify ipc namespace removed */
  15
  16#define IPCNS_CALLBACK_PRI 0
  17
  18
  19struct ipc_ids {
  20        int in_use;
  21        unsigned short seq;
  22        unsigned short seq_max;
  23        struct rw_semaphore rw_mutex;
  24        struct idr ipcs_idr;
  25};
  26
  27struct ipc_namespace {
  28        struct kref     kref;
  29        struct ipc_ids  ids[3];
  30
  31        int             sem_ctls[4];
  32        int             used_sems;
  33
  34        int             msg_ctlmax;
  35        int             msg_ctlmnb;
  36        int             msg_ctlmni;
  37        atomic_t        msg_bytes;
  38        atomic_t        msg_hdrs;
  39        int             auto_msgmni;
  40
  41        size_t          shm_ctlmax;
  42        size_t          shm_ctlall;
  43        int             shm_ctlmni;
  44        int             shm_tot;
  45
  46        struct notifier_block ipcns_nb;
  47};
  48
  49extern struct ipc_namespace init_ipc_ns;
  50extern atomic_t nr_ipc_ns;
  51
  52#ifdef CONFIG_SYSVIPC
  53#define INIT_IPC_NS(ns)         .ns             = &init_ipc_ns,
  54
  55extern int register_ipcns_notifier(struct ipc_namespace *);
  56extern int cond_register_ipcns_notifier(struct ipc_namespace *);
  57extern void unregister_ipcns_notifier(struct ipc_namespace *);
  58extern int ipcns_notify(unsigned long);
  59
  60#else /* CONFIG_SYSVIPC */
  61#define INIT_IPC_NS(ns)
  62#endif /* CONFIG_SYSVIPC */
  63
  64#if defined(CONFIG_SYSVIPC) && defined(CONFIG_IPC_NS)
  65extern void free_ipc_ns(struct kref *kref);
  66extern struct ipc_namespace *copy_ipcs(unsigned long flags,
  67                                       struct ipc_namespace *ns);
  68extern void free_ipcs(struct ipc_namespace *ns, struct ipc_ids *ids,
  69                      void (*free)(struct ipc_namespace *,
  70                                   struct kern_ipc_perm *));
  71
  72static inline struct ipc_namespace *get_ipc_ns(struct ipc_namespace *ns)
  73{
  74        if (ns)
  75                kref_get(&ns->kref);
  76        return ns;
  77}
  78
  79static inline void put_ipc_ns(struct ipc_namespace *ns)
  80{
  81        kref_put(&ns->kref, free_ipc_ns);
  82}
  83#else
  84static inline struct ipc_namespace *copy_ipcs(unsigned long flags,
  85                struct ipc_namespace *ns)
  86{
  87        if (flags & CLONE_NEWIPC)
  88                return ERR_PTR(-EINVAL);
  89
  90        return ns;
  91}
  92
  93static inline struct ipc_namespace *get_ipc_ns(struct ipc_namespace *ns)
  94{
  95        return ns;
  96}
  97
  98static inline void put_ipc_ns(struct ipc_namespace *ns)
  99{
 100}
 101#endif
 102#endif
 103
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.