aboutsummaryrefslogtreecommitdiff
path: root/include/linux/msg.h
blob: 20bcc5a145a73fd4310f6f71c19b190dc2c58775 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#ifndef _LINUX_MSG_H
#define _LINUX_MSG_H

#include <linux/ipc.h>

#define MSG_STAT 11
#define MSG_INFO 12

#define MSG_NOERROR     010000  
#define MSG_EXCEPT      020000  

struct msqid_ds {
	struct ipc_perm msg_perm;
	struct msg *msg_first;		
	struct msg *msg_last;		
	__kernel_time_t msg_stime;	
	__kernel_time_t msg_rtime;	
	__kernel_time_t msg_ctime;	
	unsigned long  msg_lcbytes;	
	unsigned long  msg_lqbytes;	
	unsigned short msg_cbytes;	
	unsigned short msg_qnum;	
	unsigned short msg_qbytes;	
	__kernel_ipc_pid_t msg_lspid;	
	__kernel_ipc_pid_t msg_lrpid;	
};

#include <asm/msgbuf.h>

struct msgbuf {
	long mtype;         
	char mtext[1];      
};

struct msginfo {
	int msgpool;
	int msgmap; 
	int msgmax; 
	int msgmnb; 
	int msgmni; 
	int msgssz; 
	int msgtql; 
	unsigned short  msgseg; 
};

#define MSG_MEM_SCALE 32

#define MSGMNI    16        
#define MSGMAX  8192      
#define MSGMNB 16384      

#define MSGPOOL (MSGMNI * MSGMNB / 1024) 
#define MSGTQL  MSGMNB            
#define MSGMAP  MSGMNB            
#define MSGSSZ  16                
#define __MSGSEG ((MSGPOOL * 1024) / MSGSSZ) 
#define MSGSEG (__MSGSEG <= 0xffff ? __MSGSEG : 0xffff)

#ifdef __KERNEL__
#include <linux/list.h>

struct msg_msg {
	struct list_head m_list;
	long m_type;
	size_t m_ts;		/* message text size */
	struct msg_msgseg* next;
	void *security;
	
};

struct msg_queue {
	struct kern_ipc_perm q_perm;
	time_t q_stime;			
	time_t q_rtime;			
	time_t q_ctime;			
	unsigned long q_cbytes;		
	unsigned long q_qnum;		
	unsigned long q_qbytes;		
	pid_t q_lspid;			
	pid_t q_lrpid;			

	struct list_head q_messages;
	struct list_head q_receivers;
	struct list_head q_senders;
};

extern long do_msgsnd(int msqid, long mtype, void __user *mtext,
			size_t msgsz, int msgflg);
extern long do_msgrcv(int msqid, long *pmtype, void __user *mtext,
			size_t msgsz, long msgtyp, int msgflg);

#endif 

#endif