1*53ee8cc1Swenshuai.xi #ifndef _LINUX_MSG_H 2*53ee8cc1Swenshuai.xi #define _LINUX_MSG_H 3*53ee8cc1Swenshuai.xi 4*53ee8cc1Swenshuai.xi #include <linux/ipc.h> 5*53ee8cc1Swenshuai.xi 6*53ee8cc1Swenshuai.xi /* ipcs ctl commands */ 7*53ee8cc1Swenshuai.xi #define MSG_STAT 11 8*53ee8cc1Swenshuai.xi #define MSG_INFO 12 9*53ee8cc1Swenshuai.xi 10*53ee8cc1Swenshuai.xi /* msgrcv options */ 11*53ee8cc1Swenshuai.xi #define MSG_NOERROR 010000 /* no error if message is too big */ 12*53ee8cc1Swenshuai.xi #define MSG_EXCEPT 020000 /* recv any msg except of specified type.*/ 13*53ee8cc1Swenshuai.xi 14*53ee8cc1Swenshuai.xi /* Obsolete, used only for backwards compatibility and libc5 compiles */ 15*53ee8cc1Swenshuai.xi struct msqid_ds { 16*53ee8cc1Swenshuai.xi struct ipc_perm msg_perm; 17*53ee8cc1Swenshuai.xi struct msg *msg_first; /* first message on queue,unused */ 18*53ee8cc1Swenshuai.xi struct msg *msg_last; /* last message in queue,unused */ 19*53ee8cc1Swenshuai.xi __kernel_time_t msg_stime; /* last msgsnd time */ 20*53ee8cc1Swenshuai.xi __kernel_time_t msg_rtime; /* last msgrcv time */ 21*53ee8cc1Swenshuai.xi __kernel_time_t msg_ctime; /* last change time */ 22*53ee8cc1Swenshuai.xi unsigned long msg_lcbytes; /* Reuse junk fields for 32 bit */ 23*53ee8cc1Swenshuai.xi unsigned long msg_lqbytes; /* ditto */ 24*53ee8cc1Swenshuai.xi unsigned short msg_cbytes; /* current number of bytes on queue */ 25*53ee8cc1Swenshuai.xi unsigned short msg_qnum; /* number of messages in queue */ 26*53ee8cc1Swenshuai.xi unsigned short msg_qbytes; /* max number of bytes on queue */ 27*53ee8cc1Swenshuai.xi __kernel_ipc_pid_t msg_lspid; /* pid of last msgsnd */ 28*53ee8cc1Swenshuai.xi __kernel_ipc_pid_t msg_lrpid; /* last receive pid */ 29*53ee8cc1Swenshuai.xi }; 30*53ee8cc1Swenshuai.xi 31*53ee8cc1Swenshuai.xi /* Include the definition of msqid64_ds */ 32*53ee8cc1Swenshuai.xi #include <asm/msgbuf.h> 33*53ee8cc1Swenshuai.xi 34*53ee8cc1Swenshuai.xi /* message buffer for msgsnd and msgrcv calls */ 35*53ee8cc1Swenshuai.xi struct msgbuf { 36*53ee8cc1Swenshuai.xi long mtype; /* type of message */ 37*53ee8cc1Swenshuai.xi char mtext[1]; /* message text */ 38*53ee8cc1Swenshuai.xi }; 39*53ee8cc1Swenshuai.xi 40*53ee8cc1Swenshuai.xi /* buffer for msgctl calls IPC_INFO, MSG_INFO */ 41*53ee8cc1Swenshuai.xi struct msginfo { 42*53ee8cc1Swenshuai.xi int msgpool; 43*53ee8cc1Swenshuai.xi int msgmap; 44*53ee8cc1Swenshuai.xi int msgmax; 45*53ee8cc1Swenshuai.xi int msgmnb; 46*53ee8cc1Swenshuai.xi int msgmni; 47*53ee8cc1Swenshuai.xi int msgssz; 48*53ee8cc1Swenshuai.xi int msgtql; 49*53ee8cc1Swenshuai.xi unsigned short msgseg; 50*53ee8cc1Swenshuai.xi }; 51*53ee8cc1Swenshuai.xi 52*53ee8cc1Swenshuai.xi /* 53*53ee8cc1Swenshuai.xi * Scaling factor to compute msgmni: 54*53ee8cc1Swenshuai.xi * the memory dedicated to msg queues (msgmni * msgmnb) should occupy 55*53ee8cc1Swenshuai.xi * at most 1/MSG_MEM_SCALE of the lowmem (see the formula in ipc/msg.c): 56*53ee8cc1Swenshuai.xi * up to 8MB : msgmni = 16 (MSGMNI) 57*53ee8cc1Swenshuai.xi * 4 GB : msgmni = 8K 58*53ee8cc1Swenshuai.xi * more than 16 GB : msgmni = 32K (IPCMNI) 59*53ee8cc1Swenshuai.xi */ 60*53ee8cc1Swenshuai.xi #define MSG_MEM_SCALE 32 61*53ee8cc1Swenshuai.xi 62*53ee8cc1Swenshuai.xi #define MSGMNI 16 /* <= IPCMNI */ /* max # of msg queue identifiers */ 63*53ee8cc1Swenshuai.xi #define MSGMAX 8192 /* <= INT_MAX */ /* max size of message (bytes) */ 64*53ee8cc1Swenshuai.xi #define MSGMNB 16384 /* <= INT_MAX */ /* default max size of a message queue */ 65*53ee8cc1Swenshuai.xi 66*53ee8cc1Swenshuai.xi /* unused */ 67*53ee8cc1Swenshuai.xi #define MSGPOOL (MSGMNI * MSGMNB / 1024) /* size in kbytes of message pool */ 68*53ee8cc1Swenshuai.xi #define MSGTQL MSGMNB /* number of system message headers */ 69*53ee8cc1Swenshuai.xi #define MSGMAP MSGMNB /* number of entries in message map */ 70*53ee8cc1Swenshuai.xi #define MSGSSZ 16 /* message segment size */ 71*53ee8cc1Swenshuai.xi #define __MSGSEG ((MSGPOOL * 1024) / MSGSSZ) /* max no. of segments */ 72*53ee8cc1Swenshuai.xi #define MSGSEG (__MSGSEG <= 0xffff ? __MSGSEG : 0xffff) 73*53ee8cc1Swenshuai.xi 74*53ee8cc1Swenshuai.xi 75*53ee8cc1Swenshuai.xi #endif /* _LINUX_MSG_H */ 76