Loading prrt/proto/CMakeLists.txt +1 −1 Original line number Diff line number Diff line Loading @@ -9,7 +9,7 @@ add_library(PRRT ../defines.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 stores/deliveredPacketTable.c stores/deliveredPacketTable.h stores/lossGatherer.c stores/lossGatherer.h processes/dataReceiver.c processes/dataReceiver.h processes/feedbackReceiver.c processes/feedbackReceiver.h Loading prrt/proto/processes/dataReceiver.c +7 −7 Original line number Diff line number Diff line Loading @@ -34,7 +34,7 @@ static void decode_block(PrrtSocket *sock_ptr, PrrtBlock *block) { while (List_count(block->dataPackets) > 0) { PrrtPacket *pkt = List_shift(block->dataPackets); if (PrrtForwardPacketTable_test_set_is_number_relevant(sock_ptr->forwardPacketTable, pkt->sequenceNumber)) { if (PrrtDeliveredPacketTable_test_set_is_number_relevant(sock_ptr->deliveredPacketTable, pkt->sequenceNumber)) { PrrtReceiveDataQueue_insert(sock_ptr->receiveDataQueue, pkt); } else { PrrtPacket_destroy(pkt); Loading Loading @@ -111,12 +111,12 @@ static void handle_data_packet(PrrtSocket *sock_ptr, PrrtPacket *packet, struct prrtTimestamp_t now = PrrtClock_get_prrt_time_us(&sock_ptr->clock); if (is_timeout(now, payload->packetTimeout_us)) { PrrtForwardPacketTable_test_set_is_number_relevant(sock_ptr->forwardPacketTable, packet->sequenceNumber); PrrtDeliveredPacketTable_test_set_is_number_relevant(sock_ptr->deliveredPacketTable, packet->sequenceNumber); // TODO: note this as loss PrrtPacket_destroy(packet); debug(DEBUG_RECEIVER, "timeout data packet %u (%lu > %lu)", seqno, (unsigned long) now, (unsigned long) payload->packetTimeout_us); } else if (PrrtForwardPacketTable_test_set_is_number_relevant(sock_ptr->forwardPacketTable, } else if (PrrtDeliveredPacketTable_test_set_is_number_relevant(sock_ptr->deliveredPacketTable, packet->sequenceNumber) == false) { PrrtPacket_destroy(packet); Loading Loading @@ -153,7 +153,7 @@ static void handle_data_packet(PrrtSocket *sock_ptr, PrrtPacket *packet, struct static void handle_redundancy_packet(PrrtSocket *socket, PrrtPacket *packet) { PrrtPacketRedundancyPayload *redundancyPayload = packet->payload; if (!PrrtForwardPacketTable_test_is_block_relevant(socket->forwardPacketTable, if (!PrrtDeliveredPacketTable_test_is_block_relevant(socket->deliveredPacketTable, redundancyPayload->baseSequenceNumber, redundancyPayload->n)) { PrrtPacket_destroy(packet); Loading prrt/proto/socket.c +8 −8 Original line number Diff line number Diff line Loading @@ -16,7 +16,7 @@ #include "processes/dataTransmitter.h" #include "processes/dataReceiver.h" #include "processes/feedbackReceiver.h" #include "stores/forwardPacketTable.h" #include "stores/deliveredPacketTable.h" #include "types/packetTimeout.h" #include "socket.h" Loading Loading @@ -70,7 +70,7 @@ PrrtSocket *PrrtSocket_create(const bool is_sender, prrtTimedelta_t target_delay if (is_sender) { s->sendDataQueue = Pipe_create(); } else { s->forwardPacketTable = PrrtForwardPacketTable_create(); s->deliveredPacketTable = PrrtDeliveredPacketTable_create(); s->repairBlockStore = PrrtRepairBlockStore_create(); s->receiveDataQueue = PrrtReceiveDataQueue_create(); Loading Loading @@ -398,9 +398,9 @@ int PrrtSocket_close(PrrtSocket *s) { s->receiveDataQueue = NULL; } if (s->forwardPacketTable != NULL) { check(PrrtForwardPacketTable_destroy(s->forwardPacketTable), "Destroy failed."); s->forwardPacketTable = NULL; if (s->deliveredPacketTable != NULL) { check(PrrtDeliveredPacketTable_destroy(s->deliveredPacketTable), "Destroy failed."); s->deliveredPacketTable = NULL; } if (s->packetTimeoutTable != NULL) { Loading Loading @@ -496,7 +496,7 @@ bool PrrtSocket_cleanup(PrrtSocket *s) { prrtSequenceNumber_t lastSequenceNumberBase = (prrtSequenceNumber_t) (last->sequenceNumber - last->index - 1); PrrtForwardPacketTable_forward_start(s->forwardPacketTable, lastSequenceNumberBase); PrrtDeliveredPacketTable_forward_start(s->deliveredPacketTable, lastSequenceNumberBase); PrrtRepairBlockStore_expire_block_range(s->repairBlockStore, firstSequenceNumberBase, lastSequenceNumberBase); Loading @@ -523,8 +523,8 @@ bool PrrtSocket_cleanup(PrrtSocket *s) { } List_destroy(expired_packets); } if(s->forwardPacketTable != NULL) { prrtSequenceNumber_t current_start = s->forwardPacketTable->start; if(s->deliveredPacketTable != NULL) { prrtSequenceNumber_t current_start = s->deliveredPacketTable->start; PrrtRepairBlockStore_expire_block_range(s->repairBlockStore, (prrtSequenceNumber_t) (current_start - SEQNO_SPACE/2), (prrtSequenceNumber_t) (current_start - 1)); } Loading prrt/proto/socket.h +2 −2 Original line number Diff line number Diff line Loading @@ -4,13 +4,13 @@ #include <stdatomic.h> #include "../defines.h" #include "packet.h" #include "stores/forwardPacketTable.h" #include "../util/list.h" #include "../util/pipe.h" #include "../util/bptree.h" #include "channelStateInformation.h" #include "applicationConstraints.h" #include "stores/dataPacketStore.h" #include "stores/deliveredPacketTable.h" #include "stores/packetTimeoutTable.h" #include "stores/repairBlockStore.h" #include "stores/receiveDataQueue.h" Loading Loading @@ -45,7 +45,7 @@ typedef struct prrtSocket { PrrtDataPacketStore *dataPacketStore; PrrtRepairBlockStore *repairBlockStore; PrrtForwardPacketTable *forwardPacketTable; PrrtDeliveredPacketTable *deliveredPacketTable; PrrtReceiver* receiver; Loading prrt/proto/stores/forwardPacketTable.c→prrt/proto/stores/deliveredPacketTable.c +18 −18 Original line number Diff line number Diff line Loading @@ -3,10 +3,10 @@ #include "../../util/dbg.h" #include "../../defines.h" #include "../packet.h" #include "forwardPacketTable.h" #include "deliveredPacketTable.h" static bool is_position_relevant(const PrrtForwardPacketTable *fpt_ptr, prrtSequenceNumber_t seqno) static bool is_position_relevant(const PrrtDeliveredPacketTable *fpt_ptr, prrtSequenceNumber_t seqno) { prrtSequenceNumber_t stop = (prrtSequenceNumber_t) (SEQNO_SPACE / 2 + fpt_ptr->start); if(fpt_ptr->start < stop && !(fpt_ptr->start <= seqno && seqno <= stop)) { Loading @@ -18,7 +18,7 @@ static bool is_position_relevant(const PrrtForwardPacketTable *fpt_ptr, prrtSequ } } static void move_start(PrrtForwardPacketTable *fpt_ptr) static void move_start(PrrtDeliveredPacketTable *fpt_ptr) { prrtSequenceNumber_t seqno = fpt_ptr->start; Loading @@ -35,9 +35,9 @@ static void move_start(PrrtForwardPacketTable *fpt_ptr) fpt_ptr->start = seqno; } PrrtForwardPacketTable *PrrtForwardPacketTable_create() PrrtDeliveredPacketTable *PrrtDeliveredPacketTable_create() { PrrtForwardPacketTable *fpt_prt = calloc(1, sizeof(PrrtForwardPacketTable)); PrrtDeliveredPacketTable *fpt_prt = calloc(1, sizeof(PrrtDeliveredPacketTable)); check_mem(fpt_prt); fpt_prt->start = 1; fpt_prt->bitmap = Bitmap_create(true, SEQNO_SPACE); Loading @@ -48,28 +48,28 @@ PrrtForwardPacketTable *PrrtForwardPacketTable_create() return NULL; } bool PrrtForwardPacketTable_destroy(PrrtForwardPacketTable *fpt_prt) bool PrrtDeliveredPacketTable_destroy(PrrtDeliveredPacketTable *t) { Bitmap_destroy(fpt_prt->bitmap); free(fpt_prt); Bitmap_destroy(t->bitmap); free(t); return true; } bool PrrtForwardPacketTable_test_set_is_number_relevant(PrrtForwardPacketTable *fpt_ptr, prrtSequenceNumber_t seqno) bool PrrtDeliveredPacketTable_test_set_is_number_relevant(PrrtDeliveredPacketTable *t, prrtSequenceNumber_t seqno) { bool res = is_position_relevant(fpt_ptr, seqno); bool res = is_position_relevant(t, seqno); if(res) { Bitmap_set(fpt_ptr->bitmap, seqno, false); if(seqno == fpt_ptr->start) { move_start(fpt_ptr); Bitmap_set(t->bitmap, seqno, false); if(seqno == t->start) { move_start(t); } } return res; } bool PrrtForwardPacketTable_test_is_block_relevant(PrrtForwardPacketTable *forwardPacketTable, bool PrrtDeliveredPacketTable_test_is_block_relevant(PrrtDeliveredPacketTable *t, prrtSequenceNumber_t start, prrtSequenceNumber_t length) { Loading @@ -78,13 +78,13 @@ bool PrrtForwardPacketTable_test_is_block_relevant(PrrtForwardPacketTable *forwa int i; for(i = 0; i < length; i++) { res = res || is_position_relevant(forwardPacketTable, (prrtSequenceNumber_t) (start + i)); res = res || is_position_relevant(t, (prrtSequenceNumber_t) (start + i)); } return res; } void PrrtForwardPacketTable_forward_start(PrrtForwardPacketTable *fpt_ptr, prrtSequenceNumber_t new_start) void PrrtDeliveredPacketTable_forward_start(PrrtDeliveredPacketTable *fpt_ptr, prrtSequenceNumber_t new_start) { prrtSequenceNumber_t seqno = fpt_ptr->start; Loading Loading
prrt/proto/CMakeLists.txt +1 −1 Original line number Diff line number Diff line Loading @@ -9,7 +9,7 @@ add_library(PRRT ../defines.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 stores/deliveredPacketTable.c stores/deliveredPacketTable.h stores/lossGatherer.c stores/lossGatherer.h processes/dataReceiver.c processes/dataReceiver.h processes/feedbackReceiver.c processes/feedbackReceiver.h Loading
prrt/proto/processes/dataReceiver.c +7 −7 Original line number Diff line number Diff line Loading @@ -34,7 +34,7 @@ static void decode_block(PrrtSocket *sock_ptr, PrrtBlock *block) { while (List_count(block->dataPackets) > 0) { PrrtPacket *pkt = List_shift(block->dataPackets); if (PrrtForwardPacketTable_test_set_is_number_relevant(sock_ptr->forwardPacketTable, pkt->sequenceNumber)) { if (PrrtDeliveredPacketTable_test_set_is_number_relevant(sock_ptr->deliveredPacketTable, pkt->sequenceNumber)) { PrrtReceiveDataQueue_insert(sock_ptr->receiveDataQueue, pkt); } else { PrrtPacket_destroy(pkt); Loading Loading @@ -111,12 +111,12 @@ static void handle_data_packet(PrrtSocket *sock_ptr, PrrtPacket *packet, struct prrtTimestamp_t now = PrrtClock_get_prrt_time_us(&sock_ptr->clock); if (is_timeout(now, payload->packetTimeout_us)) { PrrtForwardPacketTable_test_set_is_number_relevant(sock_ptr->forwardPacketTable, packet->sequenceNumber); PrrtDeliveredPacketTable_test_set_is_number_relevant(sock_ptr->deliveredPacketTable, packet->sequenceNumber); // TODO: note this as loss PrrtPacket_destroy(packet); debug(DEBUG_RECEIVER, "timeout data packet %u (%lu > %lu)", seqno, (unsigned long) now, (unsigned long) payload->packetTimeout_us); } else if (PrrtForwardPacketTable_test_set_is_number_relevant(sock_ptr->forwardPacketTable, } else if (PrrtDeliveredPacketTable_test_set_is_number_relevant(sock_ptr->deliveredPacketTable, packet->sequenceNumber) == false) { PrrtPacket_destroy(packet); Loading Loading @@ -153,7 +153,7 @@ static void handle_data_packet(PrrtSocket *sock_ptr, PrrtPacket *packet, struct static void handle_redundancy_packet(PrrtSocket *socket, PrrtPacket *packet) { PrrtPacketRedundancyPayload *redundancyPayload = packet->payload; if (!PrrtForwardPacketTable_test_is_block_relevant(socket->forwardPacketTable, if (!PrrtDeliveredPacketTable_test_is_block_relevant(socket->deliveredPacketTable, redundancyPayload->baseSequenceNumber, redundancyPayload->n)) { PrrtPacket_destroy(packet); Loading
prrt/proto/socket.c +8 −8 Original line number Diff line number Diff line Loading @@ -16,7 +16,7 @@ #include "processes/dataTransmitter.h" #include "processes/dataReceiver.h" #include "processes/feedbackReceiver.h" #include "stores/forwardPacketTable.h" #include "stores/deliveredPacketTable.h" #include "types/packetTimeout.h" #include "socket.h" Loading Loading @@ -70,7 +70,7 @@ PrrtSocket *PrrtSocket_create(const bool is_sender, prrtTimedelta_t target_delay if (is_sender) { s->sendDataQueue = Pipe_create(); } else { s->forwardPacketTable = PrrtForwardPacketTable_create(); s->deliveredPacketTable = PrrtDeliveredPacketTable_create(); s->repairBlockStore = PrrtRepairBlockStore_create(); s->receiveDataQueue = PrrtReceiveDataQueue_create(); Loading Loading @@ -398,9 +398,9 @@ int PrrtSocket_close(PrrtSocket *s) { s->receiveDataQueue = NULL; } if (s->forwardPacketTable != NULL) { check(PrrtForwardPacketTable_destroy(s->forwardPacketTable), "Destroy failed."); s->forwardPacketTable = NULL; if (s->deliveredPacketTable != NULL) { check(PrrtDeliveredPacketTable_destroy(s->deliveredPacketTable), "Destroy failed."); s->deliveredPacketTable = NULL; } if (s->packetTimeoutTable != NULL) { Loading Loading @@ -496,7 +496,7 @@ bool PrrtSocket_cleanup(PrrtSocket *s) { prrtSequenceNumber_t lastSequenceNumberBase = (prrtSequenceNumber_t) (last->sequenceNumber - last->index - 1); PrrtForwardPacketTable_forward_start(s->forwardPacketTable, lastSequenceNumberBase); PrrtDeliveredPacketTable_forward_start(s->deliveredPacketTable, lastSequenceNumberBase); PrrtRepairBlockStore_expire_block_range(s->repairBlockStore, firstSequenceNumberBase, lastSequenceNumberBase); Loading @@ -523,8 +523,8 @@ bool PrrtSocket_cleanup(PrrtSocket *s) { } List_destroy(expired_packets); } if(s->forwardPacketTable != NULL) { prrtSequenceNumber_t current_start = s->forwardPacketTable->start; if(s->deliveredPacketTable != NULL) { prrtSequenceNumber_t current_start = s->deliveredPacketTable->start; PrrtRepairBlockStore_expire_block_range(s->repairBlockStore, (prrtSequenceNumber_t) (current_start - SEQNO_SPACE/2), (prrtSequenceNumber_t) (current_start - 1)); } Loading
prrt/proto/socket.h +2 −2 Original line number Diff line number Diff line Loading @@ -4,13 +4,13 @@ #include <stdatomic.h> #include "../defines.h" #include "packet.h" #include "stores/forwardPacketTable.h" #include "../util/list.h" #include "../util/pipe.h" #include "../util/bptree.h" #include "channelStateInformation.h" #include "applicationConstraints.h" #include "stores/dataPacketStore.h" #include "stores/deliveredPacketTable.h" #include "stores/packetTimeoutTable.h" #include "stores/repairBlockStore.h" #include "stores/receiveDataQueue.h" Loading Loading @@ -45,7 +45,7 @@ typedef struct prrtSocket { PrrtDataPacketStore *dataPacketStore; PrrtRepairBlockStore *repairBlockStore; PrrtForwardPacketTable *forwardPacketTable; PrrtDeliveredPacketTable *deliveredPacketTable; PrrtReceiver* receiver; Loading
prrt/proto/stores/forwardPacketTable.c→prrt/proto/stores/deliveredPacketTable.c +18 −18 Original line number Diff line number Diff line Loading @@ -3,10 +3,10 @@ #include "../../util/dbg.h" #include "../../defines.h" #include "../packet.h" #include "forwardPacketTable.h" #include "deliveredPacketTable.h" static bool is_position_relevant(const PrrtForwardPacketTable *fpt_ptr, prrtSequenceNumber_t seqno) static bool is_position_relevant(const PrrtDeliveredPacketTable *fpt_ptr, prrtSequenceNumber_t seqno) { prrtSequenceNumber_t stop = (prrtSequenceNumber_t) (SEQNO_SPACE / 2 + fpt_ptr->start); if(fpt_ptr->start < stop && !(fpt_ptr->start <= seqno && seqno <= stop)) { Loading @@ -18,7 +18,7 @@ static bool is_position_relevant(const PrrtForwardPacketTable *fpt_ptr, prrtSequ } } static void move_start(PrrtForwardPacketTable *fpt_ptr) static void move_start(PrrtDeliveredPacketTable *fpt_ptr) { prrtSequenceNumber_t seqno = fpt_ptr->start; Loading @@ -35,9 +35,9 @@ static void move_start(PrrtForwardPacketTable *fpt_ptr) fpt_ptr->start = seqno; } PrrtForwardPacketTable *PrrtForwardPacketTable_create() PrrtDeliveredPacketTable *PrrtDeliveredPacketTable_create() { PrrtForwardPacketTable *fpt_prt = calloc(1, sizeof(PrrtForwardPacketTable)); PrrtDeliveredPacketTable *fpt_prt = calloc(1, sizeof(PrrtDeliveredPacketTable)); check_mem(fpt_prt); fpt_prt->start = 1; fpt_prt->bitmap = Bitmap_create(true, SEQNO_SPACE); Loading @@ -48,28 +48,28 @@ PrrtForwardPacketTable *PrrtForwardPacketTable_create() return NULL; } bool PrrtForwardPacketTable_destroy(PrrtForwardPacketTable *fpt_prt) bool PrrtDeliveredPacketTable_destroy(PrrtDeliveredPacketTable *t) { Bitmap_destroy(fpt_prt->bitmap); free(fpt_prt); Bitmap_destroy(t->bitmap); free(t); return true; } bool PrrtForwardPacketTable_test_set_is_number_relevant(PrrtForwardPacketTable *fpt_ptr, prrtSequenceNumber_t seqno) bool PrrtDeliveredPacketTable_test_set_is_number_relevant(PrrtDeliveredPacketTable *t, prrtSequenceNumber_t seqno) { bool res = is_position_relevant(fpt_ptr, seqno); bool res = is_position_relevant(t, seqno); if(res) { Bitmap_set(fpt_ptr->bitmap, seqno, false); if(seqno == fpt_ptr->start) { move_start(fpt_ptr); Bitmap_set(t->bitmap, seqno, false); if(seqno == t->start) { move_start(t); } } return res; } bool PrrtForwardPacketTable_test_is_block_relevant(PrrtForwardPacketTable *forwardPacketTable, bool PrrtDeliveredPacketTable_test_is_block_relevant(PrrtDeliveredPacketTable *t, prrtSequenceNumber_t start, prrtSequenceNumber_t length) { Loading @@ -78,13 +78,13 @@ bool PrrtForwardPacketTable_test_is_block_relevant(PrrtForwardPacketTable *forwa int i; for(i = 0; i < length; i++) { res = res || is_position_relevant(forwardPacketTable, (prrtSequenceNumber_t) (start + i)); res = res || is_position_relevant(t, (prrtSequenceNumber_t) (start + i)); } return res; } void PrrtForwardPacketTable_forward_start(PrrtForwardPacketTable *fpt_ptr, prrtSequenceNumber_t new_start) void PrrtDeliveredPacketTable_forward_start(PrrtDeliveredPacketTable *fpt_ptr, prrtSequenceNumber_t new_start) { prrtSequenceNumber_t seqno = fpt_ptr->start; Loading