To match the specification add heartbeat timeout only when requested.
Also add qdevice client method to send option message.
Signed-off-by: Jan Friesse <jfriesse@redhat.com>
/*
- * Copyright (c) 2015-2017 Red Hat, Inc.
+ * Copyright (c) 2015-2020 Red Hat, Inc.
*
* All rights reserved.
*
size_t
msg_create_set_option_reply(struct dynar *msg, int add_msg_seq_number, uint32_t msg_seq_number,
- uint32_t heartbeat_interval)
+ int add_heartbeat_interval, uint32_t heartbeat_interval)
{
dynar_clean(msg);
}
}
- if (tlv_add_heartbeat_interval(msg, heartbeat_interval) == -1) {
- goto small_buf_err;
+ if (add_heartbeat_interval) {
+ if (tlv_add_heartbeat_interval(msg, heartbeat_interval) == -1) {
+ goto small_buf_err;
+ }
}
msg_set_len(msg, dynar_size(msg) - (MSG_TYPE_LENGTH + MSG_LENGTH_LENGTH));
/*
- * Copyright (c) 2015-2017 Red Hat, Inc.
+ * Copyright (c) 2015-2020 Red Hat, Inc.
*
* All rights reserved.
*
int add_heartbeat_interval, uint32_t heartbeat_interval);
extern size_t msg_create_set_option_reply(struct dynar *msg,
- int add_msg_seq_number, uint32_t msg_seq_number, uint32_t heartbeat_interval);
+ int add_msg_seq_number, uint32_t msg_seq_number,
+ int add_heartbeat_interval, uint32_t heartbeat_interval);
extern size_t msg_create_echo_request(struct dynar *msg, int add_msg_seq_number,
uint32_t msg_seq_number);
return (-1);
}
- if (qdevice_net_msg_check_seq_number(instance, msg) != 0) {
- instance->disconnect_reason = QDEVICE_NET_DISCONNECT_REASON_REQUIRED_OPTION_MISSING;
-
- return (-1);
- }
-
- if (qdevice_net_echo_request_timer_schedule(instance) != 0) {
- return (-1);
+ if (msg->heartbeat_interval_set) {
+ if (qdevice_net_echo_request_timer_schedule(instance) != 0) {
+ return (-1);
+ }
}
return (0);
/*
- * Copyright (c) 2015-2019 Red Hat, Inc.
+ * Copyright (c) 2015-2020 Red Hat, Inc.
*
* All rights reserved.
*
return (0);
}
+
+int
+qdevice_net_send_set_option(struct qdevice_net_instance *instance,
+ int add_heartbeat_interval, uint32_t heartbeat_interval)
+{
+ struct send_buffer_list_entry *send_buffer;
+
+ send_buffer = send_buffer_list_get_new(&instance->send_buffer_list);
+ if (send_buffer == NULL) {
+ log(LOG_ERR, "Can't allocate send list buffer for ask for vote msg");
+
+ return (-1);
+ }
+
+ instance->last_msg_seq_num++;
+
+ log(LOG_DEBUG, "Sending set option seq = "UTILS_PRI_MSG_SEQ ", "
+ "hb(%u) = %" PRIu32,
+ instance->last_msg_seq_num, add_heartbeat_interval, heartbeat_interval);
+
+ if (msg_create_set_option(&send_buffer->buffer, 1, instance->last_msg_seq_num,
+ add_heartbeat_interval, heartbeat_interval) == 0) {
+ log(LOG_ERR, "Can't allocate send buffer for set option msg");
+
+ send_buffer_list_discard_new(&instance->send_buffer_list, send_buffer);
+ return (-1);
+ }
+
+ send_buffer_list_put(&instance->send_buffer_list, send_buffer);
+
+ return (0);
+}
/*
- * Copyright (c) 2015-2016 Red Hat, Inc.
+ * Copyright (c) 2015-2020 Red Hat, Inc.
*
* All rights reserved.
*
struct qdevice_net_instance *instance, enum tlv_quorate quorate,
uint32_t node_list_entries, votequorum_node_t node_list[]);
+extern int qdevice_net_send_set_option(struct qdevice_net_instance *instance,
+ int add_heartbeat_interval, uint32_t heartbeat_interval);
+
#ifdef __cplusplus
}
#endif
}
if (msg_create_set_option_reply(&send_buffer->buffer, msg->seq_number_set, msg->seq_number,
- client->heartbeat_interval) == 0) {
+ msg->heartbeat_interval_set, client->heartbeat_interval) == 0) {
log(LOG_ERR, "Can't alloc set option reply msg. "
"Disconnecting client connection.");