1 /* 2 * Copyright (c) 2015-2017 Red Hat, Inc. 3 * 4 * All rights reserved. 5 * 6 * Author: Jan Friesse (jfriesse@redhat.com) 7 * 8 * This software licensed under BSD license, the text of which follows: 9 * 10 * Redistribution and use in source and binary forms, with or without 11 * modification, are permitted provided that the following conditions are met: 12 * 13 * - Redistributions of source code must retain the above copyright notice, 14 * this list of conditions and the following disclaimer. 15 * - Redistributions in binary form must reproduce the above copyright notice, 16 * this list of conditions and the following disclaimer in the documentation 17 * and/or other materials provided with the distribution. 18 * - Neither the name of the Red Hat, Inc. nor the names of its 19 * contributors may be used to endorse or promote products derived from this 20 * software without specific prior written permission. 21 * 22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 23 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 24 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 25 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 26 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 27 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 28 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 29 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 30 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 31 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 32 * THE POSSIBILITY OF SUCH DAMAGE. 33 */ 34 35 #ifndef _QDEVICE_NET_ALGO_TEST_H_ 36 #define _QDEVICE_NET_ALGO_TEST_H_ 37 38 #include "qdevice-net-algorithm.h" 39 40 #ifdef __cplusplus 41 extern "C" { 42 #endif 43 44 extern int qdevice_net_algo_test_init(struct qdevice_net_instance *instance); 45 46 extern int qdevice_net_algo_test_connected(struct qdevice_net_instance *instance, 47 enum tlv_heuristics *heuristics, int *send_config_node_list, int *send_membership_node_list, 48 int *send_quorum_node_list, enum tlv_vote *vote); 49 50 extern int qdevice_net_algo_test_config_node_list_changed( 51 struct qdevice_net_instance *instance, const struct node_list *nlist, 52 int config_version_set, uint64_t config_version, int *send_node_list, enum tlv_vote *vote); 53 54 extern int qdevice_net_algo_test_votequorum_node_list_notify( 55 struct qdevice_net_instance *instance, const struct tlv_ring_id *ring_id, 56 uint32_t node_list_entries, uint32_t node_list[], int *pause_cast_vote_timer, 57 enum tlv_vote *vote); 58 59 extern int qdevice_net_algo_test_votequorum_node_list_heuristics_notify( 60 struct qdevice_net_instance *instance, const struct tlv_ring_id *ring_id, 61 uint32_t node_list_entries, uint32_t node_list[], int *send_node_list, enum tlv_vote *vote, 62 enum tlv_heuristics *heuristics); 63 64 extern int qdevice_net_algo_test_votequorum_quorum_notify( 65 struct qdevice_net_instance *instance, uint32_t quorate, uint32_t node_list_entries, 66 votequorum_node_t node_list[], int *send_node_list, enum tlv_vote *vote); 67 68 extern int qdevice_net_algo_test_votequorum_expected_votes_notify( 69 struct qdevice_net_instance *instance, uint32_t expected_votes, enum tlv_vote *vote); 70 71 extern int qdevice_net_algo_test_config_node_list_reply_received( 72 struct qdevice_net_instance *instance, uint32_t seq_number, int initial, 73 const struct tlv_ring_id *ring_id, int ring_id_is_valid, enum tlv_vote *vote); 74 75 extern int qdevice_net_algo_test_membership_node_list_reply_received( 76 struct qdevice_net_instance *instance, uint32_t seq_number, const struct tlv_ring_id *ring_id, 77 int ring_id_is_valid, enum tlv_vote *vote); 78 79 extern int qdevice_net_algo_test_quorum_node_list_reply_received( 80 struct qdevice_net_instance *instance, uint32_t seq_number, 81 const struct tlv_ring_id *ring_id, int ring_id_is_valid, enum tlv_vote *vote); 82 83 extern int qdevice_net_algo_test_ask_for_vote_reply_received( 84 struct qdevice_net_instance *instance, uint32_t seq_number, 85 const struct tlv_ring_id *ring_id, int ring_id_is_valid, enum tlv_vote *vote); 86 87 extern int qdevice_net_algo_test_vote_info_received(struct qdevice_net_instance *instance, 88 uint32_t seq_number, const struct tlv_ring_id *ring_id, int ring_id_is_valid, 89 enum tlv_vote *vote); 90 91 extern int qdevice_net_algo_test_echo_reply_received( 92 struct qdevice_net_instance *instance, uint32_t seq_number, int is_expected_seq_number); 93 94 extern int qdevice_net_algo_test_echo_reply_not_received( 95 struct qdevice_net_instance *instance); 96 97 extern int qdevice_net_algo_test_heuristics_change(struct qdevice_net_instance *instance, 98 enum tlv_heuristics *heuristics, int *send_msg, enum tlv_vote *vote); 99 100 extern int qdevice_net_algo_test_heuristics_change_reply_received(struct qdevice_net_instance *instance, 101 uint32_t seq_number, const struct tlv_ring_id *ring_id, int ring_id_is_valid, enum tlv_heuristics heuristics, 102 enum tlv_vote *vote); 103 104 extern int qdevice_net_algo_test_disconnected(struct qdevice_net_instance *instance, 105 enum qdevice_net_disconnect_reason disconnect_reason, int *try_reconnect, enum tlv_vote *vote); 106 107 extern void qdevice_net_algo_test_destroy(struct qdevice_net_instance *instance); 108 109 extern int qdevice_net_algo_test_register(void); 110 111 #ifdef __cplusplus 112 } 113 #endif 114 115 #endif /* _QDEVICE_NET_ALGO_TEST_H_ */ 116