Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge branch 'master' into actor-yield
[simgrid.git] / src / mc / remote / mc_protocol.h
index 192a78c..3aa610a 100644 (file)
@@ -11,6 +11,7 @@
 #include <xbt/base.h>
 
 #include "mc/datatypes.h"
+#include "simgrid/forward.h"
 
 SG_BEGIN_DECL()
 
@@ -26,7 +27,7 @@ SG_BEGIN_DECL()
 
 // ***** Messages
 
-typedef enum {
+enum e_mc_message_type {
   MC_MESSAGE_NONE,
   MC_MESSAGE_CONTINUE,
   MC_MESSAGE_IGNORE_HEAP,
@@ -41,14 +42,16 @@ typedef enum {
   MC_MESSAGE_ASSERTION_FAILED,
   // MCer request to finish the restoration:
   MC_MESSAGE_RESTORE,
-} e_mc_message_type;
+  MC_MESSAGE_ACTOR_ENABLED,
+  MC_MESSAGE_ACTOR_ENABLED_REPLY
+};
 
 #define MC_MESSAGE_LENGTH 512
 
 /** Basic structure for a MC message
  *
  *  The current version of the client/server protocol sends C structures over `AF_LOCAL`
- *  `SOCK_DGRAM` sockets. This means that the protocol is ABI/architecture specific:
+ *  `SOCK_SEQPACKET` sockets. This means that the protocol is ABI/architecture specific:
  *  we currently can't model-check a x86 process from a x86_64 process.
  *
  *  Moreover the protocol is not stable. The same version of the library should be used
@@ -56,61 +59,60 @@ typedef enum {
  */
 
 /* Basic structure: all message start with a message type */
-struct s_mc_message {
-  e_mc_message_type type;
+struct s_mc_message_t {
+  enum e_mc_message_type type;
 };
-typedef struct s_mc_message mc_message_t;
 
-struct s_mc_message_int {
-  e_mc_message_type type;
+struct s_mc_message_int_t {
+  enum e_mc_message_type type;
   uint64_t value;
 };
-typedef struct s_mc_message_int mc_message_int_t;
 
-struct s_mc_message_ignore_heap {
-  e_mc_message_type type;
+/* Client->Server */
+struct s_mc_message_ignore_heap_t {
+  enum e_mc_message_type type;
   int block;
   int fragment;
   void* address;
   size_t size;
 };
-typedef struct s_mc_message_ignore_heap s_mc_message_ignore_heap_t;
 
-struct s_mc_message_ignore_memory {
-  e_mc_message_type type;
+struct s_mc_message_ignore_memory_t {
+  enum e_mc_message_type type;
   uint64_t addr;
   size_t size;
 };
-typedef struct s_mc_message_ignore_memory s_mc_message_ignore_memory_t;
 
-struct s_mc_message_stack_region {
-  e_mc_message_type type;
+struct s_mc_message_stack_region_t {
+  enum e_mc_message_type type;
   s_stack_region_t stack_region;
 };
-typedef struct s_mc_message_stack_region s_mc_message_stack_region_t;
-
-struct s_mc_message_simcall_handle {
-  e_mc_message_type type;
-  unsigned long pid;
-  int value;
-};
-typedef struct s_mc_message_simcall_handle s_mc_message_simcall_handle_t;
 
-struct s_mc_register_symbol_message {
-  e_mc_message_type type;
+struct s_mc_message_register_symbol_t {
+  enum e_mc_message_type type;
   char name[128];
   int (*callback)(void*);
   void* data;
 };
-typedef struct s_mc_register_symbol_message s_mc_register_symbol_message_t;
 
-struct s_mc_message_restore {
-  e_mc_message_type type;
+/* Server -> client */
+struct s_mc_message_simcall_handle_t {
+  enum e_mc_message_type type;
+  unsigned long pid;
+  int value;
+};
+
+struct s_mc_message_restore_t {
+  enum e_mc_message_type type;
   int index;
 };
-typedef struct s_mc_message_restore s_mc_message_restore_t;
 
-XBT_PRIVATE const char* MC_message_type_name(e_mc_message_type type);
+struct s_mc_message_actor_enabled_t {
+  enum e_mc_message_type type;
+  aid_t aid; // actor ID
+};
+
+XBT_PRIVATE const char* MC_message_type_name(enum e_mc_message_type type);
 
 SG_END_DECL()