Commit 770f62df authored by Andreas Schmidt's avatar Andreas Schmidt
Browse files

Extract xlap timestamping into separate module.

parent 9ad12fa7
Loading
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
variables:
  PYPI_USER: SECURE
  PYPI_PASSWORD: SECURE
  GIT_SUBMODULE_STRATEGY: recursive

stages:
  - build

.gitmodules

0 → 100644
+3 −0
Original line number Diff line number Diff line
[submodule "prrt/xlap"]
	path = prrt/xlap
	url = ../../as/X-Lap.git
+4 −4
Original line number Diff line number Diff line
@@ -121,16 +121,16 @@ cdef extern from "proto/socket.h":
    bint PrrtSocket_set_sock_opt(PrrtSocket *sock_ptr, const_char *name, const uint32_t value)
    uint32_t PrrtSocket_get_sock_opt(PrrtSocket *sock_ptr, const_char *name)

cdef extern from "proto/timestamp.h":
    ctypedef struct PrrtTimestampTable:
cdef extern from "xlap/xlap.h":
    ctypedef struct XlapTimestampTable:
        pass

    cdef enum PrrtTimestampPacketKind:
    cdef enum XlapTimestampPacketKind:
        ts_data_packet = 0,
        ts_any_packet = 0,
        ts_redundancy_packet = 1

    void PrrtTimestampTableInstall(PrrtSocket* sck, PrrtTimestampPacketKind kind, PrrtTimestampTable* tstp);
    void XlapTimestampTableInstall(PrrtSocket* sck, XlapTimestampPacketKind kind, XlapTimestampTable* tstp);

cdef extern from "util/bptree.h":
    ctypedef struct BPTreeNode:
+1 −1
Original line number Diff line number Diff line
@@ -6,7 +6,7 @@ add_library(PRRT ../defines.h
        packet.c packet.h
        receiver.c receiver.h
        socket.c socket.h
        timestamp.c timestamp.h
        ../xlap/xlap.c ../xlap/xlap.h
        applicationConstraints.c applicationConstraints.h
        vdmcode/block_code.c vdmcode/block_code.h
        stores/forwardPacketTable.c stores/forwardPacketTable.h
+23 −23
Original line number Diff line number Diff line
@@ -111,9 +111,9 @@ static void handle_data_packet(PrrtSocket *sock_ptr, PrrtPacket *packet, struct

	prrtSequenceNumber_t seqno = packet->sequenceNumber;

	PrrtTimeStampCycle(sock_ptr, ts_data_packet, seqno, SendFeedbackStart);
	XlapTimeStampCycle(sock_ptr, ts_data_packet, seqno, SendFeedbackStart);
    check(send_feedback(sock_ptr, remote), "Sending feedback failed.");
	PrrtTimeStampCycle(sock_ptr, ts_data_packet, seqno, SendFeedbackEnd);
	XlapTimeStampCycle(sock_ptr, ts_data_packet, seqno, SendFeedbackEnd);

    prrtTimestamp_t now = PrrtClock_get_prrt_time_us(&sock_ptr->clock);
    if(is_timeout(now, payload->packetTimeout_us)) {
@@ -144,7 +144,7 @@ static void handle_data_packet(PrrtSocket *sock_ptr, PrrtPacket *packet, struct
        // forward to application layer
		debug(DEBUG_DATARECEIVER, "forward %u", seqno);

		PrrtTimeStampCycle(sock_ptr, ts_data_packet, seqno, PrrtReturnPackage);
		XlapTimeStampCycle(sock_ptr, ts_data_packet, seqno, PrrtReturnPackage);
        check(pthread_mutex_lock(&sock_ptr->inQueueFilledMutex) == 0, "Lock failed.");
        List_push(sock_ptr->inQueue, packet);
        check(pthread_cond_signal(&sock_ptr->inQueueFilledCv) == 0, "Cond signal failed.");
@@ -198,46 +198,46 @@ void *receive_data_loop(void *ptr)
    PrrtSocket *sock_ptr = ptr;

    while(1) {
		PrrtTimestampPlaceholder tsph1;
		PrrtTimestampPlaceholder tsph2;
		PrrtTimestampPlaceholder tsph3;
		PrrtTimestampPlaceholderInitialize(&tsph1);
		PrrtTimestampPlaceholderInitialize(&tsph2);
		PrrtTimestampPlaceholderInitialize(&tsph3);
		XlapTimestampPlaceholder tsph1;
		XlapTimestampPlaceholder tsph2;
		XlapTimestampPlaceholder tsph3;
		XlapTimestampPlaceholderInitialize(&tsph1);
		XlapTimestampPlaceholderInitialize(&tsph2);
		XlapTimestampPlaceholderInitialize(&tsph3);

        memset(buffer, 0, MAX_PAYLOAD_LENGTH);
        n = recvfrom(sock_ptr->dataSocketFd, buffer, MAX_PAYLOAD_LENGTH, 0, (struct sockaddr *) &remote, &addrlen);
        sock_ptr->lastReceivedTimestamp = PrrtClock_get_current_time_us();
		PrrtTimeStampClock(&tsph1, ts_any_packet, 0, LinkReceive);
		PrrtTimeStampCycle(&tsph1, ts_any_packet, 0, LinkReceive);
		XlapTimeStampClock(&tsph1, ts_any_packet, 0, LinkReceive);
		XlapTimeStampCycle(&tsph1, ts_any_packet, 0, LinkReceive);

        PrrtPacket *packet = (PrrtPacket *) calloc(1, sizeof(PrrtPacket));
        check_mem(packet);

		PrrtTimeStampCycle(&tsph2, ts_any_packet, 0, DecodeStart);
		XlapTimeStampCycle(&tsph2, ts_any_packet, 0, DecodeStart);
        check(PrrtPacket_decode(buffer, (uint16_t) n, packet), "Decode failed.");
		PrrtTimeStampCycle(&tsph3, ts_any_packet, 0, DecodeEnd);
		XlapTimeStampCycle(&tsph3, ts_any_packet, 0, DecodeEnd);

		prrtSequenceNumber_t seqno = packet->sequenceNumber;

        prrtPacketType_t packetType = PrrtPacket_type(packet);
		debug(DEBUG_DATARECEIVER, "received packet %d:%u", (int) packetType, seqno);
        if(packetType == PACKET_TYPE_DATA) {
			PrrtTimestampPlaceholderUse(sock_ptr, ts_data_packet, seqno, &tsph1);
			PrrtTimestampPlaceholderUse(sock_ptr, ts_data_packet, seqno, &tsph2);
			PrrtTimestampPlaceholderUse(sock_ptr, ts_data_packet, seqno, &tsph3);
			XlapTimestampPlaceholderUse(sock_ptr, ts_data_packet, seqno, &tsph1);
			XlapTimestampPlaceholderUse(sock_ptr, ts_data_packet, seqno, &tsph2);
			XlapTimestampPlaceholderUse(sock_ptr, ts_data_packet, seqno, &tsph3);

			PrrtTimeStampCycle(sock_ptr, ts_data_packet, seqno, HandlePacketStart);
			XlapTimeStampCycle(sock_ptr, ts_data_packet, seqno, HandlePacketStart);
            handle_data_packet(sock_ptr, packet, remote);
			PrrtTimeStampCycle(sock_ptr, ts_data_packet, seqno, HandlePacketEnd);
			XlapTimeStampCycle(sock_ptr, ts_data_packet, seqno, HandlePacketEnd);
        } else if(packetType == PACKET_TYPE_REDUNDANCY) {
			PrrtTimestampPlaceholderUse(sock_ptr, ts_redundancy_packet, seqno, &tsph1);
			PrrtTimestampPlaceholderUse(sock_ptr, ts_redundancy_packet, seqno, &tsph2);
			PrrtTimestampPlaceholderUse(sock_ptr, ts_redundancy_packet, seqno, &tsph3);
			XlapTimestampPlaceholderUse(sock_ptr, ts_redundancy_packet, seqno, &tsph1);
			XlapTimestampPlaceholderUse(sock_ptr, ts_redundancy_packet, seqno, &tsph2);
			XlapTimestampPlaceholderUse(sock_ptr, ts_redundancy_packet, seqno, &tsph3);

			PrrtTimeStampCycle(sock_ptr, ts_redundancy_packet, seqno, HandlePacketStart);
			XlapTimeStampCycle(sock_ptr, ts_redundancy_packet, seqno, HandlePacketStart);
            handle_redundancy_packet(sock_ptr, packet);
			PrrtTimeStampCycle(sock_ptr, ts_redundancy_packet, seqno, HandlePacketEnd);
			XlapTimeStampCycle(sock_ptr, ts_redundancy_packet, seqno, HandlePacketEnd);
        } else {
            PrrtPacket_print(packet);
            PrrtPacket_destroy(packet);
Loading