README.md 2.63 KB
Newer Older
1
# Predictably Reliable Real-Time (PRRT) [![pipeline status](https://git.nt.uni-saarland.de/LARN/PRRT/badges/master/pipeline.svg)](https://git.nt.uni-saarland.de/LARN/PRRT/commits/master)
2

3
**PRRT** is a transport protocol that aims to provide predictable reliability and latency. [http://larn.systems]()
4

5
## Features
6

7
* Hybrid error control (FEC + ARQ) using systematic Vandermonde codes
8
* Congestion control and pacing using a variant of [BBR](https://groups.google.com/forum/#!forum/bbr-dev)
9 10 11
* Clock synchronization between sending stack and receiving stack
* Applications can specify packet-level expiration times
* Different receive modes for ASAP and time-synchronized operation
12
* Passive measurement of propagation delay, bottleneck data rate and packet loss rate
13
* Packet-level timing analysis using [X-Lap](http://xlap.larn.systems)
14
* Wireshark dissector written in Lua
15
* [Hardware timestamping support](https://git.nt.uni-saarland.de/LARN/PRRT/wikis/hardware-timestamping)
16

17
## Installation
18

19 20 21 22 23 24 25 26 27 28 29
*See [Installing PRRT](https://git.nt.uni-saarland.de/LARN/PRRT/wikis/installation#python) for instructions on how to install it on your system for using it with C/C++ or Python.*

#### *Try PRRT on your system*

A [minimal receiver](examples/receiver.py), which takes the bind port as an argument, is created as follows:

```python
import sys
import prrt

port = int(sys.argv[1])
30

Andreas Schmidt's avatar
Andreas Schmidt committed
31
s = prrt.PrrtSocket(port=port)
32

33
while True:
34
    d = s.recv().decode("utf8")
35
    if d != "Close":
36
        print(d)
37 38
    else:
        break
39 40
```

41 42 43 44 45 46 47 48
A [minimal sender](sender.py) is created as follows:

```python
import sys
import prrt

host = sys.argv[1]
port = int(sys.argv[2])
49
localport = int(sys.argv[3])
50

51
s = prrt.PrrtSocket(port=localport)
52 53
s.connect(host, port)

54

55
for i in range(10):
56 57
    s.send("Packet {}".format(i).encode("utf8"))
s.send("Close".encode("utf8"))
58 59 60
```

Start the receiver by:
61 62

```bash
63
python3 receiver.py 5000
64 65
```

66
In a separate terminal, run:
67 68

```bash
69
python3 sender.py 127.0.0.1 5000 6000
70 71
```

72
This should generate the following output in the receiver console:
73

74 75 76 77 78 79
```terminal
Packet 0
Packet 1
...
Packet 9
```
80

81
## For more information
82

83 84
* [PRRT Wiki](https://git.nt.uni-saarland.de/LARN/PRRT/wikis)
* [LARN Project Website](http://larn.systems)
85

Andreas Schmidt's avatar
Andreas Schmidt committed
86 87 88 89 90
## Citing Us

If you find PRRT useful and incorporate it in your works, we are very happy to hear about it. Please also consider to cite us like this:

```bibtex
Andreas Schmidt's avatar
Andreas Schmidt committed
91 92
@misc{sic2019prrt,
      author = {Telecommunications Lab at Saarland Informatics Campus},
93 94 95
      title = {PRRT: Predictably Reliable Real-time Transport},
      howpublished={Web page},
      url = {http://prrt.larn.systems},
Andreas Schmidt's avatar
Andreas Schmidt committed
96
      year = {2019}
97
}
Andreas Schmidt's avatar
Andreas Schmidt committed
98 99
```

100 101 102
## License

[MIT Licence](LICENSE)