Commit e80ae902 authored by Andreas Schmidt's avatar Andreas Schmidt
Browse files

Adding congestion control and ARQ.

parent 5b3dc3ec
Loading
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -38,6 +38,17 @@ build:container:
        - docker push $CI_REGISTRY_IMAGE:$DOCKER_TAG
        - docker rmi $CI_REGISTRY_IMAGE:$DOCKER_TAG

build:container_tcp:
    stage: build
    tags:
        - docker
    script:
        - export DOCKER_TAG=$(echo "$CI_BUILD_REF_NAME""_tcp" | sed 's#/#_#' | sed 's#^master$#latest#')
        - docker build -t $CI_REGISTRY_IMAGE:$DOCKER_TAG --build-arg http_proxy=http://www-proxy.uni-saarland.de:3128 -f docker/Dockerfile_tcp .
        - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY
        - docker push $CI_REGISTRY_IMAGE:$DOCKER_TAG
        - docker rmi $CI_REGISTRY_IMAGE:$DOCKER_TAG

test:prrt_mem:
  stage: test
  dependencies:
+17 −14
Original line number Diff line number Diff line
@@ -5,6 +5,7 @@
## Features

* Hybrid error control (FEC + ARQ) using systematic Vandermonde codes
* Congestion control using a variant of [BBR](https://groups.google.com/forum/#!forum/bbr-dev)
* Clock synchronization between sending stack and receiving stack
* Applications can specify packet-level expiration times
* Different receive modes for ASAP and time-synchronized operation
@@ -29,9 +30,9 @@ port = int(sys.argv[1])
s = prrt.PrrtSocket(port=port)

while True:
    d = s.recv()
    d = s.recv().decode("utf8")
    if d != "Close":
        print d
        print(d)
    else:
        break
```
@@ -44,25 +45,27 @@ import prrt

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

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


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

Start the receiver by:

```bash
python receiver.py 5000
python3 receiver.py 5000
```

In a separate terminal, run:

```bash
python sender.py 127.0.0.1 5000
python3 sender.py 127.0.0.1 5000 6000
```

This should generate the following output in the receiver console:
+10 −3
Original line number Diff line number Diff line
@@ -89,9 +89,16 @@ local ex_type = Field.new("prrt.type")
local function getType() return ex_type()() end
local function getTypeName() return prrtPacketTypeNames[getType()] end

local ex_index = Field.new("prrt.index")
local function getIndex() return ex_index()() end

local ex_data_length = Field.new("prrt.data.length")
local function getDataLength() return ex_data_length()() end

local ex_red_baseseqno = Field.new("prrt.redundancy.baseSequenceNumber")
local function getRedBaseSeqNo() return ex_red_baseseqno()() end


local ex_red_n = Field.new("prrt.redundancy.n")
local function getRedN() return ex_red_n()() end

@@ -109,7 +116,7 @@ local function dissect_data(buffer, pinfo, root)
    tree:add(pf_data_groupRTprop, buffer:range(8,4))
    tree:add(pf_data_packettimeout, buffer:range(12,4))

    local label = "DATA Len=" .. getDataLength()
    local label = "[D] Idx=" .. getIndex() .. " Len=" .. getDataLength()
    tree:set_text(label)
    pinfo.cols.info:set(label)
end
@@ -121,7 +128,7 @@ local function dissect_redundancy(buffer, pinfo, root)
    tree:add(pf_red_n, buffer:range(6,1))
    tree:add(pf_red_k, buffer:range(7,1))

    local label = "REDUNDANCY n=" .. getRedN() .. " k=" .. getRedK()
    local label = "[R] Idx=" .. getIndex() .. " b=" .. getRedBaseSeqNo() .. " n=" .. getRedN() .. " k=" .. getRedK()
    tree:set_text(label)
    pinfo.cols.info:set(label)
end
@@ -139,7 +146,7 @@ local function dissect_feedback(buffer, pinfo, root)
    tree:add(pf_fb_acktype, buffer:range(20,1))
    tree:add(pf_fb_ackSeqN, buffer:range(21, 2))

    local label = "FEEDBACK"
    local label = "[F]"
    tree:set_text(label)
    pinfo.cols.info:set(label)
end
+8 −5
Original line number Diff line number Diff line
@@ -2,9 +2,13 @@ FROM gcc:5

MAINTAINER Andreas Schmidt <schmidt@nt.uni-saarland.de>

RUN apt-get update \
    && apt-get upgrade -y \
    && apt-get install -y cmake
ENV DEBIAN_FRONTEND noninteractive

RUN apt-get update && apt-get install --yes --force-yes \
    bc \
    cmake \
    traceroute \
    tshark

COPY CMakeLists.txt /prrt/
COPY prrt /prrt/prrt
@@ -15,8 +19,7 @@ WORKDIR /prrt

RUN cmake . \
    && make
ENV PATH /prrt/bin:$PATH
WORKDIR /prrt/bin
ENV PATH /prrt:$PATH

VOLUME /output

docker/Dockerfile_tcp

0 → 100644
+26 −0
Original line number Diff line number Diff line
FROM gcc:5

MAINTAINER Andreas Schmidt <schmidt@nt.uni-saarland.de>

ENV DEBIAN_FRONTEND noninteractive

RUN apt-get update && apt-get install --yes --force-yes \
    bc \
    cmake \
    traceroute \
    tshark

COPY CMakeLists.txt /prrt/
COPY prrt /prrt/prrt
COPY tests /prrt/tests
COPY docker/entrypoint.sh /

WORKDIR /prrt

RUN cmake -DTCP=1 . \
    && make
ENV PATH /prrt:$PATH

VOLUME /output

ENTRYPOINT ["/entrypoint.sh"]
Loading