Fwd: RE: TCP CL & interoperability with ION
Dear IBR-DTN maintainers, I have just received the answer below from Scott Burleigh, regarding ipn syntax and interoperability between IBR-DTN and ION via TCP-CL. I will remail it on this mailing list. In the meantime I have also tested routing rules with ipn scheme in IBR-DTN and I am happy to inform you all that all tests passed! This means that full interoperability with ION can be achieved with the (I suppose not too difficult) fix suggested below. I have not tested BSP security yet. Of course, I am willing to provide you with further details or explanations if useful. I look forward to hearing from you. Yours, Carlo
Hi, Carlo. I'm sorry, the last couple of weeks have been quite difficult and I am only now catching up on the emails. Some remarks in-line below.
Scott
-----Original Message----- From: Carlo Caini [mailto:carlo.caini@unibo.itmailto:carlo.caini@unibo.it] Sent: Sunday, April 24, 2016 3:40 AM To: ibr-dtn@ibr.cs.tu-bs.de Cc: Burleigh, Scott C (312B) scott.c.burleigh@jpl.nasa.gov Subject: TCP CL & interoperability with ION
In these days I have carried out some interoperability tests between IBR-DTN and ION with TCP as CL (RFC7242, June 2014). When the TCP connection is established, the TCP CL sends a message, called contact header, including the local EID. Each end-node sends its contact header to the corresponding pair. What happens then is largely left to the implementation. Let me assume that you have two nodes, 1 and 2, with IBR-DTN on 1 and ION on 2. When the TCP connection is started by ION, we have a failure because IBR-DTN advertises itself back as ipn:1 instead of ipn:1.0. In other words, ION performs a check on the EID of the corresponding node, and this check fails because of the lack of the last part of the EID (".0").
Right. When ION initiates the
connection, it does so under the guidance of the "egress plans" that identify its neighbors. Each egress plan associates a node ID with a convergence-layer endpoint ID, e.g., a socket name; since node IDs are formed as DTN endpoint IDs, the ION node's egress plan for the IBR-DTN node associated the EID "ipn:1.0" with that node's socket name. When the answering contact header says that the neighboring node identifies itself as "ipn:1" instead, ION detects that the node it has connected to is not the one it was trying to connect to, so for safety it drops the connection.
If the connection is started from IBR-DTN it succeeds, maybe because ION does not perform a similar check in input, but I am not sure.
Yes. In this case, ION has no idea who
the connecting node is, so the EID in the IBR-DTN node's contact header can't be validated against anything; it is simply accepted.
The details of my test (Test3) are below. I have noticed that in other logs IBR-DTN makes use of a "shothened" ipn EID to identify a node, as below: Sat Apr 23 20:52:51 2016 NOTICE ConnectionEvent: connection up ipn:2
Sat Apr 23 20:52:51 2016 NOTICE NodeEvent: Node ipn:2 available
Sat Apr 23 20:52:51 2016 NOTICE ConnectionEvent: connection down ipn:2
From the man of ipnadmin (see below) it seems that an ipn EID always includes a service number, and in practice that "0" is used as default.
Actually the service number is simply
mandatory; the registered definition for the "ipn" URI scheme requires it. The definition also reserves service number 0 for "administration" or something like that, as I recall.
If this is correct, I suppose that IBR-DTN should always use ipn:1.0 instead of ipn:1. However, I could also be wrong.
Nope, you are correct.
I have also successfully performed an analogue test (Test 4) with the dtn scheme. In this case the EID given back by IBR-DTN is dtn://vm1.dtn, which is the same EID expected by ION; note that in ION configuration, in the line a plan //vm1.dtn x tcp/10.0.1.1 "//vm1.dtn" is the name of the node, equivalent to "1" in ipn. In brief, in the dtn scheme it seems not necessary to include a demux token as in ipn. As ipn and dtn syntaxes are often challenging also to people that are familiar with DTN, I send this mail in cc also to Scott Burleigh, which is the ION and ipn scheme designer in order to have confirmation of the ipn syntax. Yours, Carlo
Test 3) Failed. The TCP CL of IBR DTN gives ipn:1 where ipn:1.0 is expected by ION (syn from ION) From vm1 ibrdtn.conf
# the local eid of the dtn node # default is the hostname local_uri = ipn:1.0
From vm2 ION configuration file #Outduct to Vm1 a outduct tcp 10.0.1.1 '' a plan 1 x tcp/10.0.1.1
From vm2 logs [2016/04/23-19:01:10] [i] Connected to TCP socket: 10.0.1.1:4556 [2016/04/23-19:01:10] [?] expected tcpcl EID: ipn:1.0 [2016/04/23-19:01:10] [?] received tcpcl EID: ipn:1 [2016/04/23-19:01:10] [i] tcpcli got no valid contact header: ipn:1.0
Test 4) Passed The TCP CL of IBR DTN gives dtn://vm1 as expected by ION (syn from ION) From vm1 ibrdtn.conf # the local eid of the dtn node # default is the hostname local_uri = dtn://vm1.dtn
From vm2 ION configuration #Outduct to Vm1 a outduct tcp 10.0.1.1 '' a plan //vm1.dtn x tcp/10.0.1.1
From the man of ipnadmin (ION) ipnadmin configures the local ION node's routing of bundles to endpoints whose IDs conform to the ipn endpoint ID scheme. ipn is a CBHE-conformant scheme; that is, every endpoint ID in the ipn scheme is a string of the form "ipn:node_number.service_number" where node_number is a CBHE "node number" and service_number identifies a specific application processing point.
5x1000 AI GIOVANI RICERCATORI DELL'UNIVERSITÃEUR DI BOLOGNA Codice Fiscale: 80007010376
5x1000 AI GIOVANI RICERCATORI DELL'UNIVERSITÀ DI BOLOGNA Codice Fiscale: 80007010376
Hello Carlo,
there is now a fix for the IPN string representation in the master branch of IBR-DTN. https://github.com/ibrdtn/ibrdtn/commit/8128d516e8bb696a6402f6234e9764118d0c...
It would be nice, if you can test that change and confirm that it will allow incoming connections from ION to IBR-DTN.
Kind regards, Johannes Morgenroth
-----Original Message----- From: Ibr-dtn [mailto:ibr-dtn-bounces@ibr.cs.tu-bs.de] On Behalf Of Carlo Caini Sent: Friday, April 29, 2016 10:39 AM To: ibr-dtn@ibr.cs.tu-bs.de Cc: Burleigh, Scott C (312B) scott.c.burleigh@jpl.nasa.gov Subject: [ibr-dtn] Fwd: RE: TCP CL & interoperability with ION
Dear IBR-DTN maintainers, I have just received the answer below from Scott Burleigh, regarding ipn syntax and interoperability between IBR-DTN and ION via TCP-CL. I will remail it on this mailing list. In the meantime I have also tested routing rules with ipn scheme in IBR-DTN and I am happy to inform you all that all tests passed! This means that full interoperability with ION can be achieved with the (I suppose not too difficult) fix suggested below. I have not tested BSP security yet. Of course, I am willing to provide you with further details or explanations if useful. I look forward to hearing from you. Yours, Carlo
Hi, Carlo. I'm sorry, the last couple of weeks have been quite difficult and I am only now catching up on the emails. Some remarks in-line below.
Scott
-----Original Message----- From: Carlo Caini [mailto:carlo.caini@unibo.itmailto:carlo.caini@unibo.it] Sent: Sunday, April 24, 2016 3:40 AM To: ibr-dtn@ibr.cs.tu-bs.de Cc: Burleigh, Scott C (312B) scott.c.burleigh@jpl.nasa.gov Subject: TCP CL & interoperability with ION
In these days I have carried out some interoperability tests between IBR-DTN and ION with TCP as CL (RFC7242, June 2014). When the TCP connection is established, the TCP CL sends a message, called contact header, including the local EID. Each end-node sends its contact header to the corresponding pair. What happens then is largely left to the implementation. Let me assume that you have two nodes, 1 and 2, with IBR-DTN on 1 and ION on 2. When the TCP connection is started by ION, we have a failure because IBR-DTN advertises itself back as ipn:1 instead of ipn:1.0. In other words, ION performs a check on the EID of the corresponding node, and this check fails because of the lack of the last part of the EID (".0").
Right. When ION initiates the
connection, it does so under the guidance of the "egress plans" that identify its neighbors. Each egress plan associates a node ID with a convergence-layer endpoint ID, e.g., a socket name; since node IDs are formed as DTN endpoint IDs, the ION node's egress plan for the IBR-DTN node associated the EID "ipn:1.0" with that node's socket name. When the answering contact header says that the neighboring node identifies itself as "ipn:1" instead, ION detects that the node it has connected to is not the one it was trying to connect to, so for safety it drops the connection.
If the connection is started from IBR-DTN it succeeds, maybe because ION does not perform a similar check in input, but I am not sure.
Yes. In this case, ION has no idea who
the connecting node is, so the EID in the IBR-DTN node's contact header can't be validated against anything; it is simply accepted.
The details of my test (Test3) are below. I have noticed that in other logs IBR-DTN makes use of a "shothened" ipn EID to identify a node, as below: Sat Apr 23 20:52:51 2016 NOTICE ConnectionEvent: connection up ipn:2
Sat Apr 23 20:52:51 2016 NOTICE NodeEvent: Node ipn:2 available
Sat Apr 23 20:52:51 2016 NOTICE ConnectionEvent: connection down ipn:2
From the man of ipnadmin (see below) it seems that an ipn EID always includes a service number, and in practice that "0" is used as default.
Actually the service number is simply
mandatory; the registered definition for the "ipn" URI scheme requires it. The definition also reserves service number 0 for "administration" or something like that, as I recall.
If this is correct, I suppose that IBR-DTN should always use ipn:1.0 instead of ipn:1. However, I could also be wrong.
Nope, you are correct.
I have also successfully performed an analogue test (Test 4) with the dtn scheme. In this case the EID given back by IBR-DTN is dtn://vm1.dtn, which is the same EID expected by ION; note that in ION configuration, in the line a plan //vm1.dtn x tcp/10.0.1.1 "//vm1.dtn" is the name of the node, equivalent to "1" in ipn. In brief, in the dtn scheme it seems not necessary to include a demux token as in ipn. As ipn and dtn syntaxes are often challenging also to people that are familiar with DTN, I send this mail in cc also to Scott Burleigh, which is the ION and ipn scheme designer in order to have confirmation of the ipn syntax. Yours, Carlo
Test 3) Failed. The TCP CL of IBR DTN gives ipn:1 where ipn:1.0 is expected by ION (syn from ION) From vm1 ibrdtn.conf
# the local eid of the dtn node # default is the hostname local_uri = ipn:1.0
From vm2 ION configuration file #Outduct to Vm1 a outduct tcp 10.0.1.1 '' a plan 1 x tcp/10.0.1.1
From vm2 logs [2016/04/23-19:01:10] [i] Connected to TCP socket: 10.0.1.1:4556 [2016/04/23-19:01:10] [?] expected tcpcl EID: ipn:1.0 [2016/04/23-19:01:10] [?] received tcpcl EID: ipn:1 [2016/04/23-19:01:10] [i] tcpcli got no valid contact header: ipn:1.0
Test 4) Passed The TCP CL of IBR DTN gives dtn://vm1 as expected by ION (syn from ION) From vm1 ibrdtn.conf # the local eid of the dtn node # default is the hostname local_uri = dtn://vm1.dtn
From vm2 ION configuration #Outduct to Vm1 a outduct tcp 10.0.1.1 '' a plan //vm1.dtn x tcp/10.0.1.1
From the man of ipnadmin (ION) ipnadmin configures the local ION node's routing of bundles to endpoints whose IDs conform to the ipn endpoint ID scheme. ipn is a CBHE-conformant scheme; that is, every endpoint ID in the ipn scheme is a string of the form "ipn:node_number.service_number" where node_number is a
CBHE
"node number" and service_number identifies a specific application processing point.
5x1000 AI GIOVANI RICERCATORI DELL'UNIVERSITÃEUR DI BOLOGNA Codice Fiscale: 80007010376
5x1000 AI GIOVANI RICERCATORI DELL'UNIVERSITÀ DI BOLOGNA Codice Fiscale: 80007010376 -- !! This message is brought to you via the `ibr-dtn' mailing list. !! Please do not reply to this message to unsubscribe. To unsubscribe or adjust !! your settings, send a mail message to <ibr-dtn-request@ibr.cs.tu- bs.de> !! or look at https://mail.ibr.cs.tu-bs.de/listinfo/ibr-dtn.
Dear Johannes, I am pleased to confirm you that the fix has resolved the problem. Now a TCP connection can be established also starting from ION, and not just vice versa. Thank you very much for your fix that enhances IBR-DTN and ION interoperability. I have a couple of other requests, but has the topic is different I will send you another mail. Yours, Carlo
At 07:48 03/05/2016, Johannes Morgenroth wrote:
Hello Carlo,
there is now a fix for the IPN string representation in the master branch of IBR-DTN. https://github.com/ibrdtn/ibrdtn/commit/8128d516e8bb696a6402f6234e9764118d0c...
It would be nice, if you can test that change and confirm that it will allow incoming connections from ION to IBR-DTN.
Kind regards, Johannes Morgenroth
-----Original Message----- From: Ibr-dtn [mailto:ibr-dtn-bounces@ibr.cs.tu-bs.de] On Behalf Of Carlo Caini Sent: Friday, April 29, 2016 10:39 AM To: ibr-dtn@ibr.cs.tu-bs.de Cc: Burleigh, Scott C (312B) scott.c.burleigh@jpl.nasa.gov Subject: [ibr-dtn] Fwd: RE: TCP CL & interoperability with ION
Dear IBR-DTN maintainers, I have just received the answer below from Scott Burleigh, regarding ipn syntax and interoperability between IBR-DTN and ION via TCP-CL. I will remail it on this mailing list. In the meantime I have also tested routing rules with ipn scheme in IBR-DTN and I am happy to inform you all that all tests passed! This means that full interoperability with ION can be achieved with the (I suppose not too difficult) fix suggested below. I have not tested BSP security yet. Of course, I am willing to provide you with
further details or explanations if
useful. I look forward to hearing from you. Yours, Carlo
Hi, Carlo. I'm sorry, the last couple of weeks have been quite difficult and I am only now catching up on the emails. Some remarks in-line below.
Scott
-----Original Message----- From: Carlo Caini [mailto:carlo.caini@unibo.itmailto:carlo.caini@unibo.it] Sent: Sunday, April 24, 2016 3:40 AM To: ibr-dtn@ibr.cs.tu-bs.de Cc: Burleigh, Scott C (312B) scott.c.burleigh@jpl.nasa.gov Subject: TCP CL & interoperability with ION
In these days I have carried out some interoperability tests between IBR-DTN and ION with TCP as CL (RFC7242, June 2014). When the TCP connection is established, the TCP CL sends a message, called contact header, including the local EID. Each end-node sends its contact header to the corresponding pair. What happens then is largely left to the implementation. Let me assume that you have two nodes, 1 and 2, with IBR-DTN on 1 and ION on 2. When the TCP connection is started by ION, we have a failure because IBR-DTN advertises itself back as ipn:1 instead of ipn:1.0. In other words, ION performs a check on the EID of the corresponding node, and this check fails because of the lack of
the last part of the EID (".0").
Right. When ION initiates the
connection, it does so under the guidance of the "egress plans" that identify its neighbors. Each egress plan associates a node ID with a convergence-layer endpoint ID, e.g., a socket name; since node IDs are formed as DTN endpoint IDs, the ION node's egress plan for the IBR-DTN node associated the EID "ipn:1.0" with that node's socket name. When the answering contact header says that the neighboring node identifies itself as "ipn:1" instead, ION detects that the node it has connected to is not the one it was trying to connect to, so for safety it drops the connection.
If the connection is started from IBR-DTN it succeeds, maybe because ION does not perform a similar check in input, but I am not sure.
Yes. In this case, ION has no idea who
the connecting node is, so the EID in the IBR-DTN node's contact header can't be validated against anything; it is simply accepted.
The details of my test (Test3) are below. I have noticed that in other logs IBR-DTN makes use of a "shothened" ipn EID to identify a node, as below: Sat Apr 23 20:52:51 2016 NOTICE ConnectionEvent: connection up ipn:2
Sat Apr 23 20:52:51 2016 NOTICE NodeEvent: Node ipn:2 available
Sat Apr 23 20:52:51 2016 NOTICE ConnectionEvent: connection down ipn:2
From the man of ipnadmin (see below) it seems that an ipn EID always includes a service number, and in practice that "0" is used as default.
Actually the service number is simply
mandatory; the registered definition for the "ipn" URI scheme requires it. The definition also reserves service number 0 for "administration" or something like that, as I recall.
If this is correct, I suppose that IBR-DTN should always use ipn:1.0 instead of ipn:1. However, I could also be wrong.
Nope, you are correct.
I have also successfully performed an analogue test (Test 4) with the dtn scheme. In this case the EID given back by IBR-DTN is dtn://vm1.dtn, which is the same EID expected by ION; note that in ION configuration, in the line a plan //vm1.dtn x tcp/10.0.1.1 "//vm1.dtn" is the name of the node, equivalent to "1" in ipn. In brief, in the dtn scheme it seems not necessary to include a demux token as in ipn. As ipn and dtn syntaxes are often challenging also to people that are familiar with DTN, I send this mail in cc also to Scott Burleigh, which is the ION and ipn scheme designer in order to have confirmation of the ipn syntax. Yours, Carlo
Test 3) Failed. The TCP CL of IBR DTN gives ipn:1 where ipn:1.0 is expected by ION (syn from ION) From vm1 ibrdtn.conf
# the local eid of the dtn node # default is the hostname local_uri = ipn:1.0
From vm2 ION configuration file #Outduct to Vm1 a outduct tcp 10.0.1.1 '' a plan 1 x tcp/10.0.1.1
From vm2 logs [2016/04/23-19:01:10] [i] Connected to TCP socket: 10.0.1.1:4556 [2016/04/23-19:01:10] [?] expected tcpcl EID: ipn:1.0 [2016/04/23-19:01:10] [?] received tcpcl EID: ipn:1 [2016/04/23-19:01:10] [i] tcpcli got no valid contact header: ipn:1.0
Test 4) Passed The TCP CL of IBR DTN gives dtn://vm1 as expected by ION (syn from ION) From vm1 ibrdtn.conf # the local eid of the dtn node # default is the hostname local_uri = dtn://vm1.dtn
From vm2 ION configuration #Outduct to Vm1 a outduct tcp 10.0.1.1 '' a plan //vm1.dtn x tcp/10.0.1.1
From the man of ipnadmin (ION) ipnadmin configures the local ION node's routing of bundles to endpoints whose IDs conform to the ipn endpoint ID scheme. ipn is a CBHE-conformant scheme; that is, every endpoint ID in the ipn scheme is a string of the form "ipn:node_number.service_number" where node_number is a
CBHE
"node number" and service_number identifies a specific application processing point.
5x1000 AI GIOVANI RICERCATORI DELL'UNIVERSITÃfEUR DI BOLOGNA Codice Fiscale: 80007010376
5x1000 AI GIOVANI RICERCATORI DELL'UNIVERSITÃEUR DI BOLOGNA Codice Fiscale: 80007010376 -- !! This message is brought to you via the `ibr-dtn' mailing list. !! Please do not reply to this message to unsubscribe. To unsubscribe or adjust !! your settings, send a mail message to <ibr-dtn-request@ibr.cs.tu- bs.de> !! or look at https://mail.ibr.cs.tu-bs.de/listinfo/ibr-dtn.
5x1000 AI GIOVANI RICERCATORI DELL'UNIVERSITÀ DI BOLOGNA Codice Fiscale: 80007010376
Dear Johannes, As you know we are developing a version of DTNperf_3 compatible also with IBR-DTN. As DTNperf_3 is based on the Abstraction Layer (AL), a collection of APIs that abstract BP implementation APIs (until now ION and DTN2), we had to extend to IBR-DTN the AL APIs. In doing that we did not manage to obtain from the IBR-APIs 2 items of information that are used by the DTNperf application: 1) the local EID 2) the timestamp (in s) and the sequence number as they appear in the bundle sent.
I have checked on RFCs 4838, 5050 and even on the draft of 5050bis, and they do not specify that local EID, timestamp and sequence number must be available to the application. I was a bit surprised, but I suppose that this is correct, as this, strictly speaking, is not part of the BP protocol, but of the interface between BP and the upper layer. However, after reading the RFCs it seems to me that some status reports, such as delivered, can be exploited by the source application (as a return receipt), although other uses are possible (especially in tests). To interpret a SR (e.g. a delivered, or deleted), an application must identifies with absolute certainty the bundle to which the SR refers among those it has sent. I.e. it should know both timestamp i(in s) and sequence number as inserted in the bundle sent (as for registered mail).
If it is already possible to know 1 & 2, and we just did not manage to find how, I would ask you to provide us with the instructions. Otherwise, I would kindly ask you to consider the possibility to pass these information items to the application, by enhancing some APIs or by introducing new ones. At present we should have bypassed both the problems, so it is not urgent.
Last (please be patient with me...) I have found a bit annoying the fact that the IBR-DTN daemon (dtnd) and a few tools (dtnping, dtnsend, dtnrecive) have the same name of their DTN2 equivalent. This is a very trivial problem, but it may create some confusion when you have both DTN2 and IBR-DTN installed on the same nodes. IBR-DTN and DTN2 equivalent are luckily installed in different directories, but both in the default path as obvious. If you launch the "dtnd" as a daemon, you can get confused about what version is actually on (you have to check the log). What about adding as a default a prefix "ibr", in such a way to have ibrdtnd etc. thus avoiding any ambiguity by root?
Let me congratulate you on the excellent work done with IBR-DTN.
Yours, Carlo
If you like to know why we need 1&2, the rationale is below. 1) DTNperf_3 client at the end of a session sends a "Bundle Stop" to the DTNperf external monitor running on the reply to: node. The EID of this node is passed as a parameter of the "esxternal monitor" option (e.g. -m dtn://vm3.dtn) . If the external monitor option is not set, an instance of the DTNperf monitor is launched on the source node as a thread of the client. Although a direct comunication between the client and its monitor thread is possible, for the sake of commonality we still exploits the "bundle stop" mechanism. In this case the reply to: address is not passed as is the same as the source EID. The problem is that we did not manage to obtain the EID of the local node in IBR-DTN. Note that it could be either dtn or ipn as in IBR-DTN configuration files both the options are available in an alternative way. We have by-passed the problem with a trick, but it would be preferable to have the EID passed by an API. Maybe this is already possible, but we did not manage to find it. 2) The client, when used in the window mode sends a given number of bundles (e.g. 3 if -W3) to the server and than wait for DTNperf ACKs, sent back by the server. Each ACK must confirm the reception of a bundle, and at his reception a new bundle is sent as usual with sliding windows (by contrast to TCP, the DTNperf window has however a fixed lenght). To identifies with certainty a bundle, we use the identification mechanism of BP, i.e. we rely on the triple (source EID, timestamp in s, sequence number). These values are read by the server on the arriving bundle and reported on the ACK. Here the problem is that on the client, for cross-checkink ACKs with identifiers of bundle in fly, we need at the application layer to know the identifiers (timestamp and sequence number are enough) put in the bundle sent. At present these two values are given when a bundle is created, but the values are then correctly changed when passed to the BP. The problem is that we did not manage to know the updated values. We have bypassed introducing a tolerance in the cross-check test, for IBR-DTN, but is a solution that is far from being elegant, although effective.
5x1000 AI GIOVANI RICERCATORI DELL'UNIVERSITÀ DI BOLOGNA Codice Fiscale: 80007010376
participants (2)
-
Carlo Caini
-
Johannes Morgenroth