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 189abf3..3aa610a 100644 (file)
@@ -1,5 +1,4 @@
-/* Copyright (c) 2015. The SimGrid Team.
- * All rights reserved.                                                     */
+/* Copyright (c) 2015-2017. The SimGrid Team. All rights reserved.          */
 
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
@@ -12,6 +11,7 @@
 #include <xbt/base.h>
 
 #include "mc/datatypes.h"
+#include "simgrid/forward.h"
 
 SG_BEGIN_DECL()
 
@@ -27,7 +27,7 @@ SG_BEGIN_DECL()
 
 // ***** Messages
 
-typedef enum {
+enum e_mc_message_type {
   MC_MESSAGE_NONE,
   MC_MESSAGE_CONTINUE,
   MC_MESSAGE_IGNORE_HEAP,
@@ -42,85 +42,77 @@ 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
  *  for the client and the server.
- *
- *  This is the basic structure shared by all messages: all message start with a message
- *  type.
  */
-struct s_mc_message {
-  e_mc_message_type type;
+
+/* Basic structure: all message start with a message type */
+struct s_mc_message_t {
+  enum e_mc_message_type type;
 };
-typedef struct s_mc_message s_mc_message_t;
-typedef struct s_mc_message* mc_message_t;
 
-struct s_mc_int_message {
-  e_mc_message_type type;
+struct s_mc_message_int_t {
+  enum e_mc_message_type type;
   uint64_t value;
 };
-typedef struct s_mc_int_message s_mc_int_message_t;
-typedef struct s_mc_int_message* mc_int_message_t;
 
-struct s_mc_ignore_heap_message {
-  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_ignore_heap_message s_mc_ignore_heap_message_t;
-typedef struct s_mc_ignore_heap_message* mc_ignore_heap_message_t;
 
-struct s_mc_ignore_memory_message {
-  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_ignore_memory_message s_mc_ignore_memory_message_t;
-typedef struct s_mc_ignore_memory_message* mc_ignore_memory_message_t;
 
-struct s_mc_stack_region_message {
-  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_stack_region_message s_mc_stack_region_message_t;
-typedef struct s_mc_stack_region_message* mc_stack_region_message_t;
-
-struct s_mc_simcall_handle_message {
-  e_mc_message_type type;
-  unsigned long pid;
-  int value;
-};
-typedef struct s_mc_simcall_handle_message s_mc_simcall_handle_message_t;
-typedef struct s_mc_simcall_handle_message* mc_simcall_handle_message;
 
-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;
-typedef struct s_mc_register_symbol_message* mc_register_symbol_message_t;
 
-struct s_mc_restore_message {
-  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_restore_message s_mc_restore_message_t;
-typedef struct s_mc_restore_message* mc_restore_message_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()