X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng-relayd%2Fmain.c;h=5f6f9cfd8ed78a613972c5b3ed9b999c63c90ecc;hp=082eb7975efd0adb1c41bfbfee65c621dd34abeb;hb=fe4477ee14abb348ce9e167f8b4c09312d67de36;hpb=d620da680b1e5fc67bdacaf6150ca2201cad37b7 diff --git a/src/bin/lttng-relayd/main.c b/src/bin/lttng-relayd/main.c index 082eb7975..5f6f9cfd8 100644 --- a/src/bin/lttng-relayd/main.c +++ b/src/bin/lttng-relayd/main.c @@ -1240,7 +1240,7 @@ end: */ static int relay_send_version(struct lttcomm_relayd_hdr *recv_hdr, - struct relay_command *cmd) + struct relay_command *cmd, struct lttng_ht *streams_ht) { int ret; struct lttcomm_relayd_version reply, msg; @@ -1262,19 +1262,22 @@ int relay_send_version(struct lttcomm_relayd_hdr *recv_hdr, goto end; } - /* - * For now, we just ignore the received version but after 2.1 stable - * release, a check must be done to see if we either adapt to the other - * side version (which MUST be lower than us) or keep the latest data - * structure considering that the other side will adapt. - */ - ret = sscanf(VERSION, "%10u.%10u", &reply.major, &reply.minor); if (ret < 2) { ERR("Error in scanning version"); ret = -1; goto end; } + + /* Major versions must be the same */ + if (reply.major != be32toh(msg.major)) { + DBG("Incompatible major versions (%u vs %u), deleting session", + reply.major, be32toh(msg.major)); + relay_delete_session(cmd, streams_ht); + ret = 0; + goto end; + } + reply.major = htobe32(reply.major); reply.minor = htobe32(reply.minor); ret = cmd->sock->ops->sendmsg(cmd->sock, &reply, @@ -1282,8 +1285,19 @@ int relay_send_version(struct lttcomm_relayd_hdr *recv_hdr, if (ret < 0) { ERR("Relay sending version"); } - DBG("Version check done (%u.%u)", be32toh(reply.major), - be32toh(reply.minor)); + +#if 0 + cmd->session->major = reply.major; + /* We adapt to the lowest compatible version */ + if (reply.minor <= be32toh(msg.minor)) { + cmd->session->minor = reply.minor; + } else { + cmd->session->minor = be32toh(msg.minor); + } + + DBG("Version check done using protocol %u.%u", cmd->session->major, + cmd->session->minor); +#endif end: return ret; @@ -1593,7 +1607,7 @@ int relay_process_control(struct lttcomm_relayd_hdr *recv_hdr, ret = relay_recv_metadata(recv_hdr, cmd, streams_ht); break; case RELAYD_VERSION: - ret = relay_send_version(recv_hdr, cmd); + ret = relay_send_version(recv_hdr, cmd, streams_ht); break; case RELAYD_CLOSE_STREAM: ret = relay_close_stream(recv_hdr, cmd, streams_ht);