README.md 2.38 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 9 10
* Clock synchronization between sending stack and receiving stack
* Applications can specify packet-level expiration times
* Different receive modes for ASAP and time-synchronized operation
Andreas Schmidt's avatar
Andreas Schmidt committed
11
* Passive measurement of propagation delay, bottleneck data rate and packet loss rate
12 13
* Packet-level timing analysis using [X-Lap](http://xlap.larn.systems)
* [Hardware timestamping support](https://git.nt.uni-saarland.de/LARN/PRRT/wikis/hardware-timestamping)
14

15
## Installation
16

17 18 19 20 21 22 23 24 25 26 27
*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])
28

Andreas Schmidt's avatar
Andreas Schmidt committed
29
s = prrt.PrrtSocket(port=port)
30

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

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

```python
import sys
import prrt

host = sys.argv[1]
port = int(sys.argv[2])

Andreas Schmidt's avatar
Andreas Schmidt committed
48
s = prrt.PrrtSocket(port=port)
49 50 51 52 53 54 55 56
s.connect(host, port)

for i in range(10):
    s.send("Packet {}".format(i))
s.send("Close")
```

Start the receiver by:
57 58

```bash
59
python receiver.py 5000
60 61
```

62
In a separate terminal, run:
63 64

```bash
65
python sender.py 127.0.0.1 5000
66 67
```

68
This should generate the following output in the receiver console:
69

70 71 72 73 74 75
```terminal
Packet 0
Packet 1
...
Packet 9
```
76

77
## For more information
78

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

Andreas Schmidt's avatar
Andreas Schmidt committed
82 83 84 85 86 87 88 89 90 91 92 93 94 95
## 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
@misc{sic2018prrt, 
      author = {Schmidt, Andreas}, 
      title = {PRRT: Predictably Reliable Real-time Transport}, 
      howpublished={Web page}, 
      url = {http://prrt.larn.systems}, 
      year = {2018} 
} 
```

96 97 98
## License

[MIT Licence](LICENSE)