vqsim.h 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. typedef enum {VQMSG_QUIT=1,
  2. VQMSG_SYNC, /* set nodelist */
  3. VQMSG_QUORUM, /* quorum state of this 'node' */
  4. VQMSG_EXEC, /* message for exec_handler */
  5. VQMSG_QDEVICE, /* quorum device enable/disable */
  6. VQMSG_QUORUMQUIT, /* quit if you don't have quorum */
  7. } vqsim_msg_type_t;
  8. typedef struct vq_instance *vq_object_t;
  9. struct vqsim_msg_header
  10. {
  11. vqsim_msg_type_t type;
  12. int from_nodeid;
  13. int param;
  14. };
  15. /* This is the sync sent from the controller process */
  16. struct vqsim_sync_msg
  17. {
  18. struct vqsim_msg_header header;
  19. struct memb_ring_id ring_id;
  20. size_t view_list_entries;
  21. unsigned int view_list[];
  22. };
  23. /* This is just info sent from each VQ instance */
  24. struct vqsim_quorum_msg
  25. {
  26. struct vqsim_msg_header header;
  27. int quorate;
  28. struct memb_ring_id ring_id;
  29. size_t view_list_entries;
  30. unsigned int view_list[];
  31. };
  32. struct vqsim_exec_msg
  33. {
  34. struct vqsim_msg_header header;
  35. char execmsg[];
  36. };
  37. struct vqsim_lib_msg
  38. {
  39. struct vqsim_msg_header header;
  40. char libmsg[];
  41. };
  42. #define MAX_NODES 1024
  43. #define MAX_PARTITIONS 16
  44. /* In vq_object.c */
  45. vq_object_t vq_create_instance(qb_loop_t *poll_loop, int nodeid);
  46. void vq_quit(vq_object_t instance);
  47. int vq_set_nodelist(vq_object_t instance, struct memb_ring_id *ring_id, int *nodeids, int nodeids_entries);
  48. int vq_get_parent_fd(vq_object_t instance);
  49. int vq_set_qdevice(vq_object_t instance, struct memb_ring_id *ring_id, int onoff);
  50. int vq_quit_if_inquorate(vq_object_t instance);
  51. pid_t vq_get_pid(vq_object_t instance);
  52. /* in vqsim_vq_engine.c - effectively the constructor */
  53. int fork_new_instance(int nodeid, int *vq_sock, pid_t *child_pid);
  54. /* In parser.c */
  55. void parse_input_command(char *cmd);
  56. /* These are in vqmain.c */
  57. int cmd_stop_node(int nodeid);
  58. void cmd_stop_all_nodes(void);
  59. int cmd_start_new_node(int nodeid, int partition);
  60. void cmd_set_autofence(int onoff);
  61. void cmd_set_sync(int onoff);
  62. void cmd_set_assert(int onoff);
  63. void cmd_move_nodes(int partition, int num_nodes, int *nodelist);
  64. void cmd_join_partitions(int part1, int part2);
  65. void cmd_update_all_partitions(int newring);
  66. void cmd_qdevice_poll(int nodeid, int onoff);
  67. void cmd_show_node_states(void);
  68. void cmd_set_timeout(uint64_t seconds);
  69. void cmd_start_sync_command(void);
  70. void resume_kb_input(int show_state);