summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSverker Eriksson <sverker@erlang.org>2022-03-31 22:02:50 +0200
committerSverker Eriksson <sverker@erlang.org>2022-04-04 20:06:00 +0200
commitc804bd8c7f840ecfa2397c836235363c112d79b4 (patch)
treee8e4bf32bfd2e3e3d233cc512f7da3b569054624
parent722219f211092e0c4b919f3ba4f91df42191c0e7 (diff)
downloaderlang-c804bd8c7f840ecfa2397c836235363c112d79b4.tar.gz
erl_interface: Remove old distribution handshake
-rw-r--r--lib/erl_interface/src/connect/ei_connect.c294
-rw-r--r--lib/erl_interface/src/epmd/ei_epmd.h3
-rw-r--r--lib/erl_interface/src/epmd/epmd_publish.c4
-rw-r--r--lib/erl_interface/test/ei_tmo_SUITE.erl183
-rw-r--r--lib/kernel/include/dist.hrl6
5 files changed, 107 insertions, 383 deletions
diff --git a/lib/erl_interface/src/connect/ei_connect.c b/lib/erl_interface/src/connect/ei_connect.c
index 8cdb5a97ee..4280b8f62e 100644
--- a/lib/erl_interface/src/connect/ei_connect.c
+++ b/lib/erl_interface/src/connect/ei_connect.c
@@ -103,8 +103,6 @@ static int recv_challenge(ei_socket_callbacks *cbs, void *ctx, int pkt_sz,
static int send_challenge_reply(ei_socket_callbacks *cbs, void *ctx,
int pkt_sz, unsigned char digest[16],
unsigned challenge, unsigned ms);
-static int recv_complement(ei_socket_callbacks *cbs, void *ctx,
- int pkt_sz, unsigned ms);
static int recv_challenge_reply(ei_socket_callbacks *cbs, void *ctx,
int pkt_sz, unsigned our_challenge,
char cookie[],
@@ -115,13 +113,9 @@ static int send_challenge_ack(ei_socket_callbacks *cbs, void *ctx,
static int recv_challenge_ack(ei_socket_callbacks *cbs, void *ctx,
int pkt_sz, unsigned our_challenge,
char cookie[], unsigned ms);
-static int send_name(ei_cnode *ec, void *ctx, int pkt_sz,
- unsigned version, unsigned ms);
-static int send_complement(ei_cnode *ec, void *ctx, int pkt_sz,
- unsigned epmd_says_version, DistFlags her_flags,
- unsigned ms);
+static int send_name(ei_cnode *ec, void *ctx, int pkt_sz, unsigned ms);
static int recv_name(ei_socket_callbacks *cbs, void *ctx, int pkt_sz,
- char* send_name_tag, DistFlags *flags,
+ DistFlags *flags,
char *namebuf, unsigned ms);
static int ei_connect_helper(ei_cnode* ec,
Erl_IpAddr ip_addr,
@@ -1220,7 +1214,6 @@ static int ei_connect_helper(ei_cnode* ec,
ei_socket_callbacks *cbs = ec->cbs;
void *ctx;
int sockd;
- unsigned her_version;
DistFlags her_flags;
unsigned our_challenge, her_challenge;
unsigned char our_digest[16];
@@ -1245,12 +1238,6 @@ static int ei_connect_helper(ei_cnode* ec,
return ERL_ERROR;
}
- if (!ec->thisnodename[0] && epmd_says_version < EI_DIST_6) {
- /* This is a dynamic node name. We have to use at least vsn 6
- of the dist protocol for this to work. */
- epmd_says_version = EI_DIST_6;
- }
-
err = ei_socket_ctx__(cbs, &ctx, ec->setup_context);
if (err) {
EI_TRACE_ERR2("ei_xconnect","-> SOCKET failed: %s (%d)",
@@ -1287,24 +1274,21 @@ static int ei_connect_helper(ei_cnode* ec,
goto error;
}
- if (send_name(ec, ctx, pkt_sz, epmd_says_version, tmo))
+ if (send_name(ec, ctx, pkt_sz, tmo))
goto error;
if (recv_status(ec, ctx, pkt_sz, tmo))
goto error;
if (recv_challenge(cbs, ctx, pkt_sz, &her_challenge,
&her_flags, NULL, tmo))
goto error;
- her_version = (her_flags & DFLAG_HANDSHAKE_23) ? EI_DIST_6 : EI_DIST_5;
our_challenge = gen_challenge();
gen_digest(her_challenge, ec->ei_connect_cookie, our_digest);
- if (send_complement(ec, ctx, pkt_sz, epmd_says_version, her_flags, tmo))
- goto error;
if (send_challenge_reply(cbs, ctx, pkt_sz, our_digest, our_challenge, tmo))
goto error;
if (recv_challenge_ack(cbs, ctx, pkt_sz, our_challenge,
ec->ei_connect_cookie, tmo))
goto error;
- if (put_ei_socket_info(sockd, her_version, null_cookie, ec, cbs, ctx) != 0)
+ if (put_ei_socket_info(sockd, EI_DIST_6, null_cookie, ec, cbs, ctx) != 0)
goto error;
if (cbs->connect_handshake_complete) {
@@ -1547,7 +1531,6 @@ int ei_accept_tmo(ei_cnode* ec, int lfd, ErlConnect *conp, unsigned ms)
int fd;
DistFlags her_flags;
char tmp_nodename[MAXNODELEN+1];
- char send_name_tag;
char *her_name;
int pkt_sz, err;
struct sockaddr_in addr;
@@ -1622,14 +1605,12 @@ int ei_accept_tmo(ei_cnode* ec, int lfd, ErlConnect *conp, unsigned ms)
EI_TRACE_CONN0("ei_accept","<- ACCEPT connected to remote");
- if (recv_name(cbs, ctx, pkt_sz, &send_name_tag, &her_flags,
- her_name, tmo)) {
+ if (recv_name(cbs, ctx, pkt_sz, &her_flags, her_name, tmo)) {
EI_TRACE_ERR0("ei_accept","<- ACCEPT initial ident failed");
goto error;
}
{
- unsigned her_version = (her_flags & DFLAG_HANDSHAKE_23) ? 6 : 5;
unsigned our_challenge;
unsigned her_challenge;
unsigned char our_digest[16];
@@ -1639,17 +1620,13 @@ int ei_accept_tmo(ei_cnode* ec, int lfd, ErlConnect *conp, unsigned ms)
our_challenge = gen_challenge();
if (send_challenge(ec, ctx, pkt_sz, our_challenge, her_flags, tmo))
goto error;
- if (send_name_tag == 'n' && (her_flags & DFLAG_HANDSHAKE_23)) {
- if (recv_complement(cbs, ctx, pkt_sz, tmo))
- goto error;
- }
if (recv_challenge_reply(cbs, ctx, pkt_sz, our_challenge,
ec->ei_connect_cookie, &her_challenge, tmo))
goto error;
gen_digest(her_challenge, ec->ei_connect_cookie, our_digest);
if (send_challenge_ack(cbs, ctx, pkt_sz, our_digest, tmo))
goto error;
- if (put_ei_socket_info(fd, her_version, null_cookie, ec, cbs, ctx) != 0)
+ if (put_ei_socket_info(fd, EI_DIST_6, null_cookie, ec, cbs, ctx) != 0)
goto error;
}
if (conp) {
@@ -2285,7 +2262,6 @@ static DistFlags preferred_flags(void)
static int send_name(ei_cnode *ec,
void *ctx,
int pkt_sz,
- unsigned version,
unsigned ms)
{
char *buf;
@@ -2297,25 +2273,18 @@ static int send_name(ei_cnode *ec,
int err, ret;
ssize_t len;
DistFlags flags = preferred_flags();
- char tag;
if (ec->thisnodename[0]) {
name_ptr = ec->thisnodename;
- tag = (version == EI_DIST_5) ? 'n' : 'N';
}
else {
/* dynamic node name */
name_ptr = ec->thishostname;
- tag = 'N'; /* presume ver 6 */
flags |= DFLAG_NAME_ME;
}
name_len = strlen(name_ptr);
-
- if (tag == 'n')
- siz = pkt_sz + 1 + 2 + 4 + name_len;
- else
- siz = pkt_sz + 1 + 8 + 4 + 2 + name_len;
+ siz = pkt_sz + 1 + 8 + 4 + 2 + name_len;
buf = (siz > DEFBUF_SIZ) ? malloc(siz) : dbuf;
if (!buf) {
@@ -2335,16 +2304,10 @@ static int send_name(ei_cnode *ec,
goto done;
}
- put8(s, tag);
- if (tag == 'n') {
- put16be(s, EI_DIST_5); /* some impl (jinterface) demand ver==5 */
- put32be(s, flags);
- }
- else { /* tag == 'N' */
- put64be(s, flags);
- put32be(s, ec->creation);
- put16be(s, name_len);
- }
+ put8(s, 'N');
+ put64be(s, flags);
+ put32be(s, ec->creation);
+ put16be(s, name_len);
memcpy(s, name_ptr, name_len);
len = (ssize_t) siz;
err = ei_write_fill_ctx_t__(ec->cbs, ctx, buf, &len, ms);
@@ -2379,12 +2342,8 @@ static int send_challenge(ei_cnode *ec,
int err, ret;
ssize_t len;
DistFlags flags;
- const char tag = (her_flags & DFLAG_HANDSHAKE_23) ? 'N' : 'n';
- if (tag == 'n')
- siz = pkt_sz + 1 + 2 + 4 + 4 + nodename_len;
- else
- siz = pkt_sz + 1 + 8 + 4 + 4 + 2 + nodename_len;
+ siz = pkt_sz + 1 + 8 + 4 + 4 + 2 + nodename_len;
buf = (siz > DEFBUF_SIZ) ? malloc(siz) : dbuf;
if (!buf) {
@@ -2405,18 +2364,11 @@ static int send_challenge(ei_cnode *ec,
}
flags = preferred_flags();
- put8(s, tag);
- if (tag == 'n') {
- put16be(s, EI_DIST_5); /* chosen version */
- put32be(s, flags);
- put32be(s, challenge);
- }
- else {
- put64be(s, flags);
- put32be(s, challenge);
- put32be(s, ec->creation);
- put16be(s, nodename_len);
- }
+ put8(s, 'N');
+ put64be(s, flags);
+ put32be(s, challenge);
+ put32be(s, ec->creation);
+ put16be(s, nodename_len);
memcpy(s, ec->thisnodename, nodename_len);
len = (ssize_t) siz;
err = ei_write_fill_ctx_t__(ec->cbs, ctx, buf, &len, ms);
@@ -2444,7 +2396,6 @@ static int recv_challenge(ei_socket_callbacks *cbs, void *ctx,
int is_static = 1;
int buflen = DEFBUF_SIZ;
int rlen, nodename_len;
- unsigned version;
char *s;
char tag;
char tmp_nodename[MAXNODELEN+1];
@@ -2459,47 +2410,26 @@ static int recv_challenge(ei_socket_callbacks *cbs, void *ctx,
}
s = buf;
tag = get8(s);
- if (tag != 'n' && tag != 'N') {
+ if (tag != 'N') {
EI_TRACE_ERR2("recv_challenge",
"<- RECV_CHALLENGE incorrect tag, "
- "expected 'n' or 'N', got '%c' (%u)",tag,tag);
+ "expected 'N', got '%c' (%u)", tag, tag);
goto error;
}
- if (tag == 'n') { /* OLD */
- if (rlen < 1+2+4+4) {
- EI_TRACE_ERR1("recv_challenge","<- RECV_CHALLENGE 'n' packet too short (%d)",
- rlen)
- goto error;
- }
-
- version = get16be(s);
- if (version != EI_DIST_5) {
- EI_TRACE_ERR1("recv_challenge",
- "<- RECV_CHALLENGE 'n' incorrect version=%d",
- version);
- goto error;
- }
- *flags = get32be(s);
- *challenge = get32be(s);
- nodename_len = (buf + rlen) - s;
- }
- else { /* NEW */
- if (rlen < 1+8+4+4+2) {
- EI_TRACE_ERR1("recv_challenge","<- RECV_CHALLENGE 'N' packet too short (%d)",
- rlen)
- goto error;
- }
- version = EI_DIST_6;
- *flags = get64be(s);
- *challenge = get32be(s);
- s += 4; /* ignore peer 'creation' */
- nodename_len = get16be(s);
- if (nodename_len > (buf + rlen) - s) {
- EI_TRACE_ERR1("recv_challenge",
- "<- RECV_CHALLENGE 'N' nodename too long (%d)",
- nodename_len);
- goto error;
- }
+ if (rlen < 1+8+4+4+2) {
+ EI_TRACE_ERR1("recv_challenge","<- RECV_CHALLENGE 'N' packet too short (%d)",
+ rlen)
+ goto error;
+ }
+ *flags = get64be(s);
+ *challenge = get32be(s);
+ s += 4; /* ignore peer 'creation' */
+ nodename_len = get16be(s);
+ if (nodename_len > (buf + rlen) - s) {
+ EI_TRACE_ERR1("recv_challenge",
+ "<- RECV_CHALLENGE 'N' nodename too long (%d)",
+ nodename_len);
+ goto error;
}
if (nodename_len > MAXNODELEN) {
@@ -2526,12 +2456,10 @@ static int recv_challenge(ei_socket_callbacks *cbs, void *ctx,
if (!is_static)
free(buf);
- EI_TRACE_CONN4("recv_challenge","<- RECV_CHALLENGE (ok) node = %s, "
- "version = %u, "
+ EI_TRACE_CONN3("recv_challenge","<- RECV_CHALLENGE (ok) node = %s, "
"flags = %u, "
"challenge = %d",
namebuf,
- version,
*flags,
*challenge
);
@@ -2543,63 +2471,6 @@ error:
return -1;
}
-static int send_complement(ei_cnode *ec,
- void *ctx,
- int pkt_sz,
- unsigned epmd_says_version,
- DistFlags her_flags,
- unsigned ms)
-{
- int ret = 0;
- if (epmd_says_version == EI_DIST_5 && (her_flags & DFLAG_HANDSHAKE_23)) {
- char *buf;
- unsigned char *s;
- char dbuf[DEFBUF_SIZ];
- int err;
- ssize_t len;
- unsigned int flagsHigh;
- const int siz = pkt_sz + 1 + 4 + 4;
-
- buf = (siz > DEFBUF_SIZ) ? malloc(siz) : dbuf;
- if (!buf) {
- erl_errno = ENOMEM;
- return -1;
- }
- s = (unsigned char *)buf;
- switch (pkt_sz) {
- case 2:
- put16be(s,siz - 2);
- break;
- case 4:
- put32be(s,siz - 4);
- break;
- default:
- ret = -1;
- goto done;
- }
- flagsHigh = preferred_flags() >> 32;
-
- put8(s, 'c');
- put32be(s, flagsHigh);
- put32be(s, ec->creation);
-
- len = (ssize_t) siz;
- err = ei_write_fill_ctx_t__(ec->cbs, ctx, buf, &len, ms);
- if (!err && len != (ssize_t) siz)
- err = EIO;
- if (err) {
- EI_TRACE_ERR0("send_name", "SEND_NAME -> socket write failed");
- EI_CONN_SAVE_ERRNO__(err);
- ret = -1;
- }
- done:
- if (buf != dbuf)
- free(buf);
- }
- return ret;
-}
-
-
static int send_challenge_reply(ei_socket_callbacks *cbs, void *ctx,
int pkt_sz, unsigned char digest[16],
unsigned challenge, unsigned ms)
@@ -2646,54 +2517,6 @@ static int send_challenge_reply(ei_socket_callbacks *cbs, void *ctx,
return 0;
}
-static int recv_complement(ei_socket_callbacks *cbs,
- void *ctx,
- int pkt_sz,
- unsigned ms)
-{
- char dbuf[DEFBUF_SIZ];
- char *buf = dbuf;
- int is_static = 1;
- int buflen = DEFBUF_SIZ;
- int rlen;
- char *s;
- char tag;
- unsigned int creation;
-
- erl_errno = EIO; /* Default */
-
- if ((rlen = read_hs_package(cbs, ctx, pkt_sz, &buf, &buflen, &is_static, ms)) != 21) {
- EI_TRACE_ERR1("recv_complement",
- "<- RECV_COMPLEMENT socket read failed (%d)",rlen);
- goto error;
- }
-
- s = buf;
- if ((tag = get8(s)) != 'c') {
- EI_TRACE_ERR2("recv_complement",
- "<- RECV_COMPLEMENT incorrect tag, "
- "expected 'c' got '%c' (%u)",tag,tag);
- goto error;
- }
- creation = get32be(s);
- if (!is_static)
- free(buf);
-
- if (ei_tracelevel >= 3) {
- EI_TRACE_CONN1("recv_complement",
- "<- RECV_COMPLEMENT (ok) creation = %u",
- creation);
- }
- /* We don't have any use for 'creation' of other node, so we drop it */
- erl_errno = 0;
- return 0;
-
-error:
- if (!is_static)
- free(buf);
- return -1;
-}
-
static int recv_challenge_reply(ei_socket_callbacks *cbs,
void *ctx,
int pkt_sz,
@@ -2850,7 +2673,7 @@ error:
}
static int recv_name(ei_socket_callbacks *cbs, void *ctx,
- int pkt_sz, char *send_name_tag,
+ int pkt_sz,
DistFlags *flags, char *namebuf, unsigned ms)
{
char dbuf[DEFBUF_SIZ];
@@ -2872,38 +2695,19 @@ static int recv_name(ei_socket_callbacks *cbs, void *ctx,
}
s = buf;
tag = get8(s);
- *send_name_tag = tag;
- if (tag != 'n' && tag != 'N') {
+ if (tag != 'N') {
EI_TRACE_ERR2("recv_name","<- RECV_NAME incorrect tag, "
- "expected 'n' or 'N', got '%c' (%u)",tag,tag);
+ "expected 'N', got '%c' (%u)",tag,tag);
goto error;
}
- if (tag == 'n') {
- unsigned int version;
- if (rlen < 1+2+4) {
- EI_TRACE_ERR1("recv_name","<- RECV_NAME 'n' packet too short (%d)",
- rlen)
- goto error;
- }
- version = get16be(s);
- if (version < EI_DIST_5) {
- EI_TRACE_ERR1("recv_name","<- RECV_NAME 'n' invalid version=%d",
- version)
- goto error;
- }
- *flags = get32be(s);
- namelen = rlen - (1+2+4);
- }
- else { /* tag == 'N' */
- if (rlen < 1+8+4+2) {
- EI_TRACE_ERR1("recv_name","<- RECV_NAME 'N' packet too short (%d)",
- rlen)
- goto error;
- }
- *flags = get64be(s);
- s += 4; /* ignore peer 'creation' */
- namelen = get16be(s);
+ if (rlen < 1+8+4+2) {
+ EI_TRACE_ERR1("recv_name","<- RECV_NAME 'N' packet too short (%d)",
+ rlen)
+ goto error;
}
+ *flags = get64be(s);
+ s += 4; /* ignore peer 'creation' */
+ namelen = get16be(s);
if (*flags & DFLAG_MANDATORY_25_DIGEST) {
*flags |= DFLAG_DIST_MANDATORY_25;
@@ -2920,8 +2724,8 @@ static int recv_name(ei_socket_callbacks *cbs, void *ctx,
namebuf = &tmp_nodename[0];
if (namelen > MAXNODELEN || s+namelen > buf+rlen) {
- EI_TRACE_ERR2("recv_name","<- RECV_NAME '%c' nodename too long (%d)",
- tag, namelen);
+ EI_TRACE_ERR1("recv_name","<- RECV_NAME nodename too long (%d)",
+ namelen);
goto error;
}
@@ -2930,9 +2734,9 @@ static int recv_name(ei_socket_callbacks *cbs, void *ctx,
if (!is_static)
free(buf);
- EI_TRACE_CONN3("recv_name",
- "<- RECV_NAME (ok) node = %s, tag = %c, flags = %u",
- namebuf,tag,*flags);
+ EI_TRACE_CONN2("recv_name",
+ "<- RECV_NAME (ok) node = %s, flags = %u",
+ namebuf, *flags);
erl_errno = 0;
return 0;
diff --git a/lib/erl_interface/src/epmd/ei_epmd.h b/lib/erl_interface/src/epmd/ei_epmd.h
index 6a274b606a..1b234fb34d 100644
--- a/lib/erl_interface/src/epmd/ei_epmd.h
+++ b/lib/erl_interface/src/epmd/ei_epmd.h
@@ -24,12 +24,11 @@
#define INADDR_LOOPBACK ((u_long) 0x7F000001)
#endif
-#define EI_DIST_5 5 /* OTP R4 - 22 */
#define EI_DIST_6 6 /* OTP 23 and later */
#ifndef EI_DIST_HIGH
#define EI_DIST_HIGH EI_DIST_6
-#define EI_DIST_LOW EI_DIST_5
+#define EI_DIST_LOW EI_DIST_6
#endif
#ifndef EPMD_PORT
diff --git a/lib/erl_interface/src/epmd/epmd_publish.c b/lib/erl_interface/src/epmd/epmd_publish.c
index 3e251d6a64..ff7f3f5323 100644
--- a/lib/erl_interface/src/epmd/epmd_publish.c
+++ b/lib/erl_interface/src/epmd/epmd_publish.c
@@ -76,8 +76,8 @@ static int ei_epmd_r4_publish (int port, const char *alive, unsigned ms)
put16be(s,port); /* port number */
put8(s,'h'); /* h = r4 hidden node */
put8(s, EI_MYPROTO); /* protocol 0 ?? */
- put16be(s,EI_DIST_HIGH); /* highest understood version: 1 = R4 */
- put16be(s,EI_DIST_LOW); /* lowest: 0 = R3 */
+ put16be(s,EI_DIST_HIGH); /* highest understood version */
+ put16be(s,EI_DIST_LOW); /* lowest */
put16be(s,nlen); /* length of alivename */
strcpy(s, alive);
s += nlen;
diff --git a/lib/erl_interface/test/ei_tmo_SUITE.erl b/lib/erl_interface/test/ei_tmo_SUITE.erl
index 49e889bdf3..964ec121f4 100644
--- a/lib/erl_interface/test/ei_tmo_SUITE.erl
+++ b/lib/erl_interface/test/ei_tmo_SUITE.erl
@@ -95,7 +95,8 @@ end_per_testcase(_Case, _Config) ->
?DFLAG_NEW_FLOATS bor
?DFLAG_MAP_TAG bor
?DFLAG_EXPORT_PTR_TAG bor
- ?DFLAG_BIT_BINARIES)).
+ ?DFLAG_BIT_BINARIES bor
+ ?DFLAG_HANDSHAKE_23)).
%% Check the framework.
framework_check(Config) when is_list(Config) ->
@@ -142,7 +143,7 @@ do_one_recv_failure(Config,CNode) ->
true = (Ret < 0),
runner:recv_eot(P1).
--define(EI_DIST_LOW, 5).
+-define(EI_DIST_LOW, 6).
-define(EI_DIST_HIGH, 6).
%% Check send with timeouts.
@@ -176,15 +177,11 @@ do_one_send(Config,From,CNode) ->
ei_send_failure_tmo(Config) when is_list(Config) ->
register(ei_send_tmo_1,self()),
- [begin
- io:format("Test dist version ~p\n", [Ver]),
- do_one_send_failure(Config,self(),cccc1,c_nod_send_tmo_3, Ver),
- do_one_send_failure(Config,ei_send_tmo_1,cccc2,c_nod_send_tmo_4, Ver)
- end
- || Ver <- lists:seq(?EI_DIST_LOW, ?EI_DIST_HIGH)],
+ do_one_send_failure(Config,self(),cccc1,c_nod_send_tmo_3),
+ do_one_send_failure(Config,ei_send_tmo_1,cccc2,c_nod_send_tmo_4),
ok.
-do_one_send_failure(Config,From,FakeName,CName, OurVer) ->
+do_one_send_failure(Config,From,FakeName,CName) ->
{_,Host} = split(node()),
OurName = join(FakeName,Host),
Node = join(CName,Host),
@@ -194,7 +191,7 @@ do_one_send_failure(Config,From,FakeName,CName, OurVer) ->
Else ->
exit(Else)
end,
- EpmdSocket = epmd_register(OurName, LSocket, OurVer),
+ EpmdSocket = epmd_register(OurName, LSocket),
P3 = runner:start(Config, ?send_tmo),
Cookie = kaksmula_som_ingen_bryr_sig_om,
runner:send_term(P3,{CName,
@@ -207,10 +204,10 @@ do_one_send_failure(Config,From,FakeName,CName, OurVer) ->
Else2 ->
exit(Else2)
end,
- {hidden,Node} = recv_name(SocketB, OurVer), % See 1)
+ {hidden,Node} = recv_name(SocketB), % See 1)
send_status(SocketB, ok),
MyChallengeB = gen_challenge(),
- send_challenge(SocketB, OurName, MyChallengeB, OurVer),
+ send_challenge(SocketB, OurName, MyChallengeB),
HisChallengeB = recv_challenge_reply(SocketB,
MyChallengeB,
Cookie),
@@ -256,18 +253,6 @@ ei_connect_unreachable_tmo(Config) when is_list(Config) ->
ok.
ei_connect_tmo(Config) when is_list(Config) ->
- [begin
- io:format("Test dist version ~p published as ~p\n",
- [OurVer,OurEpmdVer]),
- do_ei_connect_tmo(Config, OurVer, OurEpmdVer)
- end
- || OurVer <- lists:seq(?EI_DIST_LOW, ?EI_DIST_HIGH),
- OurEpmdVer <- lists:seq(?EI_DIST_LOW, ?EI_DIST_HIGH),
- OurVer >= OurEpmdVer],
-
- ok.
-
-do_ei_connect_tmo(Config, OurVer, OurEpmdVer) ->
Flags = ?COMPULSORY_DFLAGS bor ?DFLAG_MANDATORY_25_DIGEST,
P2 = runner:start(Config, ?connect_tmo),
@@ -289,7 +274,7 @@ do_ei_connect_tmo(Config, OurVer, OurEpmdVer) ->
Else ->
exit(Else)
end,
- EpmdSocket = epmd_register(OurName, LSocket, OurEpmdVer),
+ EpmdSocket = epmd_register(OurName, LSocket),
P3 = runner:start(Config, ?connect_tmo),
Cookie = kaksmula_som_ingen_bryr_sig_om,
runner:send_term(P3,{c_nod_connect_tmo_3,
@@ -302,11 +287,10 @@ do_ei_connect_tmo(Config, OurVer, OurEpmdVer) ->
Else2 ->
exit(Else2)
end,
- {hidden,Node} = recv_name(SocketB, OurEpmdVer), % See 1)
+ {hidden,Node} = recv_name(SocketB), % See 1)
send_status(SocketB, ok),
MyChallengeB = gen_challenge(),
- send_challenge(SocketB, OurName, MyChallengeB, OurVer, Flags),
- recv_complement(SocketB, OurVer, OurEpmdVer),
+ send_challenge(SocketB, OurName, MyChallengeB, Flags),
_HisChallengeB = recv_challenge_reply(SocketB,
MyChallengeB,
Cookie),
@@ -319,17 +303,6 @@ do_ei_connect_tmo(Config, OurVer, OurEpmdVer) ->
%% Check accept with timeouts.
ei_accept_tmo(Config) when is_list(Config) ->
- [begin
- io:format("Test our dist ver=~p and assumed ver=~p\n",
- [OurVer, AssumedVer]),
- do_ei_accept_tmo(Config, OurVer, AssumedVer)
- end
- || OurVer <- lists:seq(?EI_DIST_LOW, ?EI_DIST_HIGH),
- AssumedVer <- lists:seq(?EI_DIST_LOW, ?EI_DIST_HIGH),
- OurVer >= AssumedVer],
- ok.
-
-do_ei_accept_tmo(Config, OurVer, AssumedVer) ->
Flags = ?COMPULSORY_DFLAGS bor ?DFLAG_MANDATORY_25_DIGEST,
P = runner:start(Config, ?accept_tmo),
@@ -350,11 +323,11 @@ do_ei_accept_tmo(Config, OurVer, AssumedVer) ->
runner:recv_eot(P2),
true = is_integer(X),
- normal_accept(Config, OurVer, AssumedVer, Flags),
+ normal_accept(Config, Flags),
ok.
-normal_accept(Config, OurVer, AssumedVer, Flags) ->
+normal_accept(Config, Flags) ->
P = runner:start(Config, ?accept_tmo),
runner:send_term(P,{c_nod_som_vi_kontaktar_2,
erlang:get_cookie(),
@@ -368,9 +341,9 @@ normal_accept(Config, OurVer, AssumedVer, Flags) ->
{ok, SocketA} = gen_tcp:connect(atom_to_list(NB),PortNo,
[{active,false},
{packet,2}]),
- send_name(SocketA, OurName, OurVer, AssumedVer, Flags),
+ send_name(SocketA, OurName, Flags),
ok = recv_status(SocketA),
- {hidden,_Node,HisChallengeA} = recv_challenge(SocketA,OurVer), % See 1)
+ {hidden,_Node,HisChallengeA} = recv_challenge(SocketA), % See 1)
_OurChallengeA = gen_challenge(),
_OurDigestA = gen_digest(HisChallengeA, erlang:get_cookie()),
%% Dont do the last two steps of the connection setup...
@@ -380,7 +353,7 @@ normal_accept(Config, OurVer, AssumedVer, Flags) ->
runner:recv_eot(P),
gen_tcp:close(SocketA).
-normal_connect(Config, OurVer, Flags) ->
+normal_connect(Config, Flags) ->
{_,Host} = split(node()),
OurName = join(cccc,Host),
Node = join(c_nod_connect_tmo_3,Host),
@@ -390,7 +363,7 @@ normal_connect(Config, OurVer, Flags) ->
Else ->
exit(Else)
end,
- EpmdSocket = epmd_register(OurName, LSocket, OurVer),
+ EpmdSocket = epmd_register(OurName, LSocket),
P3 = runner:start(Config, ?connect_tmo),
Cookie = kaksmula_som_ingen_bryr_sig_om,
runner:send_term(P3, {c_nod_connect_tmo_3,
@@ -403,11 +376,10 @@ normal_connect(Config, OurVer, Flags) ->
Else2 ->
exit(Else2)
end,
- {hidden,Node} = recv_name(SocketB, OurVer),
+ {hidden,Node} = recv_name(SocketB),
send_status(SocketB, ok),
MyChallengeB = gen_challenge(),
- send_challenge(SocketB, OurName, MyChallengeB, OurVer, Flags),
- recv_complement(SocketB, OurVer, OurVer),
+ send_challenge(SocketB, OurName, MyChallengeB, Flags),
gen_tcp:close(SocketB),
gen_tcp:close(EpmdSocket),
ok.
@@ -429,20 +401,13 @@ make_and_check_dummy() ->
%% Test that erl_interface sets the appropriate distributions flags.
ei_dflags(Config) ->
- AssumedVer = 5,
- OurVer = 6,
-
%% Test compatibility with OTP 24 and earlier.
- normal_connect(Config, AssumedVer, ?COMPULSORY_DFLAGS),
- normal_connect(Config, OurVer, ?COMPULSORY_DFLAGS),
- normal_accept(Config, OurVer, AssumedVer, ?COMPULSORY_DFLAGS),
- normal_accept(Config, OurVer, OurVer, ?COMPULSORY_DFLAGS),
+ normal_connect(Config, ?COMPULSORY_DFLAGS),
+ normal_accept(Config, ?COMPULSORY_DFLAGS),
%% Test compatibility with future versions.
- normal_connect(Config, AssumedVer, ?DFLAG_MANDATORY_25_DIGEST),
- normal_connect(Config, OurVer, ?DFLAG_MANDATORY_25_DIGEST),
- normal_accept(Config, OurVer, AssumedVer, ?DFLAG_MANDATORY_25_DIGEST),
- normal_accept(Config, OurVer, OurVer, ?DFLAG_MANDATORY_25_DIGEST),
+ normal_connect(Config, ?DFLAG_MANDATORY_25_DIGEST),
+ normal_accept(Config, ?DFLAG_MANDATORY_25_DIGEST),
ok.
@@ -518,40 +483,25 @@ recv_status(Socket) ->
exit(Bad)
end.
-send_challenge(Socket, Node, Challenge, OurVer) ->
+send_challenge(Socket, Node, Challenge) ->
DefaultFlags = ?COMPULSORY_DFLAGS bor ?DFLAG_MANDATORY_25_DIGEST,
- send_challenge(Socket, Node, Challenge, OurVer, DefaultFlags).
-
-send_challenge(Socket, Node, Challenge, OurVer, Flags) ->
- if OurVer =:= 5 ->
- ?to_port(Socket, [$n, ?int16(OurVer), ?int32(Flags),
- ?int32(Challenge), atom_to_list(Node)]);
- OurVer >= 6 ->
- NodeName = atom_to_binary(Node, latin1),
- NameLen = byte_size(NodeName),
- Creation = erts_internal:get_creation(),
- ?to_port(Socket, [$N,
- <<(Flags bor ?DFLAG_HANDSHAKE_23):64,
- Challenge:32,
- Creation:32,
- NameLen:16>>,
- NodeName])
- end.
-
-recv_challenge(Socket, OurVer) ->
+ send_challenge(Socket, Node, Challenge, DefaultFlags).
+
+send_challenge(Socket, Node, Challenge, Flags) ->
+ NodeName = atom_to_binary(Node, latin1),
+ NameLen = byte_size(NodeName),
+ Creation = erts_internal:get_creation(),
+ ?to_port(Socket, [$N,
+ << Flags:64,
+ Challenge:32,
+ Creation:32,
+ NameLen:16>>,
+ NodeName]).
+
+recv_challenge(Socket) ->
case gen_tcp:recv(Socket, 0) of
- {ok,[$n,V1,V0,Fl1,Fl2,Fl3,Fl4,CA3,CA2,CA1,CA0 | Ns]} ->
- 5 = OurVer,
- Flags = ?u32(Fl1,Fl2,Fl3,Fl4),
- Type = flags_to_type(Flags),
- Node =list_to_atom(Ns),
- OurVer = ?u16(V1,V0), % echoed back
- Challenge = ?u32(CA3,CA2,CA1,CA0),
- {Type,Node,Challenge};
-
{ok,[$N, F7,F6,F5,F4,F3,F2,F1,F0, CA3,CA2,CA1,CA0,
_Cr3,_Cr2,_Cr1,_Cr0, NL1,NL0 | Rest]} ->
- true = (OurVer >= 6),
<<Flags:64>> = <<F7,F6,F5,F4,F3,F2,F1,F0>>,
verify_flags(Flags),
Type = flags_to_type(Flags),
@@ -608,34 +558,18 @@ send_challenge_ack(Socket, Digest) ->
% ?shutdown(bad_challenge_ack)
% end.
-send_name(Socket, MyNode, OurVer, AssumedVer, Flags0) ->
- Flags = Flags0 bor case OurVer of
- 5 -> 0;
- 6 -> ?DFLAG_HANDSHAKE_23
- end,
+send_name(Socket, MyNode, Flags) ->
NodeName = atom_to_binary(MyNode, latin1),
- if AssumedVer =:= 5 ->
- ?to_port(Socket, [$n,?int16(OurVer),?int32(Flags),NodeName]);
- AssumedVer >= 6 ->
- Creation = erts_internal:get_creation(),
- ?to_port(Socket, [$N,
- <<Flags:64,
- Creation:32,
- (byte_size(NodeName)):16>>,
- NodeName])
- end.
-
-recv_name(Socket, OurEpmdVer) ->
+ Creation = erts_internal:get_creation(),
+ ?to_port(Socket, [$N,
+ <<Flags:64,
+ Creation:32,
+ (byte_size(NodeName)):16>>,
+ NodeName]).
+
+recv_name(Socket) ->
case gen_tcp:recv(Socket, 0) of
- {ok,[$n, V1,V0, F3,F2,F1,F0 | OtherNode]} ->
- 5 = OurEpmdVer,
- 5 = ?u16(V1,V0),
- Flags = ?u32(F3, F2, F1, F0),
- verify_flags(Flags),
- Type = flags_to_type(Flags),
- {Type, list_to_atom(OtherNode)};
{ok,[$N, F7,F6,F5,F4,F3,F2,F1,F0, _Cr3,_Cr2,_Cr1,_Cr0, NL1, NL0 | Rest]} ->
- true = (OurEpmdVer >= 6),
{OtherNode, _Residue} = lists:split(?u16(NL1,NL0), Rest),
<<Flags:64>> = <<F7,F6,F5,F4,F3,F2,F1,F0>>,
verify_flags(Flags),
@@ -645,17 +579,6 @@ recv_name(Socket, OurEpmdVer) ->
?shutdown({no_node,Res})
end.
-recv_complement(Socket, OurVer, 5) when OurVer > 5 ->
- case gen_tcp:recv(Socket, 0) of
- {ok,[$c, _F7,_F6,_F5,_F4, _Cr3,_Cr2,_Cr1,_Cr0]} ->
- ok;
- Res ->
- ?shutdown({no_node,Res})
- end;
-recv_complement(_, _OurVer, _OurEpmdVer) ->
- ok.
-
-
%%
%% tell_name is for old handshake
%%
@@ -667,7 +590,7 @@ recv_complement(_, _OurVer, _OurEpmdVer) ->
%%
%% The communication with EPMD follows
%%
-do_register_node(NodeName, TcpPort, VLow, VHigh) ->
+do_register_node(NodeName, TcpPort) ->
case gen_tcp:connect({127,0,0,1}, get_epmd_port(), []) of
{ok, Socket} ->
{N0,_} = split(NodeName),
@@ -679,8 +602,8 @@ do_register_node(NodeName, TcpPort, VLow, VHigh) ->
?int16(TcpPort),
$M,
0,
- ?int16(VHigh),
- ?int16(VLow),
+ ?int16(?EI_DIST_HIGH),
+ ?int16(?EI_DIST_LOW),
?int16(length(Name)),
Name,
?int16(Elen),
@@ -716,9 +639,9 @@ wait_for_reg_reply(Socket, SoFar) ->
end.
-epmd_register(NodeName, ListenSocket, OurVer) ->
+epmd_register(NodeName, ListenSocket) ->
{ok,{_,TcpPort}} = inet:sockname(ListenSocket),
- case do_register_node(NodeName, TcpPort, ?EI_DIST_LOW, OurVer) of
+ case do_register_node(NodeName, TcpPort) of
{alive, Socket, _Creation} ->
Socket;
Other ->
diff --git a/lib/kernel/include/dist.hrl b/lib/kernel/include/dist.hrl
index 3c2d6323e3..2cd2dd1fb4 100644
--- a/lib/kernel/include/dist.hrl
+++ b/lib/kernel/include/dist.hrl
@@ -75,11 +75,9 @@
%% Also update dflag2str() in ../src/dist_util.erl
%% when adding flags...
+-define(ERL_DIST_VER_6, 6). % OTP-23 at least
--define(ERL_DIST_VER_5, 5). % OTP-22 or (much) older
--define(ERL_DIST_VER_6, 6). % OTP-23 (or maybe newer?)
-
--define(ERL_DIST_VER_LOW, ?ERL_DIST_VER_5).
+-define(ERL_DIST_VER_LOW, ?ERL_DIST_VER_6).
-define(ERL_DIST_VER_HIGH, ?ERL_DIST_VER_6).
%%%