Re: [ibr-dtn] dtnstream: Lost Bundles
Hello, again!
I'm sorry for the delay in the answer. First, I want to thank you for the attention and the advice, it was very helpful! .....But I still have some issues with this situation, so I'm here to ask some more questions. --'
In fact, dtnrecv does work even when some bundles are lost but, in my case the order should be kept, i.e., I want to proceed with the next seq. nr. available even when some bundles are lost. I tried to use the parameter “-t” of dtnstream, but my dtnstream receiver keeps waiting forever, and the video is never displayed again, although the bundles are supposedly delivered (I've realized that accessing the API of the daemon via telnet and using the option: protocol management->stats bundles).
Can this be a bug, or am I missing something?
Thanks (a lot) in advance! João P. T. Loureiro
Dr. Johannes Morgenroth johannes@morgenroth.me escreveu no dia quarta, 23/12/2020 à(s) 09:21:
Hello João.
Your observation is correct. The tool dtnstream is designed to split-up a continuous stream into chunks and bring it into the right order at the receiver. As long as your DTN assures delivery without lost bundles, this should work. In case you are not interested in the right order, you can simply use dtnstream as sender and dtnrecv as receiver. The additional data for the streaming and reordering is stored in an extension block of the bundle and not within the payload. So it is possible to just receive the payload of the stream by calling dtnrecv.
If you just looking for a timeout mechanism to skip lost bundles after a timeout, you can just set the parameter “-t” of dtnstream.
To modify the behavior, you need to adapt the class BundleStreamBuf [1] within the tools package. The method __underflow(), checks if the next sequence number is available and blocks until this is available or a predefined timeout is reached [2].
Kind regards,
Johannes
[1] https://github.com/ibrdtn/ibrdtn/blob/master/ibrdtn/tools/src/streaming/Bund...
[2] https://github.com/ibrdtn/ibrdtn/blob/master/ibrdtn/tools/src/streaming/Bund...
*Von:* Ibr-dtn ibr-dtn-bounces@ibr.cs.tu-bs.de *Im Auftrag von *João Pedro Loureiro via Ibr-dtn *Gesendet:* Freitag, 18. Dezember 2020 13:53 *An:* ibr-dtn@ibr.cs.tu-bs.de *Betreff:* [ibr-dtn] dtnstream: Lost Bundles
Hello!
My name is João Loureiro and I'm a MSc student at University of Porto (Portugal) & INESC-TEC (a research institute).
In my master thesis, I'm performing some tests using the IBR-DTN tool "dtnstream" and 3 nodes, where the first node (sender) only reaches the third (final destination) through the "middle" node.
The problem I'm facing is the following: I want the destination (where the video/audio stream is being reproduced and piped into VLC player) to ignore lost bundles/chunks, i.e., If I receive at this node, for example, the chunks with the seq. nrs. 0,1 and 3, I want to have a continuous video streaming, ignoring the packet with seq. nr. 2, and passing from 1 to 3 instantaneously or with a specified timeout.
I've read the documentation and this paper: https://doi.org/10.1145/2030652.2030673, but, in my understanding, and following the dozens of tests I've already performed, currently dtnstream keeps waiting for the right sequence number instead of keep going with the last received one. I just wanted to confirm that is truly what is happening and, if it is, if there's some simple tips for modifying the code in order to obtain this behavior (I have already tried several modifications but with no success...).
Thanks a lot for your help, in advance!
João P. T. Loureiro
Hello, everyone!
Thankfully, I solved the problem! In fact, this was a bug in the method* received *[1], I will report it on GitHub and present/explain the solution.
Once again, thanks a lot for your help, Dr. Johannes! João Pedro Loureiro
[1] https://github.com/ibrdtn/ibrdtn/blob/2215ff7e3a43268f464eaf5f94d30890b597b1...
João Pedro Loureiro joao.p.loureiro@inesctec.pt escreveu no dia domingo, 17/01/2021 à(s) 23:33:
Hello, again!
I'm sorry for the delay in the answer. First, I want to thank you for the attention and the advice, it was very helpful! .....But I still have some issues with this situation, so I'm here to ask some more questions. --'
In fact, dtnrecv does work even when some bundles are lost but, in my case the order should be kept, i.e., I want to proceed with the next seq. nr. available even when some bundles are lost. I tried to use the parameter “-t” of dtnstream, but my dtnstream receiver keeps waiting forever, and the video is never displayed again, although the bundles are supposedly delivered (I've realized that accessing the API of the daemon via telnet and using the option: protocol management->stats bundles).
Can this be a bug, or am I missing something?
Thanks (a lot) in advance! João P. T. Loureiro
Dr. Johannes Morgenroth johannes@morgenroth.me escreveu no dia quarta, 23/12/2020 à(s) 09:21:
Hello João.
Your observation is correct. The tool dtnstream is designed to split-up a continuous stream into chunks and bring it into the right order at the receiver. As long as your DTN assures delivery without lost bundles, this should work. In case you are not interested in the right order, you can simply use dtnstream as sender and dtnrecv as receiver. The additional data for the streaming and reordering is stored in an extension block of the bundle and not within the payload. So it is possible to just receive the payload of the stream by calling dtnrecv.
If you just looking for a timeout mechanism to skip lost bundles after a timeout, you can just set the parameter “-t” of dtnstream.
To modify the behavior, you need to adapt the class BundleStreamBuf [1] within the tools package. The method __underflow(), checks if the next sequence number is available and blocks until this is available or a predefined timeout is reached [2].
Kind regards,
Johannes
[1] https://github.com/ibrdtn/ibrdtn/blob/master/ibrdtn/tools/src/streaming/Bund...
[2] https://github.com/ibrdtn/ibrdtn/blob/master/ibrdtn/tools/src/streaming/Bund...
*Von:* Ibr-dtn ibr-dtn-bounces@ibr.cs.tu-bs.de *Im Auftrag von *João Pedro Loureiro via Ibr-dtn *Gesendet:* Freitag, 18. Dezember 2020 13:53 *An:* ibr-dtn@ibr.cs.tu-bs.de *Betreff:* [ibr-dtn] dtnstream: Lost Bundles
Hello!
My name is João Loureiro and I'm a MSc student at University of Porto (Portugal) & INESC-TEC (a research institute).
In my master thesis, I'm performing some tests using the IBR-DTN tool "dtnstream" and 3 nodes, where the first node (sender) only reaches the third (final destination) through the "middle" node.
The problem I'm facing is the following: I want the destination (where the video/audio stream is being reproduced and piped into VLC player) to ignore lost bundles/chunks, i.e., If I receive at this node, for example, the chunks with the seq. nrs. 0,1 and 3, I want to have a continuous video streaming, ignoring the packet with seq. nr. 2, and passing from 1 to 3 instantaneously or with a specified timeout.
I've read the documentation and this paper: https://doi.org/10.1145/2030652.2030673, but, in my understanding, and following the dozens of tests I've already performed, currently dtnstream keeps waiting for the right sequence number instead of keep going with the last received one. I just wanted to confirm that is truly what is happening and, if it is, if there's some simple tips for modifying the code in order to obtain this behavior (I have already tried several modifications but with no success...).
Thanks a lot for your help, in advance!
João P. T. Loureiro
participants (1)
-
João Pedro Loureiro