Annotation of XNU/bsd/sys/msg.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
                      3:  *
                      4:  * @APPLE_LICENSE_HEADER_START@
                      5:  * 
                      6:  * The contents of this file constitute Original Code as defined in and
                      7:  * are subject to the Apple Public Source License Version 1.1 (the
                      8:  * "License").  You may not use this file except in compliance with the
                      9:  * License.  Please obtain a copy of the License at
                     10:  * http://www.apple.com/publicsource and read it before using this file.
                     11:  * 
                     12:  * This Original Code and all software distributed under the License are
                     13:  * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
                     14:  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
                     15:  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
                     16:  * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
                     17:  * License for the specific language governing rights and limitations
                     18:  * under the License.
                     19:  * 
                     20:  * @APPLE_LICENSE_HEADER_END@
                     21:  */
                     22: /*     $NetBSD: msg.h,v 1.4 1994/06/29 06:44:43 cgd Exp $      */
                     23: 
                     24: /*
                     25:  * SVID compatible msg.h file
                     26:  *
                     27:  * Author:  Daniel Boulet
                     28:  *
                     29:  * Copyright 1993 Daniel Boulet and RTMX Inc.
                     30:  *
                     31:  * This system call was implemented by Daniel Boulet under contract from RTMX.
                     32:  *
                     33:  * Redistribution and use in source forms, with and without modification,
                     34:  * are permitted provided that this entire comment appears intact.
                     35:  *
                     36:  * Redistribution in binary form may occur without any restrictions.
                     37:  * Obviously, it would be nice if you gave credit where credit is due
                     38:  * but requiring it would be too onerous.
                     39:  *
                     40:  * This software is provided ``AS IS'' without any warranties of any kind.
                     41:  */
                     42: 
                     43: #ifndef _SYS_MSG_H_
                     44: #define _SYS_MSG_H_
                     45: 
                     46: #include <sys/ipc.h>
                     47: 
                     48: /*
                     49:  * The MSG_NOERROR identifier value, the msqid_ds struct and the msg struct
                     50:  * are as defined by the SV API Intel 386 Processor Supplement.
                     51:  */
                     52: 
                     53: #define MSG_NOERROR    010000          /* don't complain about too long msgs */
                     54: 
                     55: struct msqid_ds {
                     56:        struct  ipc_perm msg_perm;      /* msg queue permission bits */
                     57:        struct  msg *msg_first; /* first message in the queue */
                     58:        struct  msg *msg_last;  /* last message in the queue */
                     59:        u_long  msg_cbytes;     /* number of bytes in use on the queue */
                     60:        u_long  msg_qnum;       /* number of msgs in the queue */
                     61:        u_long  msg_qbytes;     /* max # of bytes on the queue */
                     62:        pid_t   msg_lspid;      /* pid of last msgsnd() */
                     63:        pid_t   msg_lrpid;      /* pid of last msgrcv() */
                     64:        time_t  msg_stime;      /* time of last msgsnd() */
                     65:        long    msg_pad1;
                     66:        time_t  msg_rtime;      /* time of last msgrcv() */
                     67:        long    msg_pad2;
                     68:        time_t  msg_ctime;      /* time of last msgctl() */
                     69:        long    msg_pad3;
                     70:        long    msg_pad4[4];
                     71: };
                     72: 
                     73: struct msg {
                     74:        struct  msg *msg_next;  /* next msg in the chain */
                     75:        long    msg_type;       /* type of this message */
                     76:                                /* >0 -> type of this message */
                     77:                                /* 0 -> free header */
                     78:        u_short msg_ts;         /* size of this message */
                     79:        short   msg_spot;       /* location of start of msg in buffer */
                     80: };
                     81: 
                     82: /*
                     83:  * Structure describing a message.  The SVID doesn't suggest any
                     84:  * particular name for this structure.  There is a reference in the
                     85:  * msgop man page that reads "The structure mymsg is an example of what
                     86:  * this user defined buffer might look like, and includes the following
                     87:  * members:".  This sentence is followed by two lines equivalent
                     88:  * to the mtype and mtext field declarations below.  It isn't clear
                     89:  * if "mymsg" refers to the naem of the structure type or the name of an
                     90:  * instance of the structure...
                     91:  */
                     92: struct mymsg {
                     93:        long    mtype;          /* message type (+ve integer) */
                     94:        char    mtext[1];       /* message body */
                     95: };
                     96: 
                     97: /*
                     98:  * Based on the configuration parameters described in an SVR2 (yes, two)
                     99:  * config(1m) man page.
                    100:  *
                    101:  * Each message is broken up and stored in segments that are msgssz bytes
                    102:  * long.  For efficiency reasons, this should be a power of two.  Also,
                    103:  * it doesn't make sense if it is less than 8 or greater than about 256.
                    104:  * Consequently, msginit in kern/sysv_msg.c checks that msgssz is a power of
                    105:  * two between 8 and 1024 inclusive (and panic's if it isn't).
                    106:  */
                    107: struct msginfo {
                    108:        int     msgmax,         /* max chars in a message */
                    109:                msgmni,         /* max message queue identifiers */
                    110:                msgmnb,         /* max chars in a queue */
                    111:                msgtql,         /* max messages in system */
                    112:                msgssz,         /* size of a message segment (see notes above) */
                    113:                msgseg;         /* number of message segments */
                    114: };
                    115: #ifdef KERNEL
                    116: extern struct msginfo  msginfo;
                    117: 
                    118: #ifndef MSGSSZ
                    119: #define MSGSSZ 8               /* Each segment must be 2^N long */
                    120: #endif
                    121: #ifndef MSGSEG
                    122: #define MSGSEG 2048            /* must be less than 32767 */
                    123: #endif
                    124: #define MSGMAX (MSGSSZ*MSGSEG)
                    125: #ifndef MSGMNB
                    126: #define MSGMNB 2048            /* max # of bytes in a queue */
                    127: #endif
                    128: #ifndef MSGMNI
                    129: #define MSGMNI 40
                    130: #endif
                    131: #ifndef MSGTQL
                    132: #define MSGTQL 40
                    133: #endif
                    134: 
                    135: /*
                    136:  * macros to convert between msqid_ds's and msqid's.
                    137:  * (specific to this implementation)
                    138:  */
                    139: #define MSQID(ix,ds)   ((ix) & 0xffff | (((ds).msg_perm.seq << 16) & 0xffff0000))
                    140: #define MSQID_IX(id)   ((id) & 0xffff)
                    141: #define MSQID_SEQ(id)  (((id) >> 16) & 0xffff)
                    142: 
                    143: /*
                    144:  * The rest of this file is specific to this particular implementation.
                    145:  */
                    146: 
                    147: 
                    148: /*
                    149:  * Stuff allocated in machdep.h
                    150:  */
                    151: struct msgmap {
                    152:        short   next;           /* next segment in buffer */
                    153:                                /* -1 -> available */
                    154:                                /* 0..(MSGSEG-1) -> index of next segment */
                    155: };
                    156: 
                    157: extern char *msgpool;          /* MSGMAX byte long msg buffer pool */
                    158: extern struct msgmap *msgmaps; /* MSGSEG msgmap structures */
                    159: extern struct msg *msghdrs;    /* MSGTQL msg headers */
                    160: extern struct msqid_ds *msqids;        /* MSGMNI msqid_ds struct's */
                    161: 
                    162: #define MSG_LOCKED     01000   /* Is this msqid_ds locked? */
                    163: 
                    164: #endif /* KERNEL */
                    165: 
                    166: #ifndef KERNEL
                    167: #include <sys/cdefs.h>
                    168: 
                    169: __BEGIN_DECLS
                    170: int msgsys __P((int, ...));
                    171: int msgctl __P((int, int, struct msqid_ds *));
                    172: int msgget __P((key_t, int));
                    173: int msgsnd __P((int, void *, size_t, int));
                    174: int msgrcv __P((int, void*, size_t, long, int));
                    175: __END_DECLS
                    176: #endif /* !KERNEL */
                    177: 
                    178: #endif /* !_SYS_MSG_H_ */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.