Modify Endpoint Match Frame, Fix Test Suite
The reader falgs (Expects In-line QoS, Expects Historical Data, Is Best Effort) of the remote reader is transfered in the Metatraffic Endpoint Match Frame. The Level 1 rtps_builtin_endpoint test was also fixed.
This commit is contained in:
parent
a3a51e2f52
commit
bfdc366273
22
src/REF.txt
22
src/REF.txt
@ -236,6 +236,11 @@ PARTICICPANT DATA
|
||||
22| |
|
||||
+-------------------------------------------------------------+
|
||||
|
||||
Q...Reader expects in-line QoS
|
||||
M...Send Message Data (Liveliness Update)
|
||||
S...Send Subriber Data
|
||||
P...Send Publisher Data
|
||||
|
||||
|
||||
ENDPOINT MATCH FRAME
|
||||
====================
|
||||
@ -253,9 +258,20 @@ ENDPOINT MATCH FRAME
|
||||
04| ENTITYID |
|
||||
+-------------------------------------------------------------+
|
||||
05| IPv4_ADDRESS |
|
||||
+-----------------------------+---------------------------+-+-+
|
||||
06| UDP_PORT | UNUSED |D|Q|
|
||||
+-----------------------------+---------------------------+-+-+
|
||||
+-----------------------------+-------------------------------+
|
||||
06| UDP_PORT | READER_FLAGS |
|
||||
+-----------------------------+-------------------------------+
|
||||
|
||||
READER_FLAGS
|
||||
------------
|
||||
16..............8...............0
|
||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
+-------------------------+-+-+-+
|
||||
| UNUSED |B|H|Q|
|
||||
+-------------------------+-+-+-+
|
||||
Q...Reader expects in-line QoS
|
||||
H...Reader expects Historical Data
|
||||
B...Reader has RELIABILITY BEST_EFFORT
|
||||
|
||||
ENDPOINT UNMATCH FRAME
|
||||
======================
|
||||
|
||||
@ -322,10 +322,12 @@ begin
|
||||
e1.entityId := gen_rand_entityid_2(FALSE);
|
||||
e1.topic_name := ENDPOINT_TOPIC(0);
|
||||
e1.type_name := ENDPOINT_TYPE(0);
|
||||
e1.reader := FALSE;
|
||||
e2.participant := p2;
|
||||
e2.entityId := gen_rand_entityid_2(TRUE);
|
||||
e2.topic_name := ENDPOINT_TOPIC(0);
|
||||
e2.type_name := ENDPOINT_TYPE(0);
|
||||
e2.reader := TRUE;
|
||||
|
||||
user_data := convert_string("USER_DATA" & (10 to 256 => NUL));
|
||||
group_data := convert_string("GROUP_DATA" & (11 to 256 => NUL));
|
||||
@ -486,6 +488,7 @@ begin
|
||||
Log("Match Participant 2 Writer [Durability Persistent]", INFO);
|
||||
sub_p.writerSN := p2_snp;
|
||||
endpoint := DEFAULT_ENDPOINT_DATA;
|
||||
endpoint.reader := FALSE;
|
||||
endpoint.entityId := gen_rand_entityid_2(FALSE);
|
||||
endpoint.participant := p2;
|
||||
endpoint.topic_name := ENDPOINT_TOPIC(0);
|
||||
@ -506,6 +509,7 @@ begin
|
||||
Log("Match Participant 2 Writer [Presentation Group]", INFO);
|
||||
sub_p.writerSN := p2_snp;
|
||||
endpoint := DEFAULT_ENDPOINT_DATA;
|
||||
endpoint.reader := FALSE;
|
||||
endpoint.entityId := gen_rand_entityid_2(FALSE);
|
||||
endpoint.participant := p2;
|
||||
endpoint.topic_name := ENDPOINT_TOPIC(0);
|
||||
@ -526,6 +530,7 @@ begin
|
||||
Log("Ignore Participant 2 Writer [Ownership Exclusive]", INFO);
|
||||
sub_p.writerSN := p2_snp;
|
||||
endpoint := DEFAULT_ENDPOINT_DATA;
|
||||
endpoint.reader := FALSE;
|
||||
endpoint.entityId := gen_rand_entityid_2(FALSE);
|
||||
endpoint.participant := p2;
|
||||
endpoint.topic_name := ENDPOINT_TOPIC(0);
|
||||
@ -546,6 +551,7 @@ begin
|
||||
Log("Match Participant 2 Writer [USER_DATA, TOPIC_DATA, GROUP_DATA, MAX_SERIALIZED_PAYLOAD]", INFO);
|
||||
sub_p.writerSN := p2_snp;
|
||||
endpoint := DEFAULT_ENDPOINT_DATA;
|
||||
endpoint.reader := FALSE;
|
||||
endpoint.entityId := gen_rand_entityid_2(FALSE);
|
||||
endpoint.participant := p2;
|
||||
endpoint.topic_name := ENDPOINT_TOPIC(0);
|
||||
@ -569,6 +575,7 @@ begin
|
||||
Log("Ignore Participant 2 Writer [Incompatible MAX_SERIALIZED_PAYLOAD]", INFO);
|
||||
sub_p.writerSN := p2_snp;
|
||||
endpoint := DEFAULT_ENDPOINT_DATA;
|
||||
endpoint.reader := FALSE;
|
||||
endpoint.entityId := gen_rand_entityid_2(FALSE);
|
||||
endpoint.participant := p2;
|
||||
endpoint.topic_name := ENDPOINT_TOPIC(0);
|
||||
@ -589,6 +596,7 @@ begin
|
||||
Log("Ignore Participant 2 Writer [Non-Default Partition]", INFO);
|
||||
sub_p.writerSN := p2_snp;
|
||||
endpoint := DEFAULT_ENDPOINT_DATA;
|
||||
endpoint.reader := FALSE;
|
||||
endpoint.entityId := gen_rand_entityid_2(FALSE);
|
||||
endpoint.participant := p2;
|
||||
endpoint.topic_name := ENDPOINT_TOPIC(0);
|
||||
@ -611,6 +619,7 @@ begin
|
||||
Log("Ignore Participant 2 Reader [Durability Persistent]", INFO);
|
||||
sub_s.writerSN := p2_sns;
|
||||
endpoint := DEFAULT_ENDPOINT_DATA;
|
||||
endpoint.reader := TRUE;
|
||||
endpoint.entityId := gen_rand_entityid_2(TRUE);
|
||||
endpoint.participant := p2;
|
||||
endpoint.topic_name := ENDPOINT_TOPIC(0);
|
||||
@ -631,6 +640,7 @@ begin
|
||||
Log("Ignore Participant 2 Reader [Presentation Group]", INFO);
|
||||
sub_s.writerSN := p2_sns;
|
||||
endpoint := DEFAULT_ENDPOINT_DATA;
|
||||
endpoint.reader := TRUE;
|
||||
endpoint.entityId := gen_rand_entityid_2(TRUE);
|
||||
endpoint.participant := p2;
|
||||
endpoint.topic_name := ENDPOINT_TOPIC(0);
|
||||
@ -652,6 +662,7 @@ begin
|
||||
Log("Ignore Participant 2 Reader [Ownership Exclusive]", INFO);
|
||||
sub_s.writerSN := p2_sns;
|
||||
endpoint := DEFAULT_ENDPOINT_DATA;
|
||||
endpoint.reader := TRUE;
|
||||
endpoint.entityId := gen_rand_entityid_2(TRUE);
|
||||
endpoint.participant := p2;
|
||||
endpoint.topic_name := ENDPOINT_TOPIC(0);
|
||||
@ -672,6 +683,7 @@ begin
|
||||
Log("Match Participant 2 Reader [USER_DATA, TOPIC_DATA, GROUP_DATA, EXPECTS_INLINE_QOS]", INFO);
|
||||
sub_s.writerSN := p2_sns;
|
||||
endpoint := DEFAULT_ENDPOINT_DATA;
|
||||
endpoint.reader := TRUE;
|
||||
endpoint.entityId := gen_rand_entityid_2(TRUE);
|
||||
endpoint.participant := p2;
|
||||
endpoint.topic_name := ENDPOINT_TOPIC(0);
|
||||
@ -695,6 +707,7 @@ begin
|
||||
Log("Ignore Participant 2 Reader [Non-Default Partition]", INFO);
|
||||
sub_s.writerSN := p2_sns;
|
||||
endpoint := DEFAULT_ENDPOINT_DATA;
|
||||
endpoint.reader := TRUE;
|
||||
endpoint.entityId := gen_rand_entityid_2(TRUE);
|
||||
endpoint.participant := p2;
|
||||
endpoint.topic_name := ENDPOINT_TOPIC(0);
|
||||
|
||||
@ -615,6 +615,7 @@ begin
|
||||
Log("Ignore Endpoint [No PID_SENTINEL]", INFO);
|
||||
sub_p.writerSN := p_snp;
|
||||
endpoint := e0;
|
||||
endpoint.reader := FALSE;
|
||||
endpoint.entityId := gen_rand_entityid_2(FALSE);
|
||||
gen_endpoint_data(endpoint, sub_p.data);
|
||||
gen_rtps_handler_out(sub_p, endpoint, stimulus);
|
||||
@ -626,8 +627,9 @@ begin
|
||||
|
||||
-- *PID_TOPIC_NAME*
|
||||
Log("Ignore Endpoint [Invalid PID_TOPIC_NAME]", INFO);
|
||||
sub_p.writerSN := p_snp;
|
||||
sub_p.writerSN := p_snp;
|
||||
endpoint := e0;
|
||||
endpoint.reader := FALSE;
|
||||
endpoint.entityId := gen_rand_entityid_2(FALSE);
|
||||
gen_endpoint_data(endpoint, sub_p.data, PID_TOPIC_NAME, -1);
|
||||
gen_sentinel(sub_p.data);
|
||||
@ -639,8 +641,9 @@ begin
|
||||
sub_p.data := EMPTY_TEST_PACKET;
|
||||
|
||||
Log("Match Endpoint [Extra Bytes in PID_TOPIC_NAME]", INFO);
|
||||
sub_p.writerSN := p_snp;
|
||||
sub_p.writerSN := p_snp;
|
||||
endpoint := e0;
|
||||
endpoint.reader := FALSE;
|
||||
endpoint.entityId := gen_rand_entityid_2(FALSE);
|
||||
gen_endpoint_data(endpoint, sub_p.data, PID_TOPIC_NAME, +1);
|
||||
gen_sentinel(sub_p.data);
|
||||
@ -656,8 +659,9 @@ begin
|
||||
|
||||
-- *PID_TYPE_NAME*
|
||||
Log("Ignore Endpoint [Invalid PID_TYPE_NAME]", INFO);
|
||||
sub_p.writerSN := p_snp;
|
||||
sub_p.writerSN := p_snp;
|
||||
endpoint := e0;
|
||||
endpoint.reader := FALSE;
|
||||
endpoint.entityId := gen_rand_entityid_2(FALSE);
|
||||
gen_endpoint_data(endpoint, sub_p.data, PID_TYPE_NAME, -1);
|
||||
gen_sentinel(sub_p.data);
|
||||
@ -669,8 +673,9 @@ begin
|
||||
sub_p.data := EMPTY_TEST_PACKET;
|
||||
|
||||
Log("Match Endpoint [Extra Bytes in PID_TYPE_NAME]", INFO);
|
||||
sub_p.writerSN := p_snp;
|
||||
sub_p.writerSN := p_snp;
|
||||
endpoint := e0;
|
||||
endpoint.reader := FALSE;
|
||||
endpoint.entityId := gen_rand_entityid_2(FALSE);
|
||||
gen_endpoint_data(endpoint, sub_p.data, PID_TYPE_NAME, +1);
|
||||
gen_sentinel(sub_p.data);
|
||||
@ -686,8 +691,9 @@ begin
|
||||
|
||||
-- *PID_DURABILITY*
|
||||
Log("Ignore Endpoint [Invalid PID_DURABILITY]", INFO);
|
||||
sub_p.writerSN := p_snp;
|
||||
sub_p.writerSN := p_snp;
|
||||
endpoint := e0;
|
||||
endpoint.reader := FALSE;
|
||||
endpoint.entityId := gen_rand_entityid_2(FALSE);
|
||||
gen_endpoint_data(endpoint, sub_p.data, PID_DURABILITY, -1);
|
||||
gen_sentinel(sub_p.data);
|
||||
@ -699,8 +705,9 @@ begin
|
||||
sub_p.data := EMPTY_TEST_PACKET;
|
||||
|
||||
Log("Match Endpoint [Extra Bytes in PID_DURABILITY]", INFO);
|
||||
sub_p.writerSN := p_snp;
|
||||
sub_p.writerSN := p_snp;
|
||||
endpoint := e0;
|
||||
endpoint.reader := FALSE;
|
||||
endpoint.entityId := gen_rand_entityid_2(FALSE);
|
||||
gen_endpoint_data(endpoint, sub_p.data, PID_DURABILITY, +1);
|
||||
gen_sentinel(sub_p.data);
|
||||
@ -716,8 +723,9 @@ begin
|
||||
|
||||
-- *PID_DEADLINE*
|
||||
Log("Ignore Endpoint [Invalid PID_DEADLINE]", INFO);
|
||||
sub_p.writerSN := p_snp;
|
||||
sub_p.writerSN := p_snp;
|
||||
endpoint := e0;
|
||||
endpoint.reader := FALSE;
|
||||
endpoint.entityId := gen_rand_entityid_2(FALSE);
|
||||
gen_endpoint_data(endpoint, sub_p.data, PID_DEADLINE, -1);
|
||||
gen_sentinel(sub_p.data);
|
||||
@ -729,8 +737,9 @@ begin
|
||||
sub_p.data := EMPTY_TEST_PACKET;
|
||||
|
||||
Log("Match Endpoint [Extra Bytes in PID_DEADLINE]", INFO);
|
||||
sub_p.writerSN := p_snp;
|
||||
sub_p.writerSN := p_snp;
|
||||
endpoint := e0;
|
||||
endpoint.reader := FALSE;
|
||||
endpoint.entityId := gen_rand_entityid_2(FALSE);
|
||||
gen_endpoint_data(endpoint, sub_p.data, PID_DEADLINE, +1);
|
||||
gen_sentinel(sub_p.data);
|
||||
@ -748,6 +757,7 @@ begin
|
||||
Log("Ignore Endpoint [Invalid PID_LIVELINESS]", INFO);
|
||||
sub_p.writerSN := p_snp;
|
||||
endpoint := e0;
|
||||
endpoint.reader := FALSE;
|
||||
endpoint.entityId := gen_rand_entityid_2(FALSE);
|
||||
gen_endpoint_data(endpoint, sub_p.data, PID_LIVELINESS, -1);
|
||||
gen_sentinel(sub_p.data);
|
||||
@ -761,6 +771,7 @@ begin
|
||||
Log("Match Endpoint [Extra Bytes in PID_LIVELINESS]", INFO);
|
||||
sub_p.writerSN := p_snp;
|
||||
endpoint := e0;
|
||||
endpoint.reader := FALSE;
|
||||
endpoint.entityId := gen_rand_entityid_2(FALSE);
|
||||
gen_endpoint_data(endpoint, sub_p.data, PID_LIVELINESS, +1);
|
||||
gen_sentinel(sub_p.data);
|
||||
@ -778,6 +789,7 @@ begin
|
||||
Log("Ignore Endpoint [Invalid PID_RELIABILITY]", INFO);
|
||||
sub_p.writerSN := p_snp;
|
||||
endpoint := e0;
|
||||
endpoint.reader := FALSE;
|
||||
endpoint.entityId := gen_rand_entityid_2(FALSE);
|
||||
gen_endpoint_data(endpoint, sub_p.data, PID_RELIABILITY, -1);
|
||||
gen_sentinel(sub_p.data);
|
||||
@ -791,6 +803,7 @@ begin
|
||||
Log("Match Endpoint [Extra Bytes in PID_RELIABILITY]", INFO);
|
||||
sub_p.writerSN := p_snp;
|
||||
endpoint := e0;
|
||||
endpoint.reader := FALSE;
|
||||
endpoint.entityId := gen_rand_entityid_2(FALSE);
|
||||
gen_endpoint_data(endpoint, sub_p.data, PID_RELIABILITY, +1);
|
||||
gen_sentinel(sub_p.data);
|
||||
@ -808,6 +821,7 @@ begin
|
||||
Log("Ignore Endpoint [Invalid PID_DESTINATION_ORDER]", INFO);
|
||||
sub_p.writerSN := p_snp;
|
||||
endpoint := e0;
|
||||
endpoint.reader := FALSE;
|
||||
endpoint.entityId := gen_rand_entityid_2(FALSE);
|
||||
gen_endpoint_data(endpoint, sub_p.data, PID_DESTINATION_ORDER, -1);
|
||||
gen_sentinel(sub_p.data);
|
||||
@ -821,6 +835,7 @@ begin
|
||||
Log("Match Endpoint [Extra Bytes in PID_DESTINATION_ORDER]", INFO);
|
||||
sub_p.writerSN := p_snp;
|
||||
endpoint := e0;
|
||||
endpoint.reader := FALSE;
|
||||
endpoint.entityId := gen_rand_entityid_2(FALSE);
|
||||
gen_endpoint_data(endpoint, sub_p.data, PID_DESTINATION_ORDER, +1);
|
||||
gen_sentinel(sub_p.data);
|
||||
@ -838,6 +853,7 @@ begin
|
||||
Log("Ignore Endpoint [Invalid PID_OWNERSHIP]", INFO);
|
||||
sub_p.writerSN := p_snp;
|
||||
endpoint := e0;
|
||||
endpoint.reader := FALSE;
|
||||
endpoint.entityId := gen_rand_entityid_2(FALSE);
|
||||
gen_endpoint_data(endpoint, sub_p.data, PID_OWNERSHIP, -1);
|
||||
gen_sentinel(sub_p.data);
|
||||
@ -851,6 +867,7 @@ begin
|
||||
Log("Match Endpoint [Extra Bytes in PID_OWNERSHIP]", INFO);
|
||||
sub_p.writerSN := p_snp;
|
||||
endpoint := e0;
|
||||
endpoint.reader := FALSE;
|
||||
endpoint.entityId := gen_rand_entityid_2(FALSE);
|
||||
gen_endpoint_data(endpoint, sub_p.data, PID_OWNERSHIP, +1);
|
||||
gen_sentinel(sub_p.data);
|
||||
@ -868,6 +885,7 @@ begin
|
||||
Log("Ignore Endpoint [Invalid PID_PRESENTATION]", INFO);
|
||||
sub_p.writerSN := p_snp;
|
||||
endpoint := e0;
|
||||
endpoint.reader := FALSE;
|
||||
endpoint.entityId := gen_rand_entityid_2(FALSE);
|
||||
gen_endpoint_data(endpoint, sub_p.data, PID_PRESENTATION, -1);
|
||||
gen_sentinel(sub_p.data);
|
||||
@ -881,6 +899,7 @@ begin
|
||||
Log("Match Endpoint [Extra Bytes in PID_PRESENTATION]", INFO);
|
||||
sub_p.writerSN := p_snp;
|
||||
endpoint := e0;
|
||||
endpoint.reader := FALSE;
|
||||
endpoint.entityId := gen_rand_entityid_2(FALSE);
|
||||
gen_endpoint_data(endpoint, sub_p.data, PID_PRESENTATION, +1);
|
||||
gen_sentinel(sub_p.data);
|
||||
@ -898,6 +917,7 @@ begin
|
||||
Log("Ignore Endpoint [Invalid PID_LATENCY_BUDGET]", INFO);
|
||||
sub_p.writerSN := p_snp;
|
||||
endpoint := e0;
|
||||
endpoint.reader := FALSE;
|
||||
endpoint.entityId := gen_rand_entityid_2(FALSE);
|
||||
gen_endpoint_data(endpoint, sub_p.data, PID_LATENCY_BUDGET, -1);
|
||||
gen_sentinel(sub_p.data);
|
||||
@ -911,6 +931,7 @@ begin
|
||||
Log("Match Endpoint [Extra Bytes in PID_LATENCY_BUDGET]", INFO);
|
||||
sub_p.writerSN := p_snp;
|
||||
endpoint := e0;
|
||||
endpoint.reader := FALSE;
|
||||
endpoint.entityId := gen_rand_entityid_2(FALSE);
|
||||
gen_endpoint_data(endpoint, sub_p.data, PID_LATENCY_BUDGET, +1);
|
||||
gen_sentinel(sub_p.data);
|
||||
@ -928,6 +949,7 @@ begin
|
||||
Log("Ignore Endpoint [Invalid PID_ENDPOINT_GUID]", INFO);
|
||||
sub_p.writerSN := p_snp;
|
||||
endpoint := e0;
|
||||
endpoint.reader := FALSE;
|
||||
endpoint.entityId := gen_rand_entityid_2(FALSE);
|
||||
gen_endpoint_data(endpoint, sub_p.data, PID_ENDPOINT_GUID, -1);
|
||||
gen_sentinel(sub_p.data);
|
||||
@ -941,6 +963,7 @@ begin
|
||||
Log("Match Endpoint [Extra Bytes in PID_ENDPOINT_GUID]", INFO);
|
||||
sub_p.writerSN := p_snp;
|
||||
endpoint := e0;
|
||||
endpoint.reader := FALSE;
|
||||
endpoint.entityId := gen_rand_entityid_2(FALSE);
|
||||
gen_endpoint_data(endpoint, sub_p.data, PID_ENDPOINT_GUID, +1);
|
||||
gen_sentinel(sub_p.data);
|
||||
@ -958,6 +981,7 @@ begin
|
||||
Log("Ignore Endpoint [Invalid PID_EXPECTS_INLINE_QOS]", INFO);
|
||||
sub_p.writerSN := p_snp;
|
||||
endpoint := e0;
|
||||
endpoint.reader := FALSE;
|
||||
endpoint.entityId := gen_rand_entityid_2(FALSE);
|
||||
gen_endpoint_data(endpoint, sub_p.data, PID_EXPECTS_INLINE_QOS, -1);
|
||||
gen_sentinel(sub_p.data);
|
||||
@ -971,6 +995,7 @@ begin
|
||||
Log("Match Endpoint [Extra Bytes in PID_EXPECTS_INLINE_QOS]", INFO);
|
||||
sub_p.writerSN := p_snp;
|
||||
endpoint := e0;
|
||||
endpoint.reader := FALSE;
|
||||
endpoint.entityId := gen_rand_entityid_2(FALSE);
|
||||
gen_endpoint_data(endpoint, sub_p.data, PID_EXPECTS_INLINE_QOS, +1);
|
||||
gen_sentinel(sub_p.data);
|
||||
@ -988,6 +1013,7 @@ begin
|
||||
Log("Ignore Endpoint [Invalid PID_DATA_MAX_SIZE_SERIALIZED]", INFO);
|
||||
sub_p.writerSN := p_snp;
|
||||
endpoint := e0;
|
||||
endpoint.reader := FALSE;
|
||||
endpoint.entityId := gen_rand_entityid_2(FALSE);
|
||||
endpoint.max_size_serialized:= int(65000, CDR_LONG_WIDTH);
|
||||
gen_endpoint_data(endpoint, sub_p.data, PID_DATA_MAX_SIZE_SERIALIZED, -1);
|
||||
@ -1002,6 +1028,7 @@ begin
|
||||
Log("Match Endpoint [Extra Bytes in PID_DATA_MAX_SIZE_SERIALIZED]", INFO);
|
||||
sub_p.writerSN := p_snp;
|
||||
endpoint := e0;
|
||||
endpoint.reader := FALSE;
|
||||
endpoint.entityId := gen_rand_entityid_2(FALSE);
|
||||
endpoint.max_size_serialized:= int(65000, CDR_LONG_WIDTH);
|
||||
gen_endpoint_data(endpoint, sub_p.data, PID_DATA_MAX_SIZE_SERIALIZED, +1);
|
||||
@ -1020,6 +1047,7 @@ begin
|
||||
Log("Ignore Endpoint [Invalid PID_UNICAST_LOCATOR]", INFO);
|
||||
sub_p.writerSN := p_snp;
|
||||
endpoint := e0;
|
||||
endpoint.reader := FALSE;
|
||||
endpoint.entityId := gen_rand_entityid_2(FALSE);
|
||||
endpoint.unicastLocatorList := (numLocators => int(1,CDR_LONG_WIDTH), locator => (0 => gen_rand_loc_2, others => EMPTY_LOCATOR));
|
||||
gen_endpoint_data(endpoint, sub_p.data, PID_UNICAST_LOCATOR, -1);
|
||||
@ -1034,6 +1062,7 @@ begin
|
||||
Log("Match Endpoint [Extra Bytes in PID_UNICAST_LOCATOR]", INFO);
|
||||
sub_p.writerSN := p_snp;
|
||||
endpoint := e0;
|
||||
endpoint.reader := FALSE;
|
||||
endpoint.entityId := gen_rand_entityid_2(FALSE);
|
||||
endpoint.unicastLocatorList := (numLocators => int(1,CDR_LONG_WIDTH), locator => (0 => gen_rand_loc_2, others => EMPTY_LOCATOR));
|
||||
gen_endpoint_data(endpoint, sub_p.data, PID_UNICAST_LOCATOR, +1);
|
||||
@ -1052,6 +1081,7 @@ begin
|
||||
Log("Ignore Endpoint [Invalid PID_MULTICAST_LOCATOR]", INFO);
|
||||
sub_p.writerSN := p_snp;
|
||||
endpoint := e0;
|
||||
endpoint.reader := FALSE;
|
||||
endpoint.entityId := gen_rand_entityid_2(FALSE);
|
||||
endpoint.multicastLocatorList := (numLocators => int(1,CDR_LONG_WIDTH), locator => (0 => gen_rand_loc_2, others => EMPTY_LOCATOR));
|
||||
gen_endpoint_data(endpoint, sub_p.data, PID_MULTICAST_LOCATOR, -1);
|
||||
@ -1066,6 +1096,7 @@ begin
|
||||
Log("Match Endpoint [Extra Bytes in PID_MULTICAST_LOCATOR]", INFO);
|
||||
sub_p.writerSN := p_snp;
|
||||
endpoint := e0;
|
||||
endpoint.reader := FALSE;
|
||||
endpoint.entityId := gen_rand_entityid_2(FALSE);
|
||||
endpoint.multicastLocatorList := (numLocators => int(1,CDR_LONG_WIDTH), locator => (0 => gen_rand_loc_2, others => EMPTY_LOCATOR));
|
||||
gen_endpoint_data(endpoint, sub_p.data, PID_MULTICAST_LOCATOR, +1);
|
||||
|
||||
@ -240,6 +240,7 @@ begin
|
||||
sub_p.writerSN := p_snp;
|
||||
endpoint := e0;
|
||||
endpoint.participant:= p1;
|
||||
endpoint.reader := FALSE;
|
||||
endpoint.entityId := gen_rand_entityid_2(FALSE);
|
||||
gen_endpoint_data(endpoint, sub_p.data);
|
||||
gen_sentinel(sub_p.data);
|
||||
@ -254,6 +255,7 @@ begin
|
||||
sub_p.writerSN := p_snp;
|
||||
endpoint := e0;
|
||||
endpoint.participant:= p0;
|
||||
endpoint.reader := FALSE;
|
||||
endpoint.entityId := gen_rand_entityid_2(FALSE);
|
||||
gen_endpoint_data(endpoint, sub_p.data);
|
||||
gen_sentinel(sub_p.data);
|
||||
|
||||
@ -185,11 +185,13 @@ begin
|
||||
e0.participant := p0;
|
||||
e0.topic_name := ENDPOINT_TOPIC(2);
|
||||
e0.type_name := ENDPOINT_TYPE(2);
|
||||
e0.reader := FALSE;
|
||||
e0.entityId := gen_rand_entityid_2(FALSE);
|
||||
|
||||
e1.participant := p0;
|
||||
e1.topic_name := ENDPOINT_TOPIC(2);
|
||||
e1.type_name := ENDPOINT_TYPE(2);
|
||||
e1.reader := TRUE;
|
||||
e1.entityId := gen_rand_entityid_2(FALSE);
|
||||
|
||||
Log("Initiating Test", INFO);
|
||||
|
||||
@ -75,11 +75,11 @@ begin
|
||||
);
|
||||
|
||||
stimulus_prc : process
|
||||
variable sub : RTPS_SUBMESSAGE_TYPE := DEFAULT_RTPS_SUBMESSAGE;
|
||||
variable RV : RandomPType;
|
||||
variable sub : RTPS_SUBMESSAGE_TYPE := DEFAULT_RTPS_SUBMESSAGE;
|
||||
variable RV : RandomPType;
|
||||
variable p_sn : SEQUENCENUMBER_TYPE := FIRST_SEQUENCENUMBER;
|
||||
variable wr_sig : std_logic_vector(0 to NUM_ENDPOINTS-1) := (others => '0');
|
||||
variable p0, p1, p2, participant : PARTICIPANT_DATA_TYPE := DEFAULT_PARTICIPANT_DATA;
|
||||
variable p_sn : SEQUENCENUMBER_TYPE := FIRST_SEQUENCENUMBER;
|
||||
variable wr_sig : std_logic_vector(0 to NUM_ENDPOINTS-1) := (others => '0');
|
||||
|
||||
-- Wrapper to use procedure as function
|
||||
impure function gen_rand_loc_2 return LOCATOR_TYPE is
|
||||
|
||||
@ -11,7 +11,7 @@ use work.rtps_config_package.all;
|
||||
use work.rtps_test_package.all;
|
||||
|
||||
-- This testbench tests the rtps output of the builtin endpoint (Local Liveliness Assertion, Local Heartbeat Generation, Local Participant Announcement, Remote HEARTBEAT Response, Remote ACKNACK Response).
|
||||
-- This test is a Level 1 Test (Meaning the input/output is not connected directly to the uut) in order to have output in the msae format as the input of the system and allow us to compare using existing data generators.
|
||||
-- This test is a Level 1 Test (Meaning the input/output is not connected directly to the uut) in order to have output in the same format as the input of the system and allow us to compare using existing data generators.
|
||||
-- The testflow is as follows:
|
||||
-- * 0s
|
||||
-- - Match a remote participant
|
||||
@ -48,7 +48,6 @@ use work.rtps_test_package.all;
|
||||
-- * 1.205s
|
||||
-- - ACKNACK 5 Response
|
||||
-- * 1.500s
|
||||
-- - Liveliness of local Writer 0 (with AUTOMATIC Liveliness QoS) is asserted for 1 clock cycle [Test ignoring of non-relavant local Liveliness assertion]
|
||||
-- - Send ACKNACK 6 (Publihser, Expecting SN 18) [Test ACKNACK SN Response]
|
||||
-- * 1.705s
|
||||
-- - No ACKNACK 6 Response
|
||||
@ -57,10 +56,10 @@ use work.rtps_test_package.all;
|
||||
-- - Liveliness Assertion (Auto only)
|
||||
-- - Send ACKNACK 7 (Message, Expecting SN 5) [Test GAP sending on ACKNACK Response]
|
||||
-- - Send ACKNACK 8 (Publihser, Expecing SN 2) [Test full ACKNACK Response]
|
||||
-- - Send ACKNaCK 9 (Subscriber, Expecting SN 8) [Test full ACKNACK Response]
|
||||
-- - Send ACKNACK 9 (Subscriber, Expecting SN 8) [Test full ACKNACK Response]
|
||||
-- * 2.205s
|
||||
-- - ACKNACK 7/8/9 Response
|
||||
-- - Liveliness of local Writer 4 (with MANUAL_BY_PARTICIPANT Liveliness QOS) is asserted for 1 clock cycle [Test manual liveliness assertion after GAP generation]
|
||||
-- - Liveliness of local Writer 0 (with AUTOMATIC Liveliness QoS) is asserted for 1 clock cycle [Test manual liveliness assertion after GAP generation]
|
||||
-- * 2.500s
|
||||
-- - Send ACKNACK 10 (Message, Expecting SN 6) [Test ACKNACK SN Response]
|
||||
-- * 2.705s
|
||||
@ -800,11 +799,6 @@ begin
|
||||
wait on mem_op_done until rising_edge(mem_op_done) and stale_check = '1';
|
||||
wait on mem_op_done until rising_edge(mem_op_done) and stale_check = '1';
|
||||
|
||||
Log("Toggle local Writer 0 Liveliness for 1 clock cycle (AUTOMATIC_QOS)", INFO);
|
||||
alive(NUM_READERS) <= '1';
|
||||
wait until rising_edge(clk);
|
||||
alive <= (others => '0');
|
||||
|
||||
Log("Send Remote Publisher AckNack [Expecting 18] (No Response)", INFO);
|
||||
-- RTPS SUBMESSAGE
|
||||
sub := DEFAULT_RTPS_SUBMESSAGE;
|
||||
@ -890,8 +884,8 @@ begin
|
||||
|
||||
gen_data(p0, TRUE, TRUE, TRUE, gen_sn(3), gen_sn(5));
|
||||
|
||||
Log("Toggle local Writer 4 Liveliness for 1 clock cycle (MANUAL_BY_PARTICIPANT_QOS)", INFO);
|
||||
alive(NUM_READERS+4) <= '1';
|
||||
Log("Toggle local Writer 0 Liveliness for 1 clock cycle (AUTOMATIC_QOS)", INFO);
|
||||
alive(NUM_READERS) <= '1';
|
||||
wait until rising_edge(clk);
|
||||
alive <= (others => '0');
|
||||
|
||||
|
||||
@ -27,14 +27,14 @@ analyze Level_0/L0_rtps_builtin_endpoint_test7.vhd
|
||||
analyze Level_0/L0_rtps_out_test1.vhd
|
||||
analyze Level_1/L1_rtps_builtin_endpoint_test1.vhd
|
||||
|
||||
#simulate L0_rtps_handler_test1
|
||||
#simulate L0_rtps_handler_test2
|
||||
#simulate L0_rtps_builtin_endpoint_test1
|
||||
#simulate L0_rtps_builtin_endpoint_test2
|
||||
#simulate L0_rtps_builtin_endpoint_test3
|
||||
#simulate L0_rtps_builtin_endpoint_test4
|
||||
#simulate L0_rtps_builtin_endpoint_test5
|
||||
#simulate L0_rtps_builtin_endpoint_test6
|
||||
#simulate L0_rtps_builtin_endpoint_test7
|
||||
#simulate L0_rtps_out_test1
|
||||
#simulate L1_rtps_builtin_endpoint_test1
|
||||
simulate L0_rtps_handler_test1
|
||||
simulate L0_rtps_handler_test2
|
||||
simulate L0_rtps_builtin_endpoint_test1
|
||||
simulate L0_rtps_builtin_endpoint_test2
|
||||
simulate L0_rtps_builtin_endpoint_test3
|
||||
simulate L0_rtps_builtin_endpoint_test4
|
||||
simulate L0_rtps_builtin_endpoint_test5
|
||||
simulate L0_rtps_builtin_endpoint_test6
|
||||
simulate L0_rtps_builtin_endpoint_test7
|
||||
simulate L0_rtps_out_test1
|
||||
simulate L1_rtps_builtin_endpoint_test1
|
||||
@ -322,8 +322,8 @@ architecture arch of rtps_builtin_endpoint is
|
||||
signal is_live_assert, is_live_assert_next : std_logic := '0';
|
||||
-- Signifies the content of the string read from input
|
||||
signal string_content, string_content_next : STRING_CONTENT_TYPE := TOPIC_NAME_TYPE;
|
||||
-- Signifies that the expects_inline_qos Flag was explicitly set via a Parameter ID
|
||||
signal expects_inline_qos_rcv, expects_inline_qos_rcv_next : std_logic := '0';
|
||||
-- Reader Flags of remote Reader
|
||||
signal reader_flags, reader_flags_next : std_logic_vector(READER_FLAGS_WIDTH-1 downto 0) := (others => '0');
|
||||
-- Endpoint Locator IPv4 Address Latch
|
||||
signal def_addr, def_addr_next : std_logic_vector(IPv4_ADDRESS_WIDTH-1 downto 0) := (others => '0');
|
||||
-- Metatraffic Locator IPv4 Address Latch
|
||||
@ -403,8 +403,7 @@ begin
|
||||
if (reset = '1' or reset_endpoint_alive = '1') then
|
||||
endpoint_alive <= '0';
|
||||
-- Set Endpoint Alive Signal, if at least one endpoint asserts liveliness
|
||||
-- NOTE: Only writer endpoints with a Liveliness QoS of MANUAL_BY_PARTICIPANT as taken into account
|
||||
elsif ((alive and MANUAL_BY_PARTICIPANT_LIVELINESS_WRITERS) /= (alive'range => '0')) then
|
||||
elsif (alive /= (alive'range => '0')) then
|
||||
endpoint_alive <= '1';
|
||||
end if;
|
||||
end if;
|
||||
@ -528,7 +527,7 @@ begin
|
||||
meta_port_next <= meta_port;
|
||||
is_meta_addr_next <= is_meta_addr;
|
||||
cnt_next <= cnt;
|
||||
expects_inline_qos_rcv_next <= expects_inline_qos_rcv;
|
||||
reader_flags_next <= reader_flags;
|
||||
extra_flags_next <= extra_flags;
|
||||
stale_check_next <= stale_check;
|
||||
first_seq_nr_next <= first_seq_nr;
|
||||
@ -650,9 +649,8 @@ begin
|
||||
def_port_next <= (others => '0');
|
||||
meta_port_next <= META_IPv4_MULTICAST_PORT;
|
||||
lease_duration_next <= DEFAULT_PARTICIPANT_LEASE_DURATION;
|
||||
expects_inline_qos_rcv_next <= '0';
|
||||
extra_flags_next <= (others => '0');
|
||||
extra_flags_next(EXPECTS_INLINE_QOS_FLAG) <= DEFAULT_EXPECTS_INLINE_QOS;
|
||||
extra_flags_next <= (EXPECTS_INLINE_QOS_FLAG => DEFAULT_EXPECTS_INLINE_QOS, others => '0');
|
||||
reader_flags_next <= (READER_EXPECTS_INLINE_QOS_FLAG => DEFAULT_EXPECTS_INLINE_QOS, READER_EXPECTS_HISTORICAL_DATA_FLAG => DEFAULT_EXPECTS_HISTORICAL_DATA_FLAG, READER_IS_BEST_EFFORT_FLAG => DEFAULT_IS_BEST_EFFORT_FLAG, others => '0');
|
||||
rcvd_next <= (others => '0');
|
||||
-- NOTE: We work with a "mark by default, and unmark on first missmatch" System.
|
||||
-- This assumes that each RxO QoS parameter occur only once in the list, else the behavior is undefined.
|
||||
@ -1998,8 +1996,8 @@ begin
|
||||
rd_guard := '1';
|
||||
|
||||
-- Latch 'expectsInlineQoS'
|
||||
extra_flags_next(EXPECTS_INLINE_QOS_FLAG) <= data_in(24);
|
||||
expects_inline_qos_rcv_next <= '1';
|
||||
extra_flags_next(EXPECTS_INLINE_QOS_FLAG) <= data_in(24);
|
||||
reader_flags_next(READER_EXPECTS_INLINE_QOS_FLAG) <= data_in(24);
|
||||
|
||||
-- DONE
|
||||
stage_next <= SKIP_PARAMETER;
|
||||
@ -2056,6 +2054,12 @@ begin
|
||||
endpoint_mask_next(i) <= '0';
|
||||
end if;
|
||||
end loop;
|
||||
|
||||
-- Set Reader Flag
|
||||
if (is_subscriber = '1') then
|
||||
reader_flags_next(READER_EXPECTS_HISTORICAL_DATA_FLAG) <= '0' when (data_in_swapped = VOLATILE_DURABILITY_QOS) else '1';
|
||||
end if;
|
||||
|
||||
-- DONE
|
||||
stage_next <= SKIP_PARAMETER;
|
||||
end if;
|
||||
@ -2139,6 +2143,11 @@ begin
|
||||
endpoint_mask_next(i) <= '0';
|
||||
end if;
|
||||
end loop;
|
||||
|
||||
-- Set Reader Flag
|
||||
if (is_subscriber = '1') then
|
||||
reader_flags_next(READER_IS_BEST_EFFORT_FLAG) <= '1' when (data_in_swapped = BEST_EFFORT_RELIABILITY_QOS) else '0';
|
||||
end if;
|
||||
when 1 =>
|
||||
-- NOTE: The max_blocking_time value is ignored
|
||||
null;
|
||||
@ -2379,7 +2388,7 @@ begin
|
||||
else
|
||||
data_out <= mem_participant_data.def_addr;
|
||||
end if;
|
||||
-- UDPv4 Port and ExpectsInlineQoSFlag
|
||||
-- UDPv4 Port and Reader Flags
|
||||
when 6 =>
|
||||
-- Default
|
||||
data_out <= (others => '0');
|
||||
@ -2392,13 +2401,8 @@ begin
|
||||
data_out(31 downto 16) <= mem_participant_data.def_port;
|
||||
end if;
|
||||
|
||||
-- If Endpoint did not set Flags, use Participant Default
|
||||
if (expects_inline_qos_rcv = '1') then
|
||||
data_out(0) <= extra_flags(EXPECTS_INLINE_QOS_FLAG);
|
||||
else
|
||||
-- TODO: Which one is it?
|
||||
--data_out(0) <= mem_participant_data.extra_flags(EXPECTS_INLINE_QOS_FLAG);
|
||||
data_out(0) <= DEFAULT_EXPECTS_INLINE_QOS;
|
||||
if (is_subscriber = '1') then
|
||||
data_out(15 downto 0) <= reader_flags;
|
||||
end if;
|
||||
|
||||
-- DONE
|
||||
@ -2993,7 +2997,7 @@ begin
|
||||
-- Main State Machine
|
||||
-- STATE DESCRIPTION
|
||||
-- IDLE Idle state. Done Signal is pulled high and Memory FSM accepts new memory operations
|
||||
-- SEARCH_PARTICIPANT See Memory OPCODE Description
|
||||
-- SEARCH_PARTICIPANT See Memory OPCODE Description
|
||||
-- GET_PARTICIPANT_DATA Latch the contents of the Participant Entry for use in the main FSM
|
||||
-- INSERT_PARTICIPANT See Memory OPCODE Description
|
||||
-- UPDATE_PARTICIPANT See Memory OPCODE Description
|
||||
@ -3897,6 +3901,7 @@ begin
|
||||
long_latch <= (others => '0');
|
||||
mem_long_latch <= (others => '0');
|
||||
rcvd <= (others => '0');
|
||||
reader_flags <= (others => '0');
|
||||
max_participant_addr <= FIRST_PARTICIPANT_ADDRESS;
|
||||
guid <= (others => (others => '0'));
|
||||
mem_guidprefix <= (others => (others => '0'));
|
||||
@ -3921,7 +3926,6 @@ begin
|
||||
participant_match <= '0';
|
||||
is_subscriber <= '0';
|
||||
is_meta_addr <= '0';
|
||||
expects_inline_qos_rcv <= '0';
|
||||
stale_check <= '0';
|
||||
is_live_assert <= '0';
|
||||
is_heartbeat_res <= '0';
|
||||
@ -3957,6 +3961,7 @@ begin
|
||||
long_latch <= long_latch_next;
|
||||
mem_long_latch <= mem_long_latch_next;
|
||||
rcvd <= rcvd_next;
|
||||
reader_flags <= reader_flags_next;
|
||||
max_participant_addr <= max_participant_addr_next;
|
||||
guid <= guid_next;
|
||||
mem_guidprefix <= mem_guidprefix_next;
|
||||
@ -3981,7 +3986,6 @@ begin
|
||||
participant_match <= participant_match_next;
|
||||
is_subscriber <= is_subscriber_next;
|
||||
is_meta_addr <= is_meta_addr_next;
|
||||
expects_inline_qos_rcv <= expects_inline_qos_rcv_next;
|
||||
stale_check <= stale_check_next;
|
||||
is_live_assert <= is_live_assert_next;
|
||||
is_heartbeat_res <= is_heartbeat_res_next;
|
||||
|
||||
@ -16,9 +16,6 @@ package rtps_config_package is
|
||||
constant ENTITYID : ENTITYID_TYPE; -- Deferred to Package Body
|
||||
constant DOMAIN_ID : std_logic_vector(DOMAIN_ID_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(USER_DOMAIN_ID, DOMAIN_ID_WIDTH));
|
||||
|
||||
-- Constant for Sequence Number 1
|
||||
constant FIRST_SEQUENCENUMBER : SEQUENCENUMBER_TYPE := convert_to_double_word(to_unsigned(1, 64));
|
||||
|
||||
-- Smallest Writer Endpoint Lease Duration
|
||||
constant MIN_ENDPOINT_LEASE_DURATION : DURATION_TYPE; -- Deferred to package Body
|
||||
|
||||
@ -72,11 +69,13 @@ package rtps_config_package is
|
||||
constant ISI_VIEW_FLAG : natural := 3; -- Reader Only
|
||||
constant ISI_MARK_FLAG : natural := 4; -- Reader Only
|
||||
|
||||
-- TODO: Prefix the Flags with something that differntiates between them
|
||||
-- Remote Endpoint Flags
|
||||
constant EXPECTS_INLINE_QOS_FLAG : natural := 0;
|
||||
constant SEND_HISTORICAL_DATA_FLAG : natural := 1;
|
||||
constant BEST_EFFORT_FLAG : natural := 2;
|
||||
constant READER_FLAGS_WIDTH : natural := 16;
|
||||
constant READER_EXPECTS_INLINE_QOS_FLAG : natural := 0;
|
||||
constant READER_EXPECTS_HISTORICAL_DATA_FLAG : natural := 1;
|
||||
constant READER_IS_BEST_EFFORT_FLAG : natural := 2;
|
||||
constant DEFAULT_EXPECTS_HISTORICAL_DATA_FLAG : std_logic := '0';
|
||||
constant DEFAULT_IS_BEST_EFFORT_FLAG : std_logic := '0';
|
||||
|
||||
-- Marks the Reader Endpoint in the Endpoint Array
|
||||
constant ENDPOINT_READERS : std_logic_vector(0 to NUM_ENDPOINTS-1) := (0 to NUM_READERS-1 => '1', others => '0');
|
||||
|
||||
@ -163,6 +163,7 @@ package rtps_test_package is
|
||||
constant THIS_PARTICIPANT_DATA : PARTICIPANT_DATA_TYPE; -- Deferred to Pckage Body
|
||||
|
||||
type ENDPOINT_DATA_TYPE is record
|
||||
reader : boolean;
|
||||
littleEndian : std_logic;
|
||||
participant : PARTICIPANT_DATA_TYPE;
|
||||
entityId : std_logic_vector(ENTITYID_WIDTH-1 downto 0);
|
||||
@ -187,7 +188,7 @@ package rtps_test_package is
|
||||
time_based_filter : DURATION_TYPE;
|
||||
reliability : std_logic_vector(CDR_ENUMERATION_WIDTH-1 downto 0);
|
||||
max_blocking_time : DURATION_TYPE;
|
||||
transportnpriority : std_logic_vector(CDR_LONG_WIDTH-1 downto 0);
|
||||
transport_priority : std_logic_vector(CDR_LONG_WIDTH-1 downto 0);
|
||||
lifespan : DURATION_TYPE;
|
||||
destination_order : std_logic_vector(CDR_ENUMERATION_WIDTH-1 downto 0);
|
||||
-- Represent Data as Strings (Ease of Use)
|
||||
@ -276,7 +277,7 @@ package body rtps_test_package is
|
||||
|
||||
constant DEFAULT_GUIDPREFIX : GUIDPREFIX_TYPE := (0 => x"da27cc3c", 1 => x"687ddcde", 2 => x"88bce3d1");
|
||||
|
||||
constant DEFAULT_ENTITYID : std_logic_vector(ENTITYID_WIDTH-1 downto 0) := x"b9cbad8d";
|
||||
constant DEFAULT_ENTITYID : std_logic_vector(ENTITYID_WIDTH-1 downto 0) := x"b9cbad04";
|
||||
|
||||
constant EMPTY_TEST_PACKET : TEST_PACKET_TYPE := (length => 0, data => (others => (others => '0')), last => (others => '0'));
|
||||
|
||||
@ -436,6 +437,7 @@ package body rtps_test_package is
|
||||
);
|
||||
|
||||
constant DEFAULT_ENDPOINT_DATA : ENDPOINT_DATA_TYPE := (
|
||||
reader => TRUE,
|
||||
littleEndian => '0',
|
||||
participant => DEFAULT_PARTICIPANT_DATA,
|
||||
entityId => DEFAULT_ENTITYID,
|
||||
@ -460,7 +462,7 @@ package body rtps_test_package is
|
||||
time_based_filter => DEFAULT_TIME_BASED_FILTER_QOS,
|
||||
reliability => DEFAULT_RELIABILTY_QOS,
|
||||
max_blocking_time => DEFAULT_MAX_BLOCKING_TIME,
|
||||
transportnpriority => DEFAULT_TRANSPORT_PRIORITY_QOS,
|
||||
transport_priority => DEFAULT_TRANSPORT_PRIORITY_QOS,
|
||||
lifespan => DEFAULT_LIFESPAN_QOS,
|
||||
destination_order => DEFAULT_DESTINATION_ORDER_QOS,
|
||||
user_data => EMPTY_STRING,
|
||||
@ -639,7 +641,7 @@ package body rtps_test_package is
|
||||
elsif (is_valid_loc(get_loc(ref.participant.defaultMulticastLocatorList))) then
|
||||
return get_loc(ref.participant.defaultMulticastLocatorList);
|
||||
else
|
||||
assert(FALSE) report "Endpoint has no valid Locators" severity FAILURE;
|
||||
assert FALSE report "Endpoint has no valid Locators" severity FAILURE;
|
||||
return EMPTY_LOCATOR;
|
||||
end if;
|
||||
end function;
|
||||
@ -1659,7 +1661,7 @@ package body rtps_test_package is
|
||||
end if;
|
||||
end if;
|
||||
-- TRANSPORT PRIORITY
|
||||
if (ref.transportnpriority /= DEFAULT_TRANSPORT_PRIORITY_QOS or pid = PID_TRANSPORT_PRIORITY) then
|
||||
if (ref.transport_priority /= DEFAULT_TRANSPORT_PRIORITY_QOS or pid = PID_TRANSPORT_PRIORITY) then
|
||||
if (pid = PID_TRANSPORT_PRIORITY) then
|
||||
assert (4+(offset*4) >= 0) report "Parameter Length < 0" severity FAILURE;
|
||||
output.data(output.length) := PID_TRANSPORT_PRIORITY & endian_swap(ref.littleEndian, int(4+(offset*4),PARAMETER_LENGTH_WIDTH));
|
||||
@ -1667,7 +1669,7 @@ package body rtps_test_package is
|
||||
output.data(output.length) := PID_TRANSPORT_PRIORITY & endian_swap(ref.littleEndian, int(4,PARAMETER_LENGTH_WIDTH));
|
||||
end if;
|
||||
output.length := output.length + 1;
|
||||
output.data(output.length) := endian_swap(ref.littleEndian, ref.transportnpriority);
|
||||
output.data(output.length) := endian_swap(ref.littleEndian, ref.transport_priority);
|
||||
output.length := output.length + 1;
|
||||
if (pid = PID_TRANSPORT_PRIORITY) then
|
||||
output.length := output.length + offset;
|
||||
@ -1854,7 +1856,11 @@ package body rtps_test_package is
|
||||
-- Port & expectsInlineQoS
|
||||
output.data(output.length) := (others => '0');
|
||||
output.data(output.length)(WORD_WIDTH-1 downto UDP_PORT_WIDTH) := loc.portn(UDP_PORT_WIDTH-1 downto 0);
|
||||
output.data(output.length)(0) := ref.expectsInlineQoS(0);
|
||||
if (ref.reader) then
|
||||
output.data(output.length)(READER_EXPECTS_INLINE_QOS_FLAG) := ref.expectsInlineQoS(0);
|
||||
output.data(output.length)(READER_EXPECTS_HISTORICAL_DATA_FLAG) := '0' when (ref.durability = VOLATILE_DURABILITY_QOS) else '1';
|
||||
output.data(output.length)(READER_IS_BEST_EFFORT_FLAG) := '1' when (ref.reliability = BEST_EFFORT_RELIABILITY_QOS) else '0';
|
||||
end if;
|
||||
output.length := output.length + 1;
|
||||
end if;
|
||||
|
||||
@ -1900,6 +1906,7 @@ package body rtps_test_package is
|
||||
begin
|
||||
if (readers) then
|
||||
for i in 0 to NUM_READERS-1 loop
|
||||
ret_readers(i).reader := TRUE;
|
||||
ret_readers(i).topic_name := ENDPOINT_TOPIC(i);
|
||||
ret_readers(i).type_name := ENDPOINT_TYPE(i);
|
||||
ret_readers(i).durability := ENDPOINT_DURABILITY_QOS(i);
|
||||
@ -1921,7 +1928,7 @@ package body rtps_test_package is
|
||||
ret_readers(i).time_based_filter := ENDPOINT_TIME_BASED_FILTER_QOS(i);
|
||||
ret_readers(i).reliability := ENDPOINT_RELIABILITY_QOS(i);
|
||||
ret_readers(i).max_blocking_time := ENDPOINT_MAX_BLOCKING_TIME(i);
|
||||
ret_readers(i).transportnpriority := ENDPOINT_TRANSPORT_PRIORITY_QOS(i);
|
||||
ret_readers(i).transport_priority := ENDPOINT_TRANSPORT_PRIORITY_QOS(i);
|
||||
ret_readers(i).lifespan := ENDPOINT_LIFESPAN_QOS(i);
|
||||
ret_readers(i).destination_order := ENDPOINT_DESTINATION_ORDER_QOS(i);
|
||||
ret_readers(i).expectsInlineQoS(0) := '1';
|
||||
@ -1931,6 +1938,7 @@ package body rtps_test_package is
|
||||
return ret_readers;
|
||||
else
|
||||
for i in NUM_READERS to NUM_ENDPOINTS-1 loop
|
||||
ret_writers(i-NUM_READERS).reader := FALSE;
|
||||
ret_writers(i-NUM_READERS).topic_name := ENDPOINT_TOPIC(i);
|
||||
ret_writers(i-NUM_READERS).type_name := ENDPOINT_TYPE(i);
|
||||
ret_writers(i-NUM_READERS).durability := ENDPOINT_DURABILITY_QOS(i);
|
||||
@ -1952,7 +1960,7 @@ package body rtps_test_package is
|
||||
ret_writers(i-NUM_READERS).time_based_filter := ENDPOINT_TIME_BASED_FILTER_QOS(i);
|
||||
ret_writers(i-NUM_READERS).reliability := ENDPOINT_RELIABILITY_QOS(i);
|
||||
ret_writers(i-NUM_READERS).max_blocking_time := ENDPOINT_MAX_BLOCKING_TIME(i);
|
||||
ret_writers(i-NUM_READERS).transportnpriority := ENDPOINT_TRANSPORT_PRIORITY_QOS(i);
|
||||
ret_writers(i-NUM_READERS).transport_priority := ENDPOINT_TRANSPORT_PRIORITY_QOS(i);
|
||||
ret_writers(i-NUM_READERS).lifespan := ENDPOINT_LIFESPAN_QOS(i);
|
||||
ret_writers(i-NUM_READERS).destination_order := ENDPOINT_DESTINATION_ORDER_QOS(i);
|
||||
ret_writers(i-NUM_READERS).participant := THIS_PARTICIPANT_DATA;
|
||||
|
||||
@ -698,7 +698,7 @@ begin
|
||||
mem_op_start <= '1';
|
||||
mem_opcode <= INSERT_ENDPOINT;
|
||||
|
||||
if (RELIABILTY_QOS = RELIABLE_RELIABILITY_QOS and LEASE_DURATION /= DURATION_INFINITE and reader_flags(BEST_EFFORT_FLAG) = '0') then
|
||||
if (RELIABILTY_QOS = RELIABLE_RELIABILITY_QOS and LEASE_DURATION /= DURATION_INFINITE and reader_flags(READER_IS_BEST_EFFORT_FLAG) = '0') then
|
||||
lease_deadline <= time + LEASE_DURATION;
|
||||
|
||||
-- XXX: Possible Worst Case Path (64-bit addition and comparison in same clock)
|
||||
@ -710,10 +710,10 @@ begin
|
||||
lease_deadline <= TIME_INVALID;
|
||||
end if;
|
||||
-- Initialize ACK Sequence Number
|
||||
seq_nr <= SEQUENCENUMBER_UNKNOWN when (reader_flags(BEST_EFFORT_FLAG) = '1') else (others => (others => '0'));
|
||||
seq_nr <= SEQUENCENUMBER_UNKNOWN when (reader_flags(READER_IS_BEST_EFFORT_FLAG) = '1') else (others => (others => '0'));
|
||||
|
||||
-- Reader needs Historical Data
|
||||
if (DURABILITY_QOS /= VOLATILE_DURABILITY_QOS and reader_flags(SEND_HISTORICAL_DATA_FLAG) = '1') then
|
||||
if (DURABILITY_QOS /= VOLATILE_DURABILITY_QOS and reader_flags(READER_EXPECTS_HISTORICAL_DATA_FLAG) = '1') then
|
||||
-- Send Historical Data
|
||||
historical_push_next <= '1';
|
||||
|
||||
@ -1525,7 +1525,7 @@ begin
|
||||
else
|
||||
next_seq_nr_next <= next_seq_nr + 1;
|
||||
-- If remote Reader is RELIABLE, NACK the SN
|
||||
cnt_next <= (cnt + 1) when (RELIABILTY_QOS = RELIABLE_RELIABILITY_QOS and reader_flags(BEST_EFFORT_FLAG) = '0') else (cnt + 2);
|
||||
cnt_next <= (cnt + 1) when (RELIABILTY_QOS = RELIABLE_RELIABILITY_QOS and reader_flags(READER_IS_BEST_EFFORT_FLAG) = '0') else (cnt + 2);
|
||||
end if;
|
||||
-- NACK SN
|
||||
when 1 =>
|
||||
@ -1597,7 +1597,7 @@ begin
|
||||
next_seq_nr_next <= min_sn;
|
||||
cnt_next <= cnt + 2; -- Skip Increment
|
||||
-- If remote Reader is RELIABLE, NACK the SN
|
||||
cnt_next <= 1 when (RELIABILTY_QOS = RELIABLE_RELIABILITY_QOS and reader_flags(BEST_EFFORT_FLAG) = '0') else 2;
|
||||
cnt_next <= 1 when (RELIABILTY_QOS = RELIABLE_RELIABILITY_QOS and reader_flags(READER_IS_BEST_EFFORT_FLAG) = '0') else 2;
|
||||
end if;
|
||||
when others =>
|
||||
null;
|
||||
@ -1675,7 +1675,7 @@ begin
|
||||
data_out_rtps <= SID_DATA & "00000000" & std_logic_vector(to_unsigned(0, SUBMESSAGE_LENGTH_WIDTH));
|
||||
data_flag <= '1' when (cc_kind = ALIVE) else '0';
|
||||
key_flag <= '1' when (WITH_KEY and cc_kind /= ALIVE) else '0';
|
||||
qos_flag <= '1' when (cc_kind /= ALIVE or WITH_KEY or mem_endpoint_data.flags(EXPECTS_INLINE_QOS_FLAG) = '1') else '0';
|
||||
qos_flag <= '1' when (cc_kind /= ALIVE or WITH_KEY or mem_endpoint_data.flags(READER_EXPECTS_INLINE_QOS_FLAG) = '1') else '0';
|
||||
cnt_next <= cnt + 1;
|
||||
-- extraFlags, octetsToInlineQoS
|
||||
when 1 =>
|
||||
@ -1709,7 +1709,7 @@ begin
|
||||
elsif (cc_kind /= ALIVE) then
|
||||
cnt_next <= cnt + 5;
|
||||
-- Reader expect in-line QoS
|
||||
elsif(mem_endpoint_data.flags(EXPECTS_INLINE_QOS_FLAG) = '1') then
|
||||
elsif(mem_endpoint_data.flags(READER_EXPECTS_INLINE_QOS_FLAG) = '1') then
|
||||
stage_next <= SEND_INLINE_QOS;
|
||||
cnt3_next <= 0;
|
||||
-- Payload Available (DATA or Serialized Key)
|
||||
@ -1768,7 +1768,7 @@ begin
|
||||
if (cc_kind /= ALIVE) then
|
||||
cnt_next <= cnt + 1;
|
||||
-- Reader expects in-line QoS
|
||||
elsif (mem_endpoint_data.flags(EXPECTS_INLINE_QOS_FLAG) = '1') then
|
||||
elsif (mem_endpoint_data.flags(READER_EXPECTS_INLINE_QOS_FLAG) = '1') then
|
||||
stage_next <= SEND_INLINE_QOS;
|
||||
cnt3_next <= 0;
|
||||
else
|
||||
@ -1791,7 +1791,7 @@ begin
|
||||
end case;
|
||||
|
||||
-- Reader expects in-line QoS
|
||||
if (mem_endpoint_data.flags(EXPECTS_INLINE_QOS_FLAG) = '1') then
|
||||
if (mem_endpoint_data.flags(READER_EXPECTS_INLINE_QOS_FLAG) = '1') then
|
||||
stage_next <= SEND_INLINE_QOS;
|
||||
cnt3_next <= 0;
|
||||
else
|
||||
|
||||
Loading…
Reference in New Issue
Block a user