| #ifndef _LINUX_MSG_H |
| #define _LINUX_MSG_H |
| |
| #include <linux/list.h> |
| #include <uapi/linux/msg.h> |
| |
| /* one msg_msg structure for each message */ |
| struct msg_msg { |
| struct list_head m_list; |
| long m_type; |
| size_t m_ts; /* message text size */ |
| struct msg_msgseg *next; |
| void *security; |
| /* the actual message follows immediately */ |
| }; |
| |
| /* one msq_queue structure for each present queue on the system */ |
| struct msg_queue { |
| struct kern_ipc_perm q_perm; |
| time_t q_stime; /* last msgsnd time */ |
| time_t q_rtime; /* last msgrcv time */ |
| time_t q_ctime; /* last change time */ |
| unsigned long q_cbytes; /* current number of bytes on queue */ |
| unsigned long q_qnum; /* number of messages in queue */ |
| unsigned long q_qbytes; /* max number of bytes on queue */ |
| pid_t q_lspid; /* pid of last msgsnd */ |
| pid_t q_lrpid; /* last receive pid */ |
| |
| struct list_head q_messages; |
| struct list_head q_receivers; |
| struct list_head q_senders; |
| } __randomize_layout; |
| |
| /* Helper routines for sys_msgsnd and sys_msgrcv */ |
| extern long do_msgsnd(int msqid, long mtype, void __user *mtext, |
| size_t msgsz, int msgflg); |
| extern long do_msgrcv(int msqid, void __user *buf, size_t bufsz, long msgtyp, |
| int msgflg, |
| long (*msg_fill)(void __user *, struct msg_msg *, |
| size_t)); |
| |
| #endif /* _LINUX_MSG_H */ |