1#ifndef _LINUX_MSG_H
2#define _LINUX_MSG_H
3
4#include <linux/list.h>
5#include <uapi/linux/msg.h>
6
7/* one msg_msg structure for each message */
8struct msg_msg {
9	struct list_head m_list;
10	long m_type;
11	size_t m_ts;		/* message text size */
12	struct msg_msgseg *next;
13	void *security;
14	/* the actual message follows immediately */
15};
16
17/* one msq_queue structure for each present queue on the system */
18struct msg_queue {
19	struct kern_ipc_perm q_perm;
20	time_t q_stime;			/* last msgsnd time */
21	time_t q_rtime;			/* last msgrcv time */
22	time_t q_ctime;			/* last change time */
23	unsigned long q_cbytes;		/* current number of bytes on queue */
24	unsigned long q_qnum;		/* number of messages in queue */
25	unsigned long q_qbytes;		/* max number of bytes on queue */
26	pid_t q_lspid;			/* pid of last msgsnd */
27	pid_t q_lrpid;			/* last receive pid */
28
29	struct list_head q_messages;
30	struct list_head q_receivers;
31	struct list_head q_senders;
32};
33
34/* Helper routines for sys_msgsnd and sys_msgrcv */
35extern long do_msgsnd(int msqid, long mtype, void __user *mtext,
36			size_t msgsz, int msgflg);
37extern long do_msgrcv(int msqid, void __user *buf, size_t bufsz, long msgtyp,
38		      int msgflg,
39		      long (*msg_fill)(void __user *, struct msg_msg *,
40				       size_t));
41
42#endif /* _LINUX_MSG_H */
43