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_DISCONNECT_REASON_H_ 36 #define _QDEVICE_NET_DISCONNECT_REASON_H_ 37 38 39 #ifdef __cplusplus 40 extern "C" { 41 #endif 42 43 enum qdevice_net_disconnect_reason { 44 /* Undefined reason. If this error appears, it's error in source code */ 45 QDEVICE_NET_DISCONNECT_REASON_UNDEFINED, 46 47 /* Received known message, but it was not expected */ 48 QDEVICE_NET_DISCONNECT_REASON_UNEXPECTED_MSG, 49 /* Received unknown message */ 50 QDEVICE_NET_DISCONNECT_REASON_UNSUPPORTED_MSG, 51 /* TLS setting of server and client are incompatible */ 52 QDEVICE_NET_DISCONNECT_REASON_INCOMPATIBLE_TLS, 53 /* MSG setting of server and client are incompatible */ 54 QDEVICE_NET_DISCONNECT_REASON_INCOMPATIBLE_MSG_SIZE, 55 /* Message doesn't contain required option */ 56 QDEVICE_NET_DISCONNECT_REASON_REQUIRED_OPTION_MISSING, 57 58 /* Can't allocate send list item or message is too long to fit into send buffer */ 59 QDEVICE_NET_DISCONNECT_REASON_CANT_ALLOCATE_MSG_BUFFER, 60 /* Impossible to create or update heartbeat sending timer */ 61 QDEVICE_NET_DISCONNECT_REASON_CANT_SCHEDULE_HB_TIMER, 62 /* Impossible to create or update votequorum poll timer */ 63 QDEVICE_NET_DISCONNECT_REASON_CANT_SCHEDULE_VOTING_TIMER, 64 /* Impossible to create or update regular heuristics timer */ 65 QDEVICE_NET_DISCONNECT_REASON_CANT_SCHEDULE_HEURISTICS_TIMER, 66 /* Impossible to exec heuristics */ 67 QDEVICE_NET_DISCONNECT_REASON_CANT_START_HEURISTICS, 68 /* Impossible to activate/deactive heuristics result notifier */ 69 QDEVICE_NET_DISCONNECT_REASON_CANT_ACTIVATE_HEURISTICS_RESULT_NOTIFIER, 70 /* Impossible to register votequorum callback */ 71 QDEVICE_NET_DISCONNECT_REASON_CANT_REGISTER_VOTEQUORUM_CALLBACK, 72 /* Impossible to register cmap callback */ 73 QDEVICE_NET_DISCONNECT_REASON_CANT_REGISTER_CMAP_CALLBACK, 74 /* Impossible to start TLS session */ 75 QDEVICE_NET_DISCONNECT_REASON_CANT_START_TLS, 76 77 /* Received message with error field set to non TLV_REPLY_ERROR_CODE_NO_ERROR value */ 78 QDEVICE_NET_DISCONNECT_REASON_SERVER_SENT_ERROR, 79 /* Received message with error field set to TLV_REPLY_ERROR_CODE_DUPLICATE_NODE_ID value */ 80 QDEVICE_NET_DISCONNECT_REASON_SERVER_SENT_DUPLICATE_NODE_ID_ERROR, 81 /* Received message with error field set to TLV_REPLY_ERROR_CODE_TIE_BREAKER_DIFFERS_FROM_OTHER_NODES value */ 82 QDEVICE_NET_DISCONNECT_REASON_SERVER_SENT_TIE_BREAKER_DIFFERS_FROM_OTHER_NODES_ERROR, 83 /* Received message with error field set to TLV_REPLY_ERROR_CODE_ALGORITHM_DIFFERS_FROM_OTHER_NODES value */ 84 QDEVICE_NET_DISCONNECT_REASON_SERVER_SENT_ALGORITHM_DIFFERS_FROM_OTHER_NODES_ERROR, 85 86 /* Server doesn't support client selected decision algorithm */ 87 QDEVICE_NET_DISCONNECT_REASON_SERVER_DOESNT_SUPPORT_REQUIRED_ALGORITHM, 88 /* Server doesn't support client required option */ 89 QDEVICE_NET_DISCONNECT_REASON_SERVER_DOESNT_SUPPORT_REQUIRED_OPT, 90 91 /* Can't decode message sent by server */ 92 QDEVICE_NET_DISCONNECT_REASON_MSG_DECODE_ERROR, 93 /* Server closed connection */ 94 QDEVICE_NET_DISCONNECT_REASON_SERVER_CLOSED_CONNECTION, 95 /* Can't read or store message received from server */ 96 QDEVICE_NET_DISCONNECT_REASON_CANT_READ_MESSAGE, 97 /* Can't send message to server */ 98 QDEVICE_NET_DISCONNECT_REASON_CANT_SEND_MESSAGE, 99 100 /* Can't dispatch cmap or votequroum. This cannot be overwritten and always means end of qdevice-net */ 101 QDEVICE_NET_DISCONNECT_REASON_COROSYNC_CONNECTION_CLOSED, 102 103 /* Local socket closed is reasult of sigint */ 104 QDEVICE_NET_DISCONNECT_REASON_LOCAL_SOCKET_CLOSED, 105 106 /* It was not possible to establish connection with qnetd */ 107 QDEVICE_NET_DISCONNECT_REASON_CANT_CONNECT_TO_THE_SERVER, 108 109 QDEVICE_NET_DISCONNECT_REASON_ALGO_CONNECTED_ERR, 110 QDEVICE_NET_DISCONNECT_REASON_ALGO_CONFIG_NODE_LIST_CHANGED_ERR, 111 QDEVICE_NET_DISCONNECT_REASON_ALGO_VOTEQUORUM_QUORUM_NOTIFY_ERR, 112 QDEVICE_NET_DISCONNECT_REASON_ALGO_VOTEQUORUM_NODE_LIST_NOTIFY_ERR, 113 QDEVICE_NET_DISCONNECT_REASON_ALGO_VOTEQUORUM_NODE_LIST_HEURISTICS_NOTIFY_ERR, 114 QDEVICE_NET_DISCONNECT_REASON_ALGO_VOTEQUORUM_EXPECTED_VOTES_NOTIFY_ERR, 115 QDEVICE_NET_DISCONNECT_REASON_ALGO_NODE_LIST_REPLY_ERR, 116 QDEVICE_NET_DISCONNECT_REASON_ALGO_ASK_FOR_VOTE_REPLY_ERR, 117 QDEVICE_NET_DISCONNECT_REASON_ALGO_VOTE_INFO_ERR, 118 QDEVICE_NET_DISCONNECT_REASON_ALGO_ECHO_REPLY_RECEIVED_ERR, 119 QDEVICE_NET_DISCONNECT_REASON_ALGO_ECHO_REPLY_NOT_RECEIVED_ERR, 120 QDEVICE_NET_DISCONNECT_REASON_ALGO_HEURISTICS_CHANGE_ERR, 121 QDEVICE_NET_DISCONNECT_REASON_ALGO_HEURISTICS_CHANGE_REPLY_ERR, 122 123 QDEVICE_NET_DISCONNECT_REASON_HEURISTICS_WORKER_CLOSED, 124 QDEVICE_NET_DISCONNECT_REASON_HEURISTICS_CANT_SEND_RECEIVE_MSG, 125 }; 126 127 #define qdevice_net_disconnect_reason_try_reconnect(reason) ( \ 128 reason == QDEVICE_NET_DISCONNECT_REASON_MSG_DECODE_ERROR || \ 129 reason == QDEVICE_NET_DISCONNECT_REASON_SERVER_CLOSED_CONNECTION || \ 130 reason == QDEVICE_NET_DISCONNECT_REASON_CANT_READ_MESSAGE || \ 131 reason == QDEVICE_NET_DISCONNECT_REASON_CANT_SEND_MESSAGE || \ 132 reason == QDEVICE_NET_DISCONNECT_REASON_CANT_CONNECT_TO_THE_SERVER || \ 133 reason == QDEVICE_NET_DISCONNECT_REASON_ALGO_ECHO_REPLY_NOT_RECEIVED_ERR || \ 134 reason == QDEVICE_NET_DISCONNECT_REASON_SERVER_SENT_DUPLICATE_NODE_ID_ERROR || \ 135 reason == QDEVICE_NET_DISCONNECT_REASON_SERVER_SENT_TIE_BREAKER_DIFFERS_FROM_OTHER_NODES_ERROR || \ 136 reason == QDEVICE_NET_DISCONNECT_REASON_SERVER_SENT_ALGORITHM_DIFFERS_FROM_OTHER_NODES_ERROR) 137 138 139 #define qdevice_net_disconnect_reason_force_disconnect(reason) ( \ 140 reason == QDEVICE_NET_DISCONNECT_REASON_COROSYNC_CONNECTION_CLOSED || \ 141 reason == QDEVICE_NET_DISCONNECT_REASON_LOCAL_SOCKET_CLOSED || \ 142 reason == QDEVICE_NET_DISCONNECT_REASON_CANT_SCHEDULE_VOTING_TIMER || \ 143 reason == QDEVICE_NET_DISCONNECT_REASON_CANT_REGISTER_VOTEQUORUM_CALLBACK || \ 144 reason == QDEVICE_NET_DISCONNECT_REASON_CANT_REGISTER_CMAP_CALLBACK || \ 145 reason == QDEVICE_NET_DISCONNECT_REASON_HEURISTICS_WORKER_CLOSED || \ 146 reason == QDEVICE_NET_DISCONNECT_REASON_HEURISTICS_CANT_SEND_RECEIVE_MSG) 147 148 #ifdef __cplusplus 149 } 150 #endif 151 152 #endif /* _QDEVICE_NET_DISCONNECT_REASON_H_ */ 153