Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
PRRT
Project overview
Project overview
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
26
Issues
26
List
Boards
Labels
Milestones
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Container Registry
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
LARN
PRRT
Commits
1d31aa4a
Commit
1d31aa4a
authored
Jun 28, 2018
by
Andreas Schmidt
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
WIP.
parent
bdbe1ac2
Pipeline
#3041
failed with stages
in 21 seconds
Changes
6
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
45 additions
and
8 deletions
+45
-8
prrt/proto/socket.c
prrt/proto/socket.c
+7
-1
prrt/proto/socket.h
prrt/proto/socket.h
+2
-0
prrt/proto/stores/deliveredPacketTable.c
prrt/proto/stores/deliveredPacketTable.c
+9
-4
prrt/proto/stores/deliveredPacketTable.h
prrt/proto/stores/deliveredPacketTable.h
+1
-1
prrt/proto/stores/packetDeliveryStore.c
prrt/proto/stores/packetDeliveryStore.c
+24
-2
prrt/proto/stores/packetDeliveryStore.h
prrt/proto/stores/packetDeliveryStore.h
+2
-0
No files found.
prrt/proto/socket.c
View file @
1d31aa4a
...
...
@@ -49,6 +49,8 @@ PrrtSocket *PrrtSocket_create(prrtByteCount_t maximum_payload_size, prrtTimedelt
s
->
interfaceName
=
NULL
;
s
->
isThreadPinning
=
false
;
s
->
isGapFilling
=
true
;
s
->
gapFillingByte
=
'A'
;
PrrtClock_init
(
&
s
->
clock
);
...
...
@@ -475,7 +477,11 @@ bool PrrtSocket_cleanup(PrrtSocket *s) {
prrtSequenceNumber_t
lastSequenceNumberBase
=
(
prrtSequenceNumber_t
)
(
last
->
sequenceNumber
-
last
->
index
-
1
);
PrrtDeliveredPacketTable_forward_start
(
s
->
deliveredPacketTable
,
lastSequenceNumberBase
);
prrtSequenceNumber_t
purgePackets
=
PrrtDeliveredPacketTable_forward_start
(
s
->
deliveredPacketTable
,
lastSequenceNumberBase
);
if
(
s
->
isGapFilling
)
{
PrrtDeliveryStore_insert_gap_packets
(
s
->
packetDeliveryStore
,
purgePackets
,
s
->
gapFillingByte
,
s
->
maximum_payload_size
);
}
PrrtRepairBlockStore_expire_block_range
(
s
->
repairBlockStore
,
firstSequenceNumberBase
,
lastSequenceNumberBase
);
...
...
prrt/proto/socket.h
View file @
1d31aa4a
...
...
@@ -79,6 +79,8 @@ typedef struct prrtSocket {
atomic_bool
isThreadPinning
;
prrtByteCount_t
maximum_payload_size
;
bool
isGapFilling
;
uint8_t
gapFillingByte
;
}
PrrtSocket
;
...
...
prrt/proto/stores/deliveredPacketTable.c
View file @
1d31aa4a
...
...
@@ -88,18 +88,23 @@ bool PrrtDeliveredPacketTable_test_is_block_relevant(PrrtDeliveredPacketTable *t
return
res
;
}
void
PrrtDeliveredPacketTable_forward_start
(
PrrtDeliveredPacketTable
*
fpt_ptr
,
prrtSequenceNumber_t
new_start
)
prrtSequenceNumber_t
PrrtDeliveredPacketTable_forward_start
(
PrrtDeliveredPacketTable
*
fpt_ptr
,
prrtSequenceNumber_t
new_start
)
{
pthread_mutex_lock
(
&
fpt_ptr
->
lock
);
prrtSequenceNumber_t
purged_packets
=
0
;
check
(
pthread_mutex_lock
(
&
fpt_ptr
->
lock
),
"Lock failed."
);
prrtSequenceNumber_t
seqno
=
fpt_ptr
->
start
;
purged_packets
=
new_start
-
fpt_ptr
->
start
;
while
(
seqno
!=
new_start
)
{
Bitmap_set
(
fpt_ptr
->
bitmap
,
seqno
,
true
);
seqno
++
;
}
// TODO: make more efficient by using the Bitmap_set_range function
fpt_ptr
->
start
=
seqno
;
pthread_mutex_unlock
(
&
fpt_ptr
->
lock
);
return
purged_packets
;
error:
PERROR
(
"PrrtDeliveredPacketTable_forward_start failed."
)
return
0
;
}
prrt/proto/stores/deliveredPacketTable.h
View file @
1d31aa4a
...
...
@@ -22,7 +22,7 @@ bool PrrtDeliveredPacketTable_test_is_block_relevant(PrrtDeliveredPacketTable *t
prrtSequenceNumber_t
start
,
prrtSequenceNumber_t
length
);
void
PrrtDeliveredPacketTable_forward_start
(
PrrtDeliveredPacketTable
*
fpt_ptr
,
prrtSequenceNumber_t
new_start
);
prrtSequenceNumber_t
PrrtDeliveredPacketTable_forward_start
(
PrrtDeliveredPacketTable
*
fpt_ptr
,
prrtSequenceNumber_t
new_start
);
#endif //PRRT_DELIVERED_PACKET_TABLE_H
prrt/proto/stores/packetDeliveryStore.c
View file @
1d31aa4a
...
...
@@ -130,10 +130,31 @@ bool PrrtPacketDeliveryStore_insert(PrrtPacketDeliveryStore *q, PrrtPacket *pack
return
true
;
error:
PERROR
(
"
I
nsert failed%s."
,
""
);
PERROR
(
"
PrrtPacketDeliveryStore_i
nsert failed%s."
,
""
);
return
false
;
}
bool
PrrtDeliveryStore_insert_gap_packets
(
PrrtPacketDeliveryStore
*
pds
,
prrtSequenceNumber_t
packets
,
uint8_t
gap_filling_byte
,
prrtByteCount_t
gap_size
)
{
check
(
pthread_mutex_lock
(
&
pds
->
lock
)
==
EXIT_SUCCESS
,
"Lock failed."
);
int
i
=
0
;
uint8_t
*
buffer
=
calloc
(
1
,
gap_size
);
PrrtPacket
*
packet
=
PrrtPacket_create_data_packet
(
0
,
buffer
,
gap_size
,
)
for
(
i
=
0
;
i
<
packets
;
i
++
)
{
}
check
(
pthread_mutex_unlock
(
&
pds
->
lock
)
==
EXIT_SUCCESS
,
"Unlock failed."
);
return
true
;
error:
PERROR
(
"PrrtDeliveryStore_insert_gap_packets failed%s."
,
""
);
return
false
;
}
bool
PrrtPacketDeliveryStore_destroy
(
PrrtPacketDeliveryStore
*
q
)
{
List
*
packetList
=
List_create
();
BPTree_get_range
(
q
->
tree
,
packetList
,
0
,
(
prrtSequenceNumber_t
)
(
SEQNO_SPACE
-
1
));
...
...
@@ -160,4 +181,5 @@ void PrrtPacketDeliveryStore_interrupt(PrrtPacketDeliveryStore *q) {
atomic_store_explicit
(
&
q
->
closing
,
true
,
memory_order_release
);
pthread_cond_broadcast
(
&
q
->
wait_for_data
);
pthread_mutex_unlock
(
&
q
->
lock
);
}
\ No newline at end of file
}
prrt/proto/stores/packetDeliveryStore.h
View file @
1d31aa4a
...
...
@@ -24,6 +24,8 @@ PrrtPacket *PrrtPacketDeliveryStore_get_packet_timedwait(PrrtPacketDeliveryStore
prrtTimestamp_t
stop
,
const
struct
timespec
*
deadline
);
bool
PrrtPacketDeliveryStore_insert
(
PrrtPacketDeliveryStore
*
q
,
PrrtPacket
*
packet
);
bool
PrrtDeliveryStore_insert_gap_packets
(
PrrtPacketDeliveryStore
*
pds
,
prrtSequenceNumber_t
packets
,
uint8_t
gap_filling_byte
,
prrtByteCount_t
i
);
void
PrrtPacketDeliveryStore_interrupt
(
PrrtPacketDeliveryStore
*
q
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment