xref: /dragonfly/lib/libc/sysvipc/sysvipc_ipc.h (revision ff86f401)
182657471SMarkus Pfeiffer /**
282657471SMarkus Pfeiffer  * Copyright (c) 2013 Larisa Grigore<larisagrigore@gmail.com>.
382657471SMarkus Pfeiffer  * All rights reserved.
482657471SMarkus Pfeiffer  *
582657471SMarkus Pfeiffer  * Redistribution and use in source and binary forms, with or without
682657471SMarkus Pfeiffer  * modification, are permitted provided that the following conditions
782657471SMarkus Pfeiffer  * are met:
882657471SMarkus Pfeiffer  * 1. Redistributions of source code must retain the above copyright
982657471SMarkus Pfeiffer  *    notice, this list of conditions and the following disclaimer.
1082657471SMarkus Pfeiffer  * 2. Redistributions in binary form must reproduce the above copyright
1182657471SMarkus Pfeiffer  *    notice, this list of conditions and the following disclaimer in the
1282657471SMarkus Pfeiffer  *    documentation and/or other materials provided with the distribution.
1382657471SMarkus Pfeiffer  * 3. The name of the author may not be used to endorse or promote products
1482657471SMarkus Pfeiffer  *    derived from this software without specific prior written permission.
1582657471SMarkus Pfeiffer  *
1682657471SMarkus Pfeiffer  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
1782657471SMarkus Pfeiffer  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
1882657471SMarkus Pfeiffer  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
1982657471SMarkus Pfeiffer  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
2082657471SMarkus Pfeiffer  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
2182657471SMarkus Pfeiffer  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2282657471SMarkus Pfeiffer  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2382657471SMarkus Pfeiffer  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2482657471SMarkus Pfeiffer  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
2582657471SMarkus Pfeiffer  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2682657471SMarkus Pfeiffer  */
2782657471SMarkus Pfeiffer 
28*ff86f401SSascha Wildner #ifndef _SYSVIPC_IPC_H_
29*ff86f401SSascha Wildner #define _SYSVIPC_IPC_H_
3082657471SMarkus Pfeiffer 
3182657471SMarkus Pfeiffer #define MAXSIZE		100
3282657471SMarkus Pfeiffer 
3382657471SMarkus Pfeiffer #define IPC_INITIALIZED	1
3482657471SMarkus Pfeiffer 
3582657471SMarkus Pfeiffer #define SHMGET		1
3682657471SMarkus Pfeiffer #define SEMGET		2
3782657471SMarkus Pfeiffer #define MSGGET		3
3882657471SMarkus Pfeiffer #define UNDOGET		4
3982657471SMarkus Pfeiffer 
4082657471SMarkus Pfeiffer #define SHMAT		5
4182657471SMarkus Pfeiffer #define SHMDT		6
4282657471SMarkus Pfeiffer #define SHMCTL		7
4382657471SMarkus Pfeiffer 
4482657471SMarkus Pfeiffer #define SEMOP		8
4582657471SMarkus Pfeiffer #define SEMCTL		9
4682657471SMarkus Pfeiffer 
4782657471SMarkus Pfeiffer #define PIPE_READ	0
4882657471SMarkus Pfeiffer #define PIPE_WRITE	1
4982657471SMarkus Pfeiffer 
5082657471SMarkus Pfeiffer #define	IPCID_TO_IX(id)		((id) & 0xffff)
5182657471SMarkus Pfeiffer #define	IPCID_TO_SEQ(id)	(((id) >> 16) & 0xffff)
5282657471SMarkus Pfeiffer #define	IXSEQ_TO_IPCID(ix,perm)	(((perm.seq) << 16) | (ix & 0xffff))
5382657471SMarkus Pfeiffer 
5482657471SMarkus Pfeiffer #include <sys/shm.h>
5582657471SMarkus Pfeiffer #include "sysvipc_utils.h"
5682657471SMarkus Pfeiffer 
5782657471SMarkus Pfeiffer /* Structures used to send/receive
5882657471SMarkus Pfeiffer  * messages to/from daemon.
5982657471SMarkus Pfeiffer  */
6082657471SMarkus Pfeiffer struct shmget_msg {
6182657471SMarkus Pfeiffer 	key_t key;
6282657471SMarkus Pfeiffer 	size_t size;
6382657471SMarkus Pfeiffer 	int shmflg;
6482657471SMarkus Pfeiffer 	int type;
6582657471SMarkus Pfeiffer };
6682657471SMarkus Pfeiffer 
6782657471SMarkus Pfeiffer struct shmat_msg {
6882657471SMarkus Pfeiffer 	int shmid;
6982657471SMarkus Pfeiffer 	const void *shmaddr;
7082657471SMarkus Pfeiffer 	int shmflg;
7182657471SMarkus Pfeiffer 	size_t size;
7282657471SMarkus Pfeiffer };
7382657471SMarkus Pfeiffer 
7482657471SMarkus Pfeiffer struct shmdt_msg {
7582657471SMarkus Pfeiffer 	const void *shmaddr;
7682657471SMarkus Pfeiffer };
7782657471SMarkus Pfeiffer 
7882657471SMarkus Pfeiffer struct shmctl_msg {
7982657471SMarkus Pfeiffer 	int shmid;
8082657471SMarkus Pfeiffer 	int cmd;
8182657471SMarkus Pfeiffer 	struct shmid_ds buf;
8282657471SMarkus Pfeiffer };
8382657471SMarkus Pfeiffer 
8482657471SMarkus Pfeiffer struct sysvipc_msg {
8582657471SMarkus Pfeiffer 	int type;
8682657471SMarkus Pfeiffer 	char data[0];
8782657471SMarkus Pfeiffer };
8882657471SMarkus Pfeiffer 
8982657471SMarkus Pfeiffer struct semget_msg {
9082657471SMarkus Pfeiffer 	key_t key;
9182657471SMarkus Pfeiffer 	int nsems;
9282657471SMarkus Pfeiffer 	int shmflg;
9382657471SMarkus Pfeiffer };
9482657471SMarkus Pfeiffer 
9582657471SMarkus Pfeiffer /* Send/receive messages. */
9682657471SMarkus Pfeiffer int send_message(int, int, char *, int);
9782657471SMarkus Pfeiffer int receive_type_message(int);
9882657471SMarkus Pfeiffer int receive_message(int, char *, int);
9982657471SMarkus Pfeiffer 
10082657471SMarkus Pfeiffer /* sysv ipc structures initialization. */
10182657471SMarkus Pfeiffer int is_sysvinit(void);
10282657471SMarkus Pfeiffer int sysvinit(void);
10382657471SMarkus Pfeiffer int sysvexit(void);
10482657471SMarkus Pfeiffer 
105*ff86f401SSascha Wildner #endif /* !_SYSVIPC_IPC_H_ */
106