home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / oper_sys / emerald / emrldsys.lha / Kernel / h / mmMsgDefs.h < prev    next >
Encoding:
C/C++ Source or Header  |  1990-08-17  |  6.8 KB  |  218 lines

  1. /* File: ~eden/Kernel/h/mmMsgDefs.h */
  2.  
  3. /*
  4.  * $Header:   ~eden/Kernel/h/mmMsgDefs.v  Revision 3.4  84/12/17  17:03:21  schwartz Exp$
  5.  * INTERFACE:    None.
  6.  *
  7.  * FUNCTION:    Provide General Message Module Definitions.
  8.  *
  9.  * IMPORTS:    ~eden/Kernel/h/stdTypes.h.
  10.  *
  11.  * EXPORTS:    UnsignedInteger, HandlerPtr, MessageId, MessageType,
  12.  *              MessageSubtype, NULLMSGID, NULLMSGTYPE, NULLMSGSUBTYPE,
  13.  *              BROADCAST, BROADCASTPODS, BROADCASTHOSTS, MULTICAST, 
  14.  *              mBytesToInt, MMDefineDimension,
  15.  *              MMInitMsgModule, NULL, EDENMSGID, DEBUGMSGID, EDENMSG,
  16.  *              HOTSSEARCHPTR, BIGRETRANSCOUNT, 
  17.  *              EDENPORTDEATH, NOHOTSENTRY, CHECKMSG, NUMUPCALLEVENTS.
  18.  *
  19.  * DESIGN:      
  20.  *
  21.  * $Log:    /u1/Eden/Source/MsgOps/RCS/MsgDefs.v $
  22. Revision 3.5  86/05/28 10:00:21  eric
  23.  
  24. Revision 3.4  84/12/17 17:03:21  schwartz
  25. Added Upcall handler FIRSTFCMSGRECEIVED and msg SNType SNFIRSTFCMSG
  26.  
  27. Revision 3.3  84/12/11 12:03:38  norm
  28. Added Upcall handlers SENDWINDOWFULL and SENDWINDOWNOTFULL
  29.  
  30. Revision 3.2  84/11/26 16:41:39  schwartz
  31. Added Upcall handler for NOHOTSENTRY
  32.  
  33. Revision 3.1  84/09/05 10:53:02  schwartz
  34. Added the constant MAXHOSTSINLOCALNET
  35.  
  36. Revision 3.0  84/07/03 11:23:03  schwartz
  37. Changes to accommodate use of Unix 4.2 sockets for network interprocess
  38. communication
  39.  
  40. Revision 2.2  84/06/20 20:30:00  schwartz
  41. Added the following constants for use in upcall handler definitions:
  42.    HOTSSEARCHPTR, BIGRETRANSCOUNT, EDENPORTDEATH, NUMUPCALLEVENTS
  43.  
  44. Revision 2.1  84/02/16  20:40:00  oystr
  45. Version 2 baseline.
  46.  
  47. Revision 1.10  84/02/16  15:11:27  eric
  48. Proper port cleanup on port death implemented (ipc emergency signal
  49. handling).
  50.  
  51. Minor fixes:
  52. Signal handlers now 'proctect' QueueTask via 'HoldSigs(); ... ; ReleaseSigs()'
  53. Minor bug in TimerCode fixed.
  54.  
  55. NOTE:  The message module now makes heavy use of the HOTS table when
  56. using the Ether.  The HOTS table lookup routine has been optimized
  57. new hashing function and a one-element cache.
  58.  
  59. Revision 1.9  83/10/25  11:52:57  mager
  60. Added BroadcastMask to MessageHeader; defined BroadcastMask offset.
  61.  
  62. Revision 1.8  83/10/14  16:39:27  mager
  63. Removed Datagram level of Message Module.  Increased size of message to just
  64. under 1K. Changed calls to malloc and free with xalloc and xfree.
  65. Removed redundant setting of ipc header.
  66. Reduced initialization of messages in MMAllocateMsg.
  67.  
  68. Revision 1.6  83/05/27  00:17:41  cady
  69. Revised datagram and message headers.
  70. Eliminated DGListElt structure.
  71. Decreased datagram size to 512 bytes.
  72. Revised asynchronous send to send immediately.
  73. Revised SendDG to used separate header and data pointers.
  74. Revised IPC header structure for send and receive.
  75.  
  76. Revision 1.5  83/05/16  16:44:41  cady
  77. Added explicit constant typing and include files.
  78.  
  79. Revision 1.4  83/02/26  20:25:50  cady
  80. Fixed missing #endif
  81.  
  82. Revision 1.3  83/02/25  11:08:15  cady
  83. Moved external trace definitions from Types.h to MsgDefs.h.
  84.  
  85. Revision 1.2  83/02/02  11:28:53  cady
  86. Added IPC ID type definitions for Eden and Debug messages.
  87.  
  88. Revision 1.1  83/01/06  14:07:48  cady
  89. Initial revision
  90.  
  91.  * 4-Nov-1982    Initial implementation. S. Cady
  92.  */
  93.  
  94. #ifndef mmMsgDefs
  95. #define mmMsgDefs
  96.  
  97. #ifndef stdTypes
  98. #include "Kernel/h/stdTypes.h"
  99. #endif
  100.  
  101. /****************************************************************/
  102. /*              General Message Module Type Definitions         */
  103. /****************************************************************/
  104.  
  105. #ifndef NULL
  106. #define NULL 0
  107. #endif
  108.  
  109. typedef unsigned int     UnsignedInteger; /* 32-bit unsigned integer */
  110. typedef int         HResult;
  111. typedef HResult        (*HandlerPtr) ();
  112. typedef UnsignedInteger  MessageId;
  113. typedef UnsignedInteger  MessageType;
  114. typedef UnsignedInteger  MessageSubtype;
  115.  
  116.  
  117. #define NULLMSGID       ((MessageId)      0)
  118. #define NULLMSGTYPE     ((MessageType)    0)
  119. #define NULLMSGSUBTYPE  ((MessageSubtype) 0)
  120.  
  121. /* 2032 is the maximum number of bytes that can be sent in a single Ethernet
  122.    message using Unix 4.2 sockets (note that the Ethernet itself limits 
  123.    messages to about 1500 bytes).   The 4 is space for the enethdr. */
  124. #ifdef UNDEF
  125. #define MAXPACKETSIZE (2032 - 4)
  126. #else
  127. #define MAXPACKETSIZE\
  128.   (1500 - 24 /* for norm */ - 4 /* for eric */ - 8 /* for udp */)
  129. #endif
  130.  
  131. /*  Eden IPC Message ID Definitions: Must be distinct from  */
  132. /*  IPC emergency kernel ID definitions.                    */
  133.  
  134. #define EDENMSGID     ((int) 8)
  135. #define DEBUGMSGID    ((int) 9)
  136.  
  137. /*
  138.  * Macro to extract machine addresss field from an EthernetAddress
  139.  *        >>>>> WARNING <<<<<
  140.  * The number returned by this macro bears no relation to any
  141.  * standard definition of machine address.  It is effectively
  142.  * the "low order" byte of the IP address.
  143.  */
  144. #define MachineAddress(EthAddr) (inet_lnaof(EthAddr.sin_addr.s_addr) & 0xFF)
  145.  
  146.                     /* Size of message header reserved fields   */
  147. #define ReservedMsgSize (     sizeof(MessageType)       \
  148.                             + sizeof(MessageSubtype)    \
  149.                             + sizeof(UnsignedInteger)   \
  150.                             + sizeof(UnsignedInteger)   \
  151.                         )
  152.  
  153.                     /* Size of datagram header reserved fields  */
  154. #define ReservedDGSize (  sizeof(integer *)             \
  155.                         + sizeof(integer)               \
  156.                         + sizeof(short unsigned int)    \
  157.                         + sizeof(short unsigned int)    \
  158.                         + sizeof(integer)               \
  159.                       )
  160.  
  161. /* Eden Ethernet packet type: 16-bit integer */
  162.  
  163. #define EDENMSG ((unsigned short) 0xffff)
  164.  
  165. #define BROADCAST      ((int)  0)
  166. #define MULTICAST      ((int) -1)
  167. #define BROADCASTPODS  ((int) -2)
  168. #define BROADCASTHOSTS ((int) -3)
  169.  
  170. #define mBytesToInt(fBytes) ( ((fBytes)+sizeof(int)-1) / sizeof(int) )
  171.  
  172. /* Eden Ethernet subnet types. */
  173.  
  174. typedef unsigned char   MsgSeqType;
  175.  
  176. #define SNNORMAL        1
  177. #define SNACK           2
  178. #define SNNAK           3
  179. #define SNRAWMSG        4
  180. #define SNBROADCAST     5
  181. #define SNFIRSTFCMSG    6
  182. typedef unsigned char   SubNetType;
  183. #define MAXHOSTNAMELENGTH 50
  184. #define MAXHOSTSINLOCALNET 40
  185.  
  186.  
  187. /* Message module upcall handler definitions */
  188.  
  189. #define HOTSSEARCHPTR      0
  190. #define BIGRETRANSCOUNT    1
  191. #define EDENPORTDEATH      2
  192. #define NOHOTSENTRY        3
  193. #define SENDWINDOWFULL       4
  194. #define SENDWINDOWNOTFULL  5
  195. #define FIRSTFCMSGRECEIVED 6
  196. #define CHECKMSG           7
  197. #define NUMUPCALLEVENTS    8
  198. extern KKStatus (*MMUpcallHandler[NUMUPCALLEVENTS])();
  199.  
  200.  
  201. extern KKStatus MMInitMsgModule();
  202. extern KKStatus MMDefineUpCallHandler();
  203. extern KKStatus MMDefineDimension();
  204. extern int      MMTrace;
  205. extern char     MMTraceHost[13];
  206. extern void     MMTraceMsg();
  207.  
  208.  
  209. /*  The following Macro is an efficiency hack for test output. */
  210. #define MXTraceMsg if ( MMTrace ) MMTraceMsg
  211.  
  212.  
  213. #endif
  214.  
  215. /****************************************************************/
  216. /*          End of General Message Module Type Definitions      */
  217. /****************************************************************/
  218.