2 * Copyright (c) 2015-2017 Red Hat, Inc.
6 * Author: Jan Friesse (jfriesse@redhat.com)
8 * This software licensed under BSD license, the text of which follows:
10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions are met:
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.
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.
35 #ifndef _QNETD_ALGORITHM_H_
36 #define _QNETD_ALGORITHM_H_
38 #include <sys/types.h>
42 #include "qnetd-client.h"
48 extern enum tlv_reply_error_code
qnetd_algorithm_client_init(struct qnetd_client
*client
);
50 extern enum tlv_reply_error_code
qnetd_algorithm_config_node_list_received(
51 struct qnetd_client
*client
, uint32_t msg_seq_num
, int config_version_set
,
52 uint64_t config_version
, const struct node_list
*nodes
, int initial
,
53 enum tlv_vote
*result_vote
);
55 extern enum tlv_reply_error_code
qnetd_algorithm_membership_node_list_received(
56 struct qnetd_client
*client
, uint32_t msg_seq_num
, const struct tlv_ring_id
*ring_id
,
57 const struct node_list
*nodes
, enum tlv_heuristics heuristics
, enum tlv_vote
*result_vote
);
59 extern enum tlv_reply_error_code
qnetd_algorithm_quorum_node_list_received(
60 struct qnetd_client
*client
, uint32_t msg_seq_num
, enum tlv_quorate quorate
,
61 const struct node_list
*nodes
, enum tlv_vote
*result_vote
);
63 extern void qnetd_algorithm_client_disconnect(
64 struct qnetd_client
*client
, int server_going_down
);
66 extern enum tlv_reply_error_code
qnetd_algorithm_ask_for_vote_received(
67 struct qnetd_client
*client
, uint32_t msg_seq_num
, enum tlv_vote
*result_vote
);
69 extern enum tlv_reply_error_code
qnetd_algorithm_vote_info_reply_received(
70 struct qnetd_client
*client
, uint32_t msg_seq_num
);
72 extern enum tlv_reply_error_code
qnetd_algorithm_heuristics_change_received(
73 struct qnetd_client
*client
, uint32_t msg_seq_num
, enum tlv_heuristics heuristics
,
74 enum tlv_vote
*result_vote
);
76 extern enum tlv_reply_error_code
qnetd_algorithm_timer_callback(
77 struct qnetd_client
*client
, int *reschedule_timer
, int *send_vote
, enum tlv_vote
*result_vote
);
79 struct qnetd_algorithm
{
80 enum tlv_reply_error_code (*init
)(struct qnetd_client
*client
);
82 void (*client_disconnect
)(struct qnetd_client
*client
, int server_going_down
);
84 enum tlv_reply_error_code (*membership_node_list_received
)(
85 struct qnetd_client
*client
, uint32_t msg_seq_num
,
86 const struct tlv_ring_id
*ring_id
,
87 const struct node_list
*nodes
, enum tlv_heuristics
, enum tlv_vote
*result_vote
);
89 enum tlv_reply_error_code (*quorum_node_list_received
)(
90 struct qnetd_client
*client
, uint32_t msg_seq_num
, enum tlv_quorate quorate
,
91 const struct node_list
*nodes
, enum tlv_vote
*result_vote
);
93 enum tlv_reply_error_code (*config_node_list_received
)(
94 struct qnetd_client
*client
,
95 uint32_t msg_seq_num
, int config_version_set
, uint64_t config_version
,
96 const struct node_list
*nodes
, int initial
, enum tlv_vote
*result_vote
);
98 enum tlv_reply_error_code (*ask_for_vote_received
)(
99 struct qnetd_client
*client
, uint32_t msg_seq_num
, enum tlv_vote
*result_vote
);
101 enum tlv_reply_error_code (*vote_info_reply_received
)(struct qnetd_client
*client
,
102 uint32_t msg_seq_num
);
104 enum tlv_reply_error_code (*heuristics_change_received
)(
105 struct qnetd_client
*client
, uint32_t msg_seq_num
, enum tlv_heuristics heuristics
,
106 enum tlv_vote
*result_vote
);
108 enum tlv_reply_error_code (*timer_callback
)(struct qnetd_client
*client
,
109 int *reschedule_timer
, int *send_vote
, enum tlv_vote
*result_vote
);
112 extern int qnetd_algorithm_register(
113 enum tlv_decision_algorithm_type algorithm_number
, struct qnetd_algorithm
*algorithm
);
115 extern int qnetd_algorithm_register_all(void);
121 #endif /* _QNETD_ALGORITHM_H_ */