xref: /linux/include/uapi/linux/mqueue.h (revision 498495dba268b20e8eadd7fe93c140c68b6cc9d2)
1*e2be04c7SGreg Kroah-Hartman /* SPDX-License-Identifier: LGPL-2.1+ WITH Linux-syscall-note */
2607ca46eSDavid Howells /* Copyright (C) 2003 Krzysztof Benedyczak & Michal Wronski
3607ca46eSDavid Howells 
4607ca46eSDavid Howells    This program is free software; you can redistribute it and/or
5607ca46eSDavid Howells    modify it under the terms of the GNU Lesser General Public
6607ca46eSDavid Howells    License as published by the Free Software Foundation; either
7607ca46eSDavid Howells    version 2.1 of the License, or (at your option) any later version.
8607ca46eSDavid Howells 
9607ca46eSDavid Howells    It is distributed in the hope that it will be useful,
10607ca46eSDavid Howells    but WITHOUT ANY WARRANTY; without even the implied warranty of
11607ca46eSDavid Howells    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12607ca46eSDavid Howells    Lesser General Public License for more details.
13607ca46eSDavid Howells 
14607ca46eSDavid Howells    You should have received a copy of the GNU Lesser General Public
15607ca46eSDavid Howells    License along with this software; if not, write to the Free
16607ca46eSDavid Howells    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
17607ca46eSDavid Howells    02111-1307 USA.  */
18607ca46eSDavid Howells 
19607ca46eSDavid Howells #ifndef _LINUX_MQUEUE_H
20607ca46eSDavid Howells #define _LINUX_MQUEUE_H
21607ca46eSDavid Howells 
221ca5eebbSMike Frysinger #include <linux/types.h>
231ca5eebbSMike Frysinger 
24607ca46eSDavid Howells #define MQ_PRIO_MAX 	32768
25607ca46eSDavid Howells /* per-uid limit of kernel memory used by mqueue, in bytes */
26607ca46eSDavid Howells #define MQ_BYTES_MAX	819200
27607ca46eSDavid Howells 
28607ca46eSDavid Howells struct mq_attr {
2963159f5dSH.J. Lu 	__kernel_long_t	mq_flags;	/* message queue flags			*/
3063159f5dSH.J. Lu 	__kernel_long_t	mq_maxmsg;	/* maximum number of messages		*/
3163159f5dSH.J. Lu 	__kernel_long_t	mq_msgsize;	/* maximum message size			*/
3263159f5dSH.J. Lu 	__kernel_long_t	mq_curmsgs;	/* number of messages currently queued	*/
3363159f5dSH.J. Lu 	__kernel_long_t	__reserved[4];	/* ignored for input, zeroed for output */
34607ca46eSDavid Howells };
35607ca46eSDavid Howells 
36607ca46eSDavid Howells /*
37607ca46eSDavid Howells  * SIGEV_THREAD implementation:
38607ca46eSDavid Howells  * SIGEV_THREAD must be implemented in user space. If SIGEV_THREAD is passed
39607ca46eSDavid Howells  * to mq_notify, then
40607ca46eSDavid Howells  * - sigev_signo must be the file descriptor of an AF_NETLINK socket. It's not
41607ca46eSDavid Howells  *   necessary that the socket is bound.
42607ca46eSDavid Howells  * - sigev_value.sival_ptr must point to a cookie that is NOTIFY_COOKIE_LEN
43607ca46eSDavid Howells  *   bytes long.
44607ca46eSDavid Howells  * If the notification is triggered, then the cookie is sent to the netlink
45607ca46eSDavid Howells  * socket. The last byte of the cookie is replaced with the NOTIFY_?? codes:
46607ca46eSDavid Howells  * NOTIFY_WOKENUP if the notification got triggered, NOTIFY_REMOVED if it was
47607ca46eSDavid Howells  * removed, either due to a close() on the message queue fd or due to a
48607ca46eSDavid Howells  * mq_notify() that removed the notification.
49607ca46eSDavid Howells  */
50607ca46eSDavid Howells #define NOTIFY_NONE	0
51607ca46eSDavid Howells #define NOTIFY_WOKENUP	1
52607ca46eSDavid Howells #define NOTIFY_REMOVED	2
53607ca46eSDavid Howells 
54607ca46eSDavid Howells #define NOTIFY_COOKIE_LEN	32
55607ca46eSDavid Howells 
56607ca46eSDavid Howells #endif
57