* Re-design rtps_handler
- Input format is now a decoded UDP Packet (Documented in REF.txt) This allows the whole RTPS system to use universal input and output.
This commit is contained in:
parent
533b50f0f9
commit
c1bb9a7bd2
21
src/REF.txt
21
src/REF.txt
@ -61,14 +61,31 @@ Optional features may not be supported by all RTPS implementations.
|
||||
ENTITYID_UKNOWN also for Built-In?
|
||||
Ignore Participant/Topic/Publication/Subscription (handle argument of Sampleinfo)
|
||||
|
||||
|
||||
|
||||
ENDIANNESS
|
||||
==========
|
||||
You have to see what datatypes PSM maps to each element.
|
||||
If the datatype is bigger than a byte, byte swaping has to occur.
|
||||
The elements of an array are in order (but the elements themselves may need to be swapped if bigger than a Byte)
|
||||
|
||||
RTPS IN/OUT FORMAT
|
||||
==================
|
||||
|
||||
31............24..............16..............8...............0
|
||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
+-------------------------------------------------------------+
|
||||
| SRC_IPv4_ADDR |
|
||||
+-------------------------------------------------------------+
|
||||
| DEST_IPv4_ADDR |
|
||||
+-----------------------------+-------------------------------+
|
||||
| SRC_UDP_PORT | DEST_UDP_PORT |
|
||||
+-----------------------------+-------------------------------+
|
||||
| PACKET_LENGTH |
|
||||
+-------------------------------------------------------------+
|
||||
| |
|
||||
~ PACKET ~
|
||||
| |
|
||||
+-------------------------------------------------------------+
|
||||
|
||||
ENDPOINT FIFO PACKET FORMAT
|
||||
===========================
|
||||
|
||||
|
||||
@ -150,8 +150,8 @@ begin
|
||||
variable check_cnt : natural := 0;
|
||||
variable RV : RandomPType;
|
||||
variable RAND_DATA : TEST_PACKET_TYPE := EMPTY_TEST_PACKET;
|
||||
variable UDP_META : UDP_HEADER_TYPE;
|
||||
variable UDP_USER : UDP_HEADER_TYPE;
|
||||
variable UDP_META : OUTPUT_HEADER_TYPE;
|
||||
variable UDP_USER : OUTPUT_HEADER_TYPE;
|
||||
|
||||
-- Wrapper to use procedure as function
|
||||
impure function gen_rand_loc_2 return LOCATOR_TYPE is
|
||||
@ -205,13 +205,13 @@ begin
|
||||
-- *RTPS HEADER*
|
||||
Log("Sending invalid RTPS Header [Packet Size to small]", INFO);
|
||||
-- UDP Header
|
||||
gen_udp_header(UDP_META, stimulus);
|
||||
gen_output_header(UDP_META, stimulus);
|
||||
-- RTPS Header [RTPS Header Length > PacketSize]
|
||||
rtps_header := DEFAULT_RTPS_HEADER;
|
||||
gen_rtps_header(rtps_header, stimulus);
|
||||
stimulus.length := stimulus.length-1;
|
||||
-- Finalize Packet
|
||||
fix_udp_packet(stimulus);
|
||||
fix_output_packet(stimulus);
|
||||
start_test;
|
||||
wait_on_complete;
|
||||
check_cnt := check_cnt + reference.length;
|
||||
@ -220,7 +220,7 @@ begin
|
||||
|
||||
Log("Sending invalid RTPS Header [Protocol Missmatch]", INFO);
|
||||
-- UDP Header
|
||||
gen_udp_header(UDP_META, stimulus);
|
||||
gen_output_header(UDP_META, stimulus);
|
||||
-- RTPS Header [Incompatible Protocol]
|
||||
rtps_header := DEFAULT_RTPS_HEADER;
|
||||
rtps_header.protocol := RV.RandSlv(PROTOCOL_WIDTH);
|
||||
@ -229,7 +229,7 @@ begin
|
||||
gen_rtps_submessage(rtps_data, stimulus);
|
||||
rtps_data.writerSN := rtps_data.writerSN + 1;
|
||||
-- Finalize Packet
|
||||
fix_udp_packet(stimulus);
|
||||
fix_output_packet(stimulus);
|
||||
start_test;
|
||||
wait_on_complete;
|
||||
check_cnt := check_cnt + reference.length;
|
||||
@ -238,7 +238,7 @@ begin
|
||||
|
||||
Log("Sending invalid RTPS Header [Protocol Major Version Missmatch]", INFO);
|
||||
-- UDP Header
|
||||
gen_udp_header(UDP_META, stimulus);
|
||||
gen_output_header(UDP_META, stimulus);
|
||||
-- RTPS Header [Incompatible Version]
|
||||
rtps_header := DEFAULT_RTPS_HEADER;
|
||||
rtps_header.version := PROTOCOLVERSION_1_0;
|
||||
@ -247,7 +247,7 @@ begin
|
||||
gen_rtps_submessage(rtps_data, stimulus);
|
||||
rtps_data.writerSN := rtps_data.writerSN + 1;
|
||||
-- Finalize Packet
|
||||
fix_udp_packet(stimulus);
|
||||
fix_output_packet(stimulus);
|
||||
start_test;
|
||||
wait_on_complete;
|
||||
check_cnt := check_cnt + reference.length;
|
||||
@ -260,7 +260,7 @@ begin
|
||||
-- *DATA SUBMESSAGE*
|
||||
Log("Sending valid DATA [Empty Submessage]", INFO);
|
||||
-- UDP Header
|
||||
gen_udp_header(UDP_META, stimulus);
|
||||
gen_output_header(UDP_META, stimulus);
|
||||
-- RTPS Header
|
||||
gen_rtps_header(rtps_header, stimulus);
|
||||
-- Valid DATA [Empty DATA] (Dropped)
|
||||
@ -269,7 +269,7 @@ begin
|
||||
rtps_sub.writerId := DEFAULT_ENTITYID;
|
||||
gen_rtps_submessage(rtps_sub, stimulus);
|
||||
-- Finalize Packet
|
||||
fix_udp_packet(stimulus);
|
||||
fix_output_packet(stimulus);
|
||||
start_test;
|
||||
wait_on_complete;
|
||||
check_cnt := check_cnt + reference.length;
|
||||
@ -278,7 +278,7 @@ begin
|
||||
|
||||
Log("Sending valid DATA [Meta Traffic, Both Endianness]", INFO);
|
||||
-- UDP Header
|
||||
gen_udp_header(UDP_META, stimulus);
|
||||
gen_output_header(UDP_META, stimulus);
|
||||
-- RTPS Header
|
||||
gen_rtps_header(rtps_header, stimulus);
|
||||
-- Valid DATA [META Traffic, Big Endian] (Expected)
|
||||
@ -294,7 +294,7 @@ begin
|
||||
gen_rtps_submessage(rtps_sub, stimulus);
|
||||
gen_rtps_handler_out(rtps_sub, UDP_META.src, TRUE, TIME_INVALID, rtps_header.guidPrefix, reference);
|
||||
-- Finalize Packet
|
||||
fix_udp_packet(stimulus);
|
||||
fix_output_packet(stimulus);
|
||||
start_test;
|
||||
wait_on_complete;
|
||||
check_cnt := check_cnt + reference.length;
|
||||
@ -303,7 +303,7 @@ begin
|
||||
|
||||
Log("Sending valid DATA [User Traffic]", INFO);
|
||||
-- UDP Header
|
||||
gen_udp_header(UDP_USER, stimulus);
|
||||
gen_output_header(UDP_USER, stimulus);
|
||||
-- RTPS Header
|
||||
gen_rtps_header(rtps_header, stimulus);
|
||||
-- Valid DATA [USER Traffic, Big Endian] (Expected)
|
||||
@ -315,7 +315,7 @@ begin
|
||||
gen_rtps_submessage(rtps_sub, stimulus);
|
||||
gen_rtps_handler_out(rtps_sub, UDP_USER.src, FALSE, TIME_INVALID, rtps_header.guidPrefix, reference);
|
||||
-- Finalize Packet
|
||||
fix_udp_packet(stimulus);
|
||||
fix_output_packet(stimulus);
|
||||
start_test;
|
||||
wait_on_complete;
|
||||
check_cnt := check_cnt + reference.length;
|
||||
@ -324,7 +324,7 @@ begin
|
||||
|
||||
Log("Sending valid DATA [Extra Header Bytes]", INFO);
|
||||
-- UDP Header
|
||||
gen_udp_header(UDP_META, stimulus);
|
||||
gen_output_header(UDP_META, stimulus);
|
||||
-- RTPS Header
|
||||
gen_rtps_header(rtps_header, stimulus);
|
||||
-- Valid DATA [+7 Unknown Header Bytes] (Expected)
|
||||
@ -337,7 +337,7 @@ begin
|
||||
gen_rtps_submessage(rtps_sub, stimulus);
|
||||
gen_rtps_handler_out(rtps_sub, UDP_META.src, TRUE, TIME_INVALID, rtps_header.guidPrefix, reference);
|
||||
-- Finalize Packet
|
||||
fix_udp_packet(stimulus);
|
||||
fix_output_packet(stimulus);
|
||||
start_test;
|
||||
wait_on_complete;
|
||||
check_cnt := check_cnt + reference.length;
|
||||
@ -346,7 +346,7 @@ begin
|
||||
|
||||
Log("Sending invalid DATA [DATA and KEY Flag set]", INFO);
|
||||
-- UDP Header
|
||||
gen_udp_header(UDP_META, stimulus);
|
||||
gen_output_header(UDP_META, stimulus);
|
||||
-- RTPS Header
|
||||
gen_rtps_header(rtps_header, stimulus);
|
||||
-- Valid DATA [Invalid Flags] (Dropped)
|
||||
@ -362,7 +362,7 @@ begin
|
||||
gen_rtps_handler_out(rtps_data, UDP_META.src, TRUE, TIME_INVALID, rtps_header.guidPrefix, reference);
|
||||
rtps_data.writerSN := rtps_data.writerSN + 1;
|
||||
-- Finalize Packet
|
||||
fix_udp_packet(stimulus);
|
||||
fix_output_packet(stimulus);
|
||||
start_test;
|
||||
wait_on_complete;
|
||||
check_cnt := check_cnt + reference.length;
|
||||
@ -371,7 +371,7 @@ begin
|
||||
|
||||
Log("Sending invalid DATA [Packet Size too small]", INFO);
|
||||
-- UDP Header
|
||||
gen_udp_header(UDP_META, stimulus);
|
||||
gen_output_header(UDP_META, stimulus);
|
||||
-- RTPS Header
|
||||
gen_rtps_header(rtps_header, stimulus);
|
||||
-- Valid DATA [SubLength > PackeSize] (Dropped)
|
||||
@ -383,7 +383,7 @@ begin
|
||||
gen_rtps_submessage(rtps_sub, stimulus);
|
||||
stimulus.length := stimulus.length-1;
|
||||
-- Finalize Packet
|
||||
fix_udp_packet(stimulus);
|
||||
fix_output_packet(stimulus);
|
||||
start_test;
|
||||
wait_on_complete;
|
||||
check_cnt := check_cnt + reference.length;
|
||||
@ -392,7 +392,7 @@ begin
|
||||
|
||||
Log("Sending invalid DATA [Submessage Length too small]", INFO);
|
||||
-- UDP Header
|
||||
gen_udp_header(UDP_META, stimulus);
|
||||
gen_output_header(UDP_META, stimulus);
|
||||
-- RTPS Header
|
||||
gen_rtps_header(rtps_header, stimulus);
|
||||
-- Valid DATA [SubLength invalid] (Dropped)
|
||||
@ -407,7 +407,7 @@ begin
|
||||
gen_rtps_submessage(rtps_data, stimulus);
|
||||
rtps_data.writerSN := rtps_data.writerSN + 1;
|
||||
-- Finalize Packet
|
||||
fix_udp_packet(stimulus);
|
||||
fix_output_packet(stimulus);
|
||||
start_test;
|
||||
wait_on_complete;
|
||||
check_cnt := check_cnt + reference.length;
|
||||
@ -416,7 +416,7 @@ begin
|
||||
|
||||
Log("Sending invalid DATA [Invalid writerSN]", INFO);
|
||||
-- UDP Header
|
||||
gen_udp_header(UDP_META, stimulus);
|
||||
gen_output_header(UDP_META, stimulus);
|
||||
-- RTPS Header
|
||||
gen_rtps_header(rtps_header, stimulus);
|
||||
-- Valid DATA [Invalid writerSN] (Dropped)
|
||||
@ -431,7 +431,7 @@ begin
|
||||
gen_rtps_submessage(rtps_data, stimulus);
|
||||
rtps_data.writerSN := rtps_data.writerSN + 1;
|
||||
-- Finalize Packet
|
||||
fix_udp_packet(stimulus);
|
||||
fix_output_packet(stimulus);
|
||||
start_test;
|
||||
wait_on_complete;
|
||||
check_cnt := check_cnt + reference.length;
|
||||
@ -442,7 +442,7 @@ begin
|
||||
-- *ACKNACK SUBMESSAGE*
|
||||
Log("Sending valid ACKNACK [Meta Traffic, Both Endianness]", INFO);
|
||||
-- UDP Header
|
||||
gen_udp_header(UDP_META, stimulus);
|
||||
gen_output_header(UDP_META, stimulus);
|
||||
-- RTPS Header
|
||||
gen_rtps_header(rtps_header, stimulus);
|
||||
-- Valid ACKNACK [META Traffic, Big Endian] (Expected)
|
||||
@ -456,7 +456,7 @@ begin
|
||||
gen_rtps_submessage(rtps_sub, stimulus);
|
||||
gen_rtps_handler_out(rtps_sub, UDP_META.src, TRUE, TIME_INVALID, rtps_header.guidPrefix, reference);
|
||||
-- Finalize Packet
|
||||
fix_udp_packet(stimulus);
|
||||
fix_output_packet(stimulus);
|
||||
start_test;
|
||||
wait_on_complete;
|
||||
check_cnt := check_cnt + reference.length;
|
||||
@ -465,7 +465,7 @@ begin
|
||||
|
||||
Log("Sending valid ACKNACK [User Traffic]", INFO);
|
||||
-- UDP Header
|
||||
gen_udp_header(UDP_USER, stimulus);
|
||||
gen_output_header(UDP_USER, stimulus);
|
||||
-- RTPS Header
|
||||
gen_rtps_header(rtps_header, stimulus);
|
||||
-- Valid ACKNACK [USER Traffic, Big Endian] (Expected)
|
||||
@ -475,7 +475,7 @@ begin
|
||||
gen_rtps_submessage(rtps_sub, stimulus);
|
||||
gen_rtps_handler_out(rtps_sub, UDP_USER.src, FALSE, TIME_INVALID, rtps_header.guidPrefix, reference);
|
||||
-- Finalize Packet
|
||||
fix_udp_packet(stimulus);
|
||||
fix_output_packet(stimulus);
|
||||
start_test;
|
||||
wait_on_complete;
|
||||
check_cnt := check_cnt + reference.length;
|
||||
@ -484,7 +484,7 @@ begin
|
||||
|
||||
Log("Sending invalid ACKNACK [Packet Size too small]", INFO);
|
||||
-- UDP Header
|
||||
gen_udp_header(UDP_META, stimulus);
|
||||
gen_output_header(UDP_META, stimulus);
|
||||
-- RTPS Header
|
||||
gen_rtps_header(rtps_header, stimulus);
|
||||
-- Invalid ACKNACK [SubLength > PacketSize] (Dropped)
|
||||
@ -494,7 +494,7 @@ begin
|
||||
gen_rtps_submessage(rtps_sub, stimulus);
|
||||
stimulus.length := stimulus.length-1;
|
||||
-- Finalize Packet
|
||||
fix_udp_packet(stimulus);
|
||||
fix_output_packet(stimulus);
|
||||
start_test;
|
||||
wait_on_complete;
|
||||
check_cnt := check_cnt + reference.length;
|
||||
@ -503,7 +503,7 @@ begin
|
||||
|
||||
Log("Sending invalid ACKNACK [Submessage Length too small]", INFO);
|
||||
-- UDP Header
|
||||
gen_udp_header(UDP_META, stimulus);
|
||||
gen_output_header(UDP_META, stimulus);
|
||||
-- RTPS Header
|
||||
gen_rtps_header(rtps_header, stimulus);
|
||||
-- Invalid ACKNACK [SubLength invalid] (Dropped)
|
||||
@ -516,7 +516,7 @@ begin
|
||||
gen_rtps_submessage(rtps_data, stimulus);
|
||||
rtps_data.writerSN := rtps_data.writerSN + 1;
|
||||
-- Finalize Packet
|
||||
fix_udp_packet(stimulus);
|
||||
fix_output_packet(stimulus);
|
||||
start_test;
|
||||
wait_on_complete;
|
||||
check_cnt := check_cnt + reference.length;
|
||||
@ -525,7 +525,7 @@ begin
|
||||
|
||||
Log("Sending invalid ACKNACK [ReaderSNState invalid (Base invalid)]", INFO);
|
||||
-- UDP Header
|
||||
gen_udp_header(UDP_META, stimulus);
|
||||
gen_output_header(UDP_META, stimulus);
|
||||
-- RTPS Header
|
||||
gen_rtps_header(rtps_header, stimulus);
|
||||
-- Invalid ACKNACK [readerSNState invalid (Base Invalid)] (Dropped)
|
||||
@ -538,7 +538,7 @@ begin
|
||||
gen_rtps_submessage(rtps_data, stimulus);
|
||||
rtps_data.writerSN := rtps_data.writerSN + 1;
|
||||
-- Finalize Packet
|
||||
fix_udp_packet(stimulus);
|
||||
fix_output_packet(stimulus);
|
||||
start_test;
|
||||
wait_on_complete;
|
||||
check_cnt := check_cnt + reference.length;
|
||||
@ -547,7 +547,7 @@ begin
|
||||
|
||||
Log("Sending invalid ACKNACK [ReaderSNState invalid (NumBits invalid)]", INFO);
|
||||
-- UDP Header
|
||||
gen_udp_header(UDP_META, stimulus);
|
||||
gen_output_header(UDP_META, stimulus);
|
||||
-- RTPS Header
|
||||
gen_rtps_header(rtps_header, stimulus);
|
||||
-- Invalid ACKNACK [readerSNState invalid (NumBits Invalid)] (Dropped)
|
||||
@ -560,7 +560,7 @@ begin
|
||||
gen_rtps_submessage(rtps_data, stimulus);
|
||||
rtps_data.writerSN := rtps_data.writerSN + 1;
|
||||
-- Finalize Packet
|
||||
fix_udp_packet(stimulus);
|
||||
fix_output_packet(stimulus);
|
||||
start_test;
|
||||
wait_on_complete;
|
||||
check_cnt := check_cnt + reference.length;
|
||||
@ -570,7 +570,7 @@ begin
|
||||
-- *GAP SUBMESSAGE*
|
||||
Log("Sending valid GAP [Meta Traffic, Both Endianness]", INFO);
|
||||
-- UDP Header
|
||||
gen_udp_header(UDP_META, stimulus);
|
||||
gen_output_header(UDP_META, stimulus);
|
||||
-- RTPS Header
|
||||
gen_rtps_header(rtps_header, stimulus);
|
||||
-- Valid GAP [META Traffic, Big Endian]
|
||||
@ -584,7 +584,7 @@ begin
|
||||
gen_rtps_submessage(rtps_sub, stimulus);
|
||||
gen_rtps_handler_out(rtps_sub, UDP_META.src, TRUE, TIME_INVALID, rtps_header.guidPrefix, reference);
|
||||
-- Finalize Packet
|
||||
fix_udp_packet(stimulus);
|
||||
fix_output_packet(stimulus);
|
||||
start_test;
|
||||
wait_on_complete;
|
||||
check_cnt := check_cnt + reference.length;
|
||||
@ -593,7 +593,7 @@ begin
|
||||
|
||||
Log("Sending valid GAP [User Traffic]", INFO);
|
||||
-- UDP Header
|
||||
gen_udp_header(UDP_USER, stimulus);
|
||||
gen_output_header(UDP_USER, stimulus);
|
||||
-- RTPS Header
|
||||
gen_rtps_header(rtps_header, stimulus);
|
||||
-- Valid GAP [User Traffic, Big Endian]
|
||||
@ -603,7 +603,7 @@ begin
|
||||
gen_rtps_submessage(rtps_sub, stimulus);
|
||||
gen_rtps_handler_out(rtps_sub, UDP_USER.src, FALSE, TIME_INVALID, rtps_header.guidPrefix, reference);
|
||||
-- Finalize Packet
|
||||
fix_udp_packet(stimulus);
|
||||
fix_output_packet(stimulus);
|
||||
start_test;
|
||||
wait_on_complete;
|
||||
check_cnt := check_cnt + reference.length;
|
||||
@ -612,7 +612,7 @@ begin
|
||||
|
||||
Log("Sending invalid GAP [Packet Size too small]", INFO);
|
||||
-- UDP Header
|
||||
gen_udp_header(UDP_META, stimulus);
|
||||
gen_output_header(UDP_META, stimulus);
|
||||
-- RTPS Header
|
||||
gen_rtps_header(rtps_header, stimulus);
|
||||
-- Invalid GAP [SubLength > PacketSize] (Dropped)
|
||||
@ -622,7 +622,7 @@ begin
|
||||
gen_rtps_submessage(rtps_sub, stimulus);
|
||||
stimulus.length := stimulus.length-1;
|
||||
-- Finalize Packet
|
||||
fix_udp_packet(stimulus);
|
||||
fix_output_packet(stimulus);
|
||||
start_test;
|
||||
wait_on_complete;
|
||||
check_cnt := check_cnt + reference.length;
|
||||
@ -631,7 +631,7 @@ begin
|
||||
|
||||
Log("Sending invalid GAP [Submessage Length too small]", INFO);
|
||||
-- UDP Header
|
||||
gen_udp_header(UDP_META, stimulus);
|
||||
gen_output_header(UDP_META, stimulus);
|
||||
-- RTPS Header
|
||||
gen_rtps_header(rtps_header, stimulus);
|
||||
-- Invalid GAP [SubLength invalid] (Dropped)
|
||||
@ -644,7 +644,7 @@ begin
|
||||
gen_rtps_submessage(rtps_data, stimulus);
|
||||
rtps_data.writerSN := rtps_data.writerSN + 1;
|
||||
-- Finalize Packet
|
||||
fix_udp_packet(stimulus);
|
||||
fix_output_packet(stimulus);
|
||||
start_test;
|
||||
wait_on_complete;
|
||||
check_cnt := check_cnt + reference.length;
|
||||
@ -653,7 +653,7 @@ begin
|
||||
|
||||
Log("Sending invalid GAP [GapStart invalid]", INFO);
|
||||
-- UDP Header
|
||||
gen_udp_header(UDP_META, stimulus);
|
||||
gen_output_header(UDP_META, stimulus);
|
||||
-- RTPS Header
|
||||
gen_rtps_header(rtps_header, stimulus);
|
||||
-- Invalid GAP [GapStart invalid] (Dropped)
|
||||
@ -666,7 +666,7 @@ begin
|
||||
gen_rtps_submessage(rtps_data, stimulus);
|
||||
rtps_data.writerSN := rtps_data.writerSN + 1;
|
||||
-- Finalize Packet
|
||||
fix_udp_packet(stimulus);
|
||||
fix_output_packet(stimulus);
|
||||
start_test;
|
||||
wait_on_complete;
|
||||
check_cnt := check_cnt + reference.length;
|
||||
@ -675,7 +675,7 @@ begin
|
||||
|
||||
Log("Sending invalid GAP [GapList invalid (Base invalid)]", INFO);
|
||||
-- UDP Header
|
||||
gen_udp_header(UDP_META, stimulus);
|
||||
gen_output_header(UDP_META, stimulus);
|
||||
-- RTPS Header
|
||||
gen_rtps_header(rtps_header, stimulus);
|
||||
-- Invalid GAP [GapList invalid (Base invalid)] (Dropped)
|
||||
@ -688,7 +688,7 @@ begin
|
||||
gen_rtps_submessage(rtps_data, stimulus);
|
||||
rtps_data.writerSN := rtps_data.writerSN + 1;
|
||||
-- Finalize Packet
|
||||
fix_udp_packet(stimulus);
|
||||
fix_output_packet(stimulus);
|
||||
start_test;
|
||||
wait_on_complete;
|
||||
check_cnt := check_cnt + reference.length;
|
||||
@ -697,7 +697,7 @@ begin
|
||||
|
||||
Log("Sending invalid GAP [GapList invalid (NumBits invalid)]", INFO);
|
||||
-- UDP Header
|
||||
gen_udp_header(UDP_META, stimulus);
|
||||
gen_output_header(UDP_META, stimulus);
|
||||
-- RTPS Header
|
||||
gen_rtps_header(rtps_header, stimulus);
|
||||
-- Invalid GAP [GapList invalid (NumBits invalid)] (Dropped)
|
||||
@ -710,7 +710,7 @@ begin
|
||||
gen_rtps_submessage(rtps_data, stimulus);
|
||||
rtps_data.writerSN := rtps_data.writerSN + 1;
|
||||
-- Finalize Packet
|
||||
fix_udp_packet(stimulus);
|
||||
fix_output_packet(stimulus);
|
||||
start_test;
|
||||
wait_on_complete;
|
||||
check_cnt := check_cnt + reference.length;
|
||||
@ -721,7 +721,7 @@ begin
|
||||
-- *HEARTBEAT SUBMESSAGE*
|
||||
Log("Sending valid HEARTBEAT [Meta Traffic, Both Endianness]", INFO);
|
||||
-- UDP Header
|
||||
gen_udp_header(UDP_META, stimulus);
|
||||
gen_output_header(UDP_META, stimulus);
|
||||
-- RTPS Header
|
||||
gen_rtps_header(rtps_header, stimulus);
|
||||
-- Valid HEARTBEAT [META Traffic, Big Endian] (Expected)
|
||||
@ -735,7 +735,7 @@ begin
|
||||
gen_rtps_submessage(rtps_sub, stimulus);
|
||||
gen_rtps_handler_out(rtps_sub, UDP_META.src, TRUE, TIME_INVALID, rtps_header.guidPrefix, reference);
|
||||
-- Finalize Packet
|
||||
fix_udp_packet(stimulus);
|
||||
fix_output_packet(stimulus);
|
||||
start_test;
|
||||
wait_on_complete;
|
||||
check_cnt := check_cnt + reference.length;
|
||||
@ -744,7 +744,7 @@ begin
|
||||
|
||||
Log("Sending valid HEARTBEAT [User Traffic]", INFO);
|
||||
-- UDP Header
|
||||
gen_udp_header(UDP_USER, stimulus);
|
||||
gen_output_header(UDP_USER, stimulus);
|
||||
-- RTPS Header
|
||||
gen_rtps_header(rtps_header, stimulus);
|
||||
-- Valid HEARTBEAT [USER Traffic, Big Endian] (Expected)
|
||||
@ -754,7 +754,7 @@ begin
|
||||
gen_rtps_submessage(rtps_sub, stimulus);
|
||||
gen_rtps_handler_out(rtps_sub, UDP_USER.src, FALSE, TIME_INVALID, rtps_header.guidPrefix, reference);
|
||||
-- Finalize Packet
|
||||
fix_udp_packet(stimulus);
|
||||
fix_output_packet(stimulus);
|
||||
start_test;
|
||||
wait_on_complete;
|
||||
check_cnt := check_cnt + reference.length;
|
||||
@ -763,7 +763,7 @@ begin
|
||||
|
||||
Log("Sending invalid HEARTBEAT [Packet Size too small]", INFO);
|
||||
-- UDP Header
|
||||
gen_udp_header(UDP_META, stimulus);
|
||||
gen_output_header(UDP_META, stimulus);
|
||||
-- RTPS Header
|
||||
gen_rtps_header(rtps_header, stimulus);
|
||||
-- Invalid HEARTBEAT [SubLength > PackeSize] (Dropped)
|
||||
@ -773,7 +773,7 @@ begin
|
||||
gen_rtps_submessage(rtps_sub, stimulus);
|
||||
stimulus.length := stimulus.length-1;
|
||||
-- Finalize Packet
|
||||
fix_udp_packet(stimulus);
|
||||
fix_output_packet(stimulus);
|
||||
start_test;
|
||||
wait_on_complete;
|
||||
check_cnt := check_cnt + reference.length;
|
||||
@ -782,7 +782,7 @@ begin
|
||||
|
||||
Log("Sending invalid HEARTBEAT [Submessage Length too small]", INFO);
|
||||
-- UDP Header
|
||||
gen_udp_header(UDP_META, stimulus);
|
||||
gen_output_header(UDP_META, stimulus);
|
||||
-- RTPS Header
|
||||
gen_rtps_header(rtps_header, stimulus);
|
||||
-- Invalid HEARTBEAT [SubLength invalid] (Dropped)
|
||||
@ -795,7 +795,7 @@ begin
|
||||
gen_rtps_submessage(rtps_data, stimulus);
|
||||
rtps_data.writerSN := rtps_data.writerSN + 1;
|
||||
-- Finalize Packet
|
||||
fix_udp_packet(stimulus);
|
||||
fix_output_packet(stimulus);
|
||||
start_test;
|
||||
wait_on_complete;
|
||||
check_cnt := check_cnt + reference.length;
|
||||
@ -804,7 +804,7 @@ begin
|
||||
|
||||
Log("Sending invalid HEARTBEAT [FirstSN invalid]", INFO);
|
||||
-- UDP Header
|
||||
gen_udp_header(UDP_META, stimulus);
|
||||
gen_output_header(UDP_META, stimulus);
|
||||
-- RTPS Header
|
||||
gen_rtps_header(rtps_header, stimulus);
|
||||
-- Invalid HEARTBEAT [FirstSN invalid] (Dropped)
|
||||
@ -817,7 +817,7 @@ begin
|
||||
gen_rtps_submessage(rtps_data, stimulus);
|
||||
rtps_data.writerSN := rtps_data.writerSN + 1;
|
||||
-- Finalize Packet
|
||||
fix_udp_packet(stimulus);
|
||||
fix_output_packet(stimulus);
|
||||
start_test;
|
||||
wait_on_complete;
|
||||
check_cnt := check_cnt + reference.length;
|
||||
@ -826,7 +826,7 @@ begin
|
||||
|
||||
Log("Sending invalid HEARTBEAT [LastSN invalid]", INFO);
|
||||
-- UDP Header
|
||||
gen_udp_header(UDP_META, stimulus);
|
||||
gen_output_header(UDP_META, stimulus);
|
||||
-- RTPS Header
|
||||
gen_rtps_header(rtps_header, stimulus);
|
||||
-- Invalid HEARTBEAT [LastSN invalid] (Dropped)
|
||||
@ -839,7 +839,7 @@ begin
|
||||
gen_rtps_submessage(rtps_data, stimulus);
|
||||
rtps_data.writerSN := rtps_data.writerSN + 1;
|
||||
-- Finalize Packet
|
||||
fix_udp_packet(stimulus);
|
||||
fix_output_packet(stimulus);
|
||||
start_test;
|
||||
wait_on_complete;
|
||||
check_cnt := check_cnt + reference.length;
|
||||
@ -848,7 +848,7 @@ begin
|
||||
|
||||
Log("Sending invalid HEARTBEAT [LastSN < FirstSN - 1]", INFO);
|
||||
-- UDP Header
|
||||
gen_udp_header(UDP_META, stimulus);
|
||||
gen_output_header(UDP_META, stimulus);
|
||||
-- RTPS Header
|
||||
gen_rtps_header(rtps_header, stimulus);
|
||||
-- Invalid HEARTBEAT [LastSN invalid] (Dropped)
|
||||
@ -862,7 +862,7 @@ begin
|
||||
gen_rtps_submessage(rtps_data, stimulus);
|
||||
rtps_data.writerSN := rtps_data.writerSN + 1;
|
||||
-- Finalize Packet
|
||||
fix_udp_packet(stimulus);
|
||||
fix_output_packet(stimulus);
|
||||
start_test;
|
||||
wait_on_complete;
|
||||
check_cnt := check_cnt + reference.length;
|
||||
@ -872,7 +872,7 @@ begin
|
||||
-- *INFO_SOURCE SUBMESSAGE*
|
||||
Log("Testing INFO_SOURCE interpretation", INFO);
|
||||
-- UDP Header
|
||||
gen_udp_header(UDP_META, stimulus);
|
||||
gen_output_header(UDP_META, stimulus);
|
||||
-- RTPS Header
|
||||
gen_rtps_header(rtps_header, stimulus);
|
||||
-- Valid Data (Expected)
|
||||
@ -905,7 +905,7 @@ begin
|
||||
gen_rtps_submessage(rtps_data, stimulus);
|
||||
rtps_data.writerSN := rtps_data.writerSN + 1;
|
||||
-- Finalize Packet
|
||||
fix_udp_packet(stimulus);
|
||||
fix_output_packet(stimulus);
|
||||
start_test;
|
||||
wait_on_complete;
|
||||
check_cnt := check_cnt + reference.length;
|
||||
@ -914,7 +914,7 @@ begin
|
||||
|
||||
Log("Sending invalid INFO_SOURCE [Submessage Length too small]", INFO);
|
||||
-- UDP Header
|
||||
gen_udp_header(UDP_META, stimulus);
|
||||
gen_output_header(UDP_META, stimulus);
|
||||
-- RTPS Header
|
||||
gen_rtps_header(rtps_header, stimulus);
|
||||
-- Invalid INFO_SOURCE [SubLength invalid] (Dropped)
|
||||
@ -926,7 +926,7 @@ begin
|
||||
gen_rtps_submessage(rtps_data, stimulus);
|
||||
rtps_data.writerSN := rtps_data.writerSN + 1;
|
||||
-- Finalize Packet
|
||||
fix_udp_packet(stimulus);
|
||||
fix_output_packet(stimulus);
|
||||
start_test;
|
||||
wait_on_complete;
|
||||
check_cnt := check_cnt + reference.length;
|
||||
@ -937,7 +937,7 @@ begin
|
||||
-- *INFO_DESTINATION SUBMESSAGE*
|
||||
Log("Testing INFO_DESTINATION interpretation", INFO);
|
||||
-- UDP Header
|
||||
gen_udp_header(UDP_META, stimulus);
|
||||
gen_output_header(UDP_META, stimulus);
|
||||
-- RTPS Header
|
||||
gen_rtps_header(rtps_header, stimulus);
|
||||
-- Valid Data (Expected)
|
||||
@ -969,7 +969,7 @@ begin
|
||||
gen_rtps_submessage(rtps_data, stimulus);
|
||||
rtps_data.writerSN := rtps_data.writerSN + 1;
|
||||
-- Finalize Packet
|
||||
fix_udp_packet(stimulus);
|
||||
fix_output_packet(stimulus);
|
||||
start_test;
|
||||
wait_on_complete;
|
||||
check_cnt := check_cnt + reference.length;
|
||||
@ -978,7 +978,7 @@ begin
|
||||
|
||||
Log("Sending invalid INFO_DESTINATION [Submessage Length too small]", INFO);
|
||||
-- UDP Header
|
||||
gen_udp_header(UDP_META, stimulus);
|
||||
gen_output_header(UDP_META, stimulus);
|
||||
-- RTPS Header
|
||||
gen_rtps_header(rtps_header, stimulus);
|
||||
-- Invalid INFO_DESTINATION [SubLength invalid] (Dropped)
|
||||
@ -990,7 +990,7 @@ begin
|
||||
gen_rtps_submessage(rtps_data, stimulus);
|
||||
rtps_data.writerSN := rtps_data.writerSN + 1;
|
||||
-- Finalize Packet
|
||||
fix_udp_packet(stimulus);
|
||||
fix_output_packet(stimulus);
|
||||
start_test;
|
||||
wait_on_complete;
|
||||
check_cnt := check_cnt + reference.length;
|
||||
@ -1001,7 +1001,7 @@ begin
|
||||
-- *INFO_REPLY SUBMESSAGE*
|
||||
Log("Testing INFO_REPLY interpretation", INFO);
|
||||
-- UDP Header
|
||||
gen_udp_header(UDP_META, stimulus);
|
||||
gen_output_header(UDP_META, stimulus);
|
||||
-- RTPS Header
|
||||
gen_rtps_header(rtps_header, stimulus);
|
||||
-- Valid Data (Expected)
|
||||
@ -1050,7 +1050,7 @@ begin
|
||||
gen_rtps_handler_out(rtps_data, tmp_loc, TRUE, TIME_INVALID, rtps_header.guidPrefix, reference);
|
||||
rtps_data.writerSN := rtps_data.writerSN + 1;
|
||||
-- Finalize Packet
|
||||
fix_udp_packet(stimulus);
|
||||
fix_output_packet(stimulus);
|
||||
start_test;
|
||||
wait_on_complete;
|
||||
check_cnt := check_cnt + reference.length;
|
||||
@ -1059,7 +1059,7 @@ begin
|
||||
|
||||
Log("Sending invalid INFO_REPLY [Submessage Length too small]", INFO);
|
||||
-- UDP Header
|
||||
gen_udp_header(UDP_META, stimulus);
|
||||
gen_output_header(UDP_META, stimulus);
|
||||
-- RTPS Header
|
||||
gen_rtps_header(rtps_header, stimulus);
|
||||
-- Invalid INFO_REPLY [SubLength invalid] (Dropped)
|
||||
@ -1074,7 +1074,7 @@ begin
|
||||
gen_rtps_submessage(rtps_data, stimulus);
|
||||
rtps_data.writerSN := rtps_data.writerSN + 1;
|
||||
-- Finalize Packet
|
||||
fix_udp_packet(stimulus);
|
||||
fix_output_packet(stimulus);
|
||||
start_test;
|
||||
wait_on_complete;
|
||||
check_cnt := check_cnt + reference.length;
|
||||
@ -1085,7 +1085,7 @@ begin
|
||||
-- *INFO_REPLY_IP4 SUBMESSAGE*
|
||||
Log("Testing INFO_REPLY_IP4 interpretation", INFO);
|
||||
-- UDP Header
|
||||
gen_udp_header(UDP_META, stimulus);
|
||||
gen_output_header(UDP_META, stimulus);
|
||||
-- RTPS Header
|
||||
gen_rtps_header(rtps_header, stimulus);
|
||||
-- Valid Data (Expected)
|
||||
@ -1122,7 +1122,7 @@ begin
|
||||
gen_rtps_handler_out(rtps_data, tmp_loc, TRUE, TIME_INVALID, rtps_header.guidPrefix, reference);
|
||||
rtps_data.writerSN := rtps_data.writerSN + 1;
|
||||
-- Finalize Packet
|
||||
fix_udp_packet(stimulus);
|
||||
fix_output_packet(stimulus);
|
||||
start_test;
|
||||
wait_on_complete;
|
||||
check_cnt := check_cnt + reference.length;
|
||||
@ -1131,7 +1131,7 @@ begin
|
||||
|
||||
Log("Sending invalid INFO_REPLY_IP4 [Submessage Length too small]", INFO);
|
||||
-- UDP Header
|
||||
gen_udp_header(UDP_META, stimulus);
|
||||
gen_output_header(UDP_META, stimulus);
|
||||
-- RTPS Header
|
||||
gen_rtps_header(rtps_header, stimulus);
|
||||
-- Invalid INFO_REPLY_IP4 [SubLength invalid] (Dropped)
|
||||
@ -1143,7 +1143,7 @@ begin
|
||||
gen_rtps_submessage(rtps_data, stimulus);
|
||||
rtps_data.writerSN := rtps_data.writerSN + 1;
|
||||
-- Finalize Packet
|
||||
fix_udp_packet(stimulus);
|
||||
fix_output_packet(stimulus);
|
||||
start_test;
|
||||
wait_on_complete;
|
||||
check_cnt := check_cnt + reference.length;
|
||||
@ -1153,7 +1153,7 @@ begin
|
||||
-- *INFO TS*
|
||||
Log("Testing INFO_TIMESTAMP interpretation", INFO);
|
||||
-- UDP Header
|
||||
gen_udp_header(UDP_META, stimulus);
|
||||
gen_output_header(UDP_META, stimulus);
|
||||
-- RTPS Header
|
||||
gen_rtps_header(rtps_header, stimulus);
|
||||
-- Valid Data (Expected)
|
||||
@ -1189,7 +1189,7 @@ begin
|
||||
gen_rtps_handler_out(rtps_data, UDP_META.src, TRUE, ts, rtps_header.guidPrefix, reference);
|
||||
rtps_data.writerSN := rtps_data.writerSN + 1;
|
||||
-- Finalize Packet
|
||||
fix_udp_packet(stimulus);
|
||||
fix_output_packet(stimulus);
|
||||
start_test;
|
||||
wait_on_complete;
|
||||
check_cnt := check_cnt + reference.length;
|
||||
@ -1198,7 +1198,7 @@ begin
|
||||
|
||||
Log("Sending invalid INFO_TMESTAMP [Submessage Length too small]", INFO);
|
||||
-- UDP Header
|
||||
gen_udp_header(UDP_META, stimulus);
|
||||
gen_output_header(UDP_META, stimulus);
|
||||
-- RTPS Header
|
||||
gen_rtps_header(rtps_header, stimulus);
|
||||
-- Invalid INFO_TIMESTAMP [SubLength invalid] (Dropped)
|
||||
@ -1210,7 +1210,7 @@ begin
|
||||
gen_rtps_submessage(rtps_data, stimulus);
|
||||
rtps_data.writerSN := rtps_data.writerSN + 1;
|
||||
-- Finalize Packet
|
||||
fix_udp_packet(stimulus);
|
||||
fix_output_packet(stimulus);
|
||||
start_test;
|
||||
wait_on_complete;
|
||||
check_cnt := check_cnt + reference.length;
|
||||
@ -1221,7 +1221,7 @@ begin
|
||||
-- *PAD*
|
||||
Log("Testing PAD interpretation", INFO);
|
||||
-- UDP Header
|
||||
gen_udp_header(UDP_META, stimulus);
|
||||
gen_output_header(UDP_META, stimulus);
|
||||
-- RTPS Header
|
||||
gen_rtps_header(rtps_header, stimulus);
|
||||
-- Valid Data (Expected)
|
||||
@ -1238,7 +1238,7 @@ begin
|
||||
gen_rtps_handler_out(rtps_data, UDP_META.src, TRUE, TIME_INVALID, rtps_header.guidPrefix, reference);
|
||||
rtps_data.writerSN := rtps_data.writerSN + 1;
|
||||
-- Finalize Packet
|
||||
fix_udp_packet(stimulus);
|
||||
fix_output_packet(stimulus);
|
||||
start_test;
|
||||
wait_on_complete;
|
||||
check_cnt := check_cnt + reference.length;
|
||||
@ -1249,7 +1249,7 @@ begin
|
||||
-- *UNKNOWN*
|
||||
Log("Testing unknown Submessage handling", INFO);
|
||||
-- UDP Header
|
||||
gen_udp_header(UDP_META, stimulus);
|
||||
gen_output_header(UDP_META, stimulus);
|
||||
-- RTPS Header
|
||||
gen_rtps_header(rtps_header, stimulus);
|
||||
-- Valid Data (Expected)
|
||||
@ -1293,7 +1293,7 @@ begin
|
||||
gen_rtps_handler_out(rtps_data, UDP_META.src, TRUE, TIME_INVALID, rtps_header.guidPrefix, reference);
|
||||
rtps_data.writerSN := rtps_data.writerSN + 1;
|
||||
-- Finalize Packet
|
||||
fix_udp_packet(stimulus);
|
||||
fix_output_packet(stimulus);
|
||||
start_test;
|
||||
wait_on_complete;
|
||||
check_cnt := check_cnt + reference.length;
|
||||
|
||||
@ -85,7 +85,7 @@ begin
|
||||
variable rtps_data : RTPS_SUBMESSAGE_TYPE := DEFAULT_RTPS_SUBMESSAGE;
|
||||
variable check_cnt : natural := 0;
|
||||
variable RV : RandomPType;
|
||||
variable UDP : UDP_HEADER_TYPE;
|
||||
variable UDP : OUTPUT_HEADER_TYPE;
|
||||
variable tmp_loc_list : LOCATOR_LIST_TYPE;
|
||||
variable ref1, ref2, ref3 : std_logic_vector(0 to NUM_ENDPOINTS);
|
||||
variable tmp_id : std_logic_vector(ENTITYID_WIDTH-1 downto 0);
|
||||
@ -217,7 +217,7 @@ begin
|
||||
--report "ref2: " & to_string(ref2);
|
||||
--report "ref3: " & to_string(ref3);
|
||||
-- UDP Header
|
||||
gen_udp_header(UDP, stimulus);
|
||||
gen_output_header(UDP, stimulus);
|
||||
-- RTPS Header
|
||||
gen_rtps_header(rtps_header, stimulus);
|
||||
-- Valid Data
|
||||
@ -226,7 +226,7 @@ begin
|
||||
gen_rtps_handler_out(rtps_data, UDP.src, is_meta, TIME_INVALID, rtps_header.guidPrefix, dummy);
|
||||
end if;
|
||||
-- Finalize Packet
|
||||
fix_udp_packet(stimulus);
|
||||
fix_output_packet(stimulus);
|
||||
reference <= ref1 and ref2 and ref3;
|
||||
start_test;
|
||||
wait_on_complete;
|
||||
|
||||
@ -22,9 +22,9 @@ analyze Level_0/rtps_builtin_endpoint_test4.vhd
|
||||
analyze Level_0/rtps_builtin_endpoint_test5.vhd
|
||||
|
||||
#simulate rtps_handler_test1
|
||||
#simulate rtps_handler_test2
|
||||
simulate rtps_handler_test2
|
||||
#simulate rtps_builtin_endpoint_test1
|
||||
#simulate rtps_builtin_endpoint_test2
|
||||
#simulate rtps_builtin_endpoint_test3
|
||||
#simulate rtps_builtin_endpoint_test4
|
||||
simulate rtps_builtin_endpoint_test5
|
||||
#simulate rtps_builtin_endpoint_test5
|
||||
@ -33,7 +33,7 @@ architecture arch of rtps_handler is
|
||||
|
||||
--*****TYPE DECLARATION*****
|
||||
-- FSM states. Explained below in detail
|
||||
type STAGE_TYPE is (SRC_ADDR_HEADER, DEST_ADDR_HEADER, LEN_HEADER, UDP_HEADER_1, UDP_HEADER_2, RTPS_HEADER_1, RTPS_HEADER_2,
|
||||
type STAGE_TYPE is (SRC_ADDR_HEADER, DEST_ADDR_HEADER, UDP_PORT_HEADER, LEN_HEADER, RTPS_HEADER_1, RTPS_HEADER_2,
|
||||
RTPS_HEADER_3, RTPS_SUB_HEADER, PARSE_INFO_DST, PARSE_INFO_SRC, PARSE_INFO_TS, PARSE_INFO_REPLY, EXTRACT_LOCATOR,
|
||||
PARSE_INFO_REPLY_IP4, PARSE_HEARTBEAT, PARSE_ACKNACK, PARSE_GAP, PARSE_DATA, SKIP_DATA_HEADER, MATCH_DST_ENDPOINT,
|
||||
PUSH_PAYLOAD_HEADER, PUSH_PAYLOAD, SKIP_SUB, SKIP_PACKET);
|
||||
@ -127,10 +127,8 @@ architecture arch of rtps_handler is
|
||||
|
||||
--*****ALIAS DEFINATION*****
|
||||
-- UDP HEADER
|
||||
alias udp_src_port : std_logic_vector(15 downto 0) is data_in(31 downto 16);
|
||||
alias udp_dest_port : std_logic_vector(15 downto 0) is data_in(15 downto 0);
|
||||
alias udp_length : std_logic_vector(15 downto 0) is data_in(31 downto 16);
|
||||
alias udp_checksum : std_logic_vector(15 downto 0) is data_in(15 downto 0);
|
||||
alias udp_src_port : std_logic_vector(15 downto 0) is long_latch(31 downto 16);
|
||||
alias udp_dest_port : std_logic_vector(15 downto 0) is long_latch(15 downto 0);
|
||||
-- RTPS HEADER
|
||||
alias rtps_version : std_logic_vector(15 downto 0) is data_in(31 downto 16);
|
||||
alias rtps_vendorid : std_logic_vector(15 downto 0) is data_in(15 downto 0);
|
||||
@ -197,9 +195,8 @@ begin
|
||||
-- STATE DESCRIPTION
|
||||
-- SRC_ADDR_HEADER Initial and Idle state. Read IPv4 Source Address
|
||||
-- DEST_ADDR_HEADER Read IPv4 Destination Address
|
||||
-- LEN_HEADER Read UDP Packet Length
|
||||
-- UDP_HEADER_1 Parse first word of UDP Header
|
||||
-- UDP_HEADER_2 Parse second word of UDP Header
|
||||
-- UDP_PORT_HEADER Read UDP Source and Destination Ports
|
||||
-- LEN_HEADER Read Packet Length (And check UDP Ports of previous stage)
|
||||
-- RTPS_HEADER_1 Parse first word of RTPS Header
|
||||
-- RTPS_HEADER_2 Parse second word of RTPS Header
|
||||
-- RTPS_HEADER_3 Parse GUID Prefix of RTPS Header (3rd-5th Word)
|
||||
@ -296,9 +293,20 @@ begin
|
||||
ip_addr_type_next <= INVALID;
|
||||
end case;
|
||||
|
||||
stage_next <= LEN_HEADER;
|
||||
stage_next <= UDP_PORT_HEADER;
|
||||
end if;
|
||||
-- UDP Packet Length
|
||||
-- UDP Src & Dest Ports
|
||||
when UDP_PORT_HEADER =>
|
||||
-- Input FIFO Guard
|
||||
if (empty = '0') then
|
||||
rd_guard := '1';
|
||||
|
||||
-- NOTE: Ports are latched for later checking, because we cannot yet skip the packet (Need to latch the packet length first)
|
||||
long_latch_next <= data_in;
|
||||
|
||||
stage_next <= LEN_HEADER;
|
||||
end if;
|
||||
-- Packet Length
|
||||
when LEN_HEADER =>
|
||||
-- Input FIFO Guard
|
||||
if (empty = '0') then
|
||||
@ -307,21 +315,11 @@ begin
|
||||
reset_read_cnt <= '1';
|
||||
|
||||
packet_length_next <= unsigned(data_in(packet_length'length-1 downto 0));
|
||||
|
||||
-- DEFAULT
|
||||
stage_next <= UDP_HEADER_1;
|
||||
end if;
|
||||
-- First UDP Header word (Fields: Src Port, Dest Port)
|
||||
when UDP_HEADER_1 =>
|
||||
-- Input FIFO Guard
|
||||
if (empty = '0') then
|
||||
rd_guard := '1';
|
||||
src_port_next <= udp_src_port;
|
||||
|
||||
-- DEFAULT
|
||||
is_metatraffic_next <= '0';
|
||||
stage_next <= SKIP_PACKET;
|
||||
|
||||
src_port_next <= udp_src_port;
|
||||
stage_next <= RTPS_HEADER_1;
|
||||
|
||||
-- Check Address and Port Destination for validity
|
||||
case (ip_addr_type) is
|
||||
@ -330,50 +328,33 @@ begin
|
||||
is_metatraffic_next <= '1';
|
||||
case (udp_dest_port) is
|
||||
when META_IPv4_MULTICAST_PORT =>
|
||||
stage_next <= UDP_HEADER_2;
|
||||
null;
|
||||
when META_IPv4_UNICAST_PORT =>
|
||||
stage_next <= UDP_HEADER_2;
|
||||
null;
|
||||
when others =>
|
||||
-- Ignore
|
||||
null;
|
||||
stage_next <= SKIP_PACKET;
|
||||
end case;
|
||||
when DEFAULT_ADDR =>
|
||||
case (udp_dest_port) is
|
||||
when META_IPv4_MULTICAST_PORT =>
|
||||
is_metatraffic_next <= '1';
|
||||
stage_next <= UDP_HEADER_2;
|
||||
when META_IPv4_UNICAST_PORT =>
|
||||
is_metatraffic_next <= '1';
|
||||
stage_next <= UDP_HEADER_2;
|
||||
when USER_IPv4_MULTICAST_PORT =>
|
||||
stage_next <= UDP_HEADER_2;
|
||||
null;
|
||||
when USER_IPv4_UNICAST_PORT =>
|
||||
stage_next <= UDP_HEADER_2;
|
||||
null;
|
||||
when others =>
|
||||
-- Ignore
|
||||
null;
|
||||
stage_next <= SKIP_PACKET;
|
||||
end case;
|
||||
-- Packet not destined for us
|
||||
when others =>
|
||||
-- Ignore
|
||||
null;
|
||||
stage_next <= SKIP_PACKET;
|
||||
end case;
|
||||
end if;
|
||||
-- Second UDP Header Word (Fields: Length, Checksum)
|
||||
when UDP_HEADER_2 =>
|
||||
-- Input FIFO Guard
|
||||
if (empty = '0') then
|
||||
rd_guard := '1';
|
||||
-- NOTE: The UDP checksum has to be validated before, because we passthrough the input to the output FIFOs before we reach the end of the UDP Packet.
|
||||
|
||||
-- SANITY CHECK: Check if UPD header length matches actual packet length
|
||||
if (round_slv(udp_length, packet_length'length) /= std_logic_vector(packet_length)) then
|
||||
-- Ignore
|
||||
stage_next <= SKIP_PACKET;
|
||||
else
|
||||
stage_next <= RTPS_HEADER_1;
|
||||
end if;
|
||||
end if;
|
||||
-- First RTPS Header word (Fields: Protocolld)
|
||||
when RTPS_HEADER_1 =>
|
||||
-- Input FIFO Guard
|
||||
|
||||
30
src/rtps_out.vhd
Normal file
30
src/rtps_out.vhd
Normal file
@ -0,0 +1,30 @@
|
||||
library ieee;
|
||||
use ieee.std_logic_1164.all;
|
||||
use ieee.numeric_std.all;
|
||||
|
||||
|
||||
entity rtps_out is
|
||||
generic (
|
||||
PIPELINE_STAGES : integer := 1;
|
||||
DATA_WIDTH : integer := 16
|
||||
);
|
||||
port (
|
||||
clk : in std_logic;
|
||||
reset : in std_logic;
|
||||
mode : in std_logic;
|
||||
cap : in std_logic;
|
||||
A : in std_logic_vector(DATA_WIDTH-1 downto 0);
|
||||
B : in std_logic_vector(DATA_WIDTH-1 downto 0);
|
||||
RES : out std_logic_vector(DATA_WIDTH-1 downto 0)
|
||||
);
|
||||
end entity;
|
||||
|
||||
architecture arch of rtps_out is
|
||||
|
||||
|
||||
|
||||
begin
|
||||
|
||||
|
||||
|
||||
end architecture;
|
||||
@ -84,13 +84,13 @@ package rtps_test_package is
|
||||
|
||||
constant DEST_LOC : DEST_LOCATOR_LIST_TYPE; -- Deferred to Package Body
|
||||
|
||||
-- *UDP HEADER*
|
||||
type UDP_HEADER_TYPE is record
|
||||
-- *OUTPUT HEADER*
|
||||
type OUTPUT_HEADER_TYPE is record
|
||||
src : LOCATOR_TYPE;
|
||||
dest : LOCATOR_TYPE;
|
||||
end record;
|
||||
|
||||
constant DEFAULT_UDP_HEADER : UDP_HEADER_TYPE; -- Deferred to Package Body
|
||||
constant DEFAULT_UDP_HEADER : OUTPUT_HEADER_TYPE; -- Deferred to Package Body
|
||||
|
||||
-- *RTPS HEADER*
|
||||
type RTPS_HEADER_TYPE is record
|
||||
@ -206,8 +206,8 @@ package rtps_test_package is
|
||||
function test_memory_match (A,B : TEST_MEMORY_TYPE) return boolean;
|
||||
function to_string (input : TEST_MEMORY_TYPE) return string;
|
||||
|
||||
procedure gen_udp_header(ref : in UDP_HEADER_TYPE; output : inout TEST_PACKET_TYPE);
|
||||
procedure fix_udp_packet(output : inout TEST_PACKET_TYPE);
|
||||
procedure gen_output_header(ref : in OUTPUT_HEADER_TYPE; output : inout TEST_PACKET_TYPE);
|
||||
procedure fix_output_packet(output : inout TEST_PACKET_TYPE);
|
||||
|
||||
procedure gen_rtps_header( ref : in RTPS_HEADER_TYPE; output : inout TEST_PACKET_TYPE);
|
||||
|
||||
@ -339,7 +339,7 @@ package body rtps_test_package is
|
||||
)
|
||||
);
|
||||
|
||||
constant DEFAULT_UDP_HEADER : UDP_HEADER_TYPE := (
|
||||
constant DEFAULT_UDP_HEADER : OUTPUT_HEADER_TYPE := (
|
||||
src => EMPTY_LOCATOR,
|
||||
dest => EMPTY_LOCATOR
|
||||
);
|
||||
@ -450,7 +450,7 @@ package body rtps_test_package is
|
||||
output.data(output.length)((BYTE_WIDTH*out_off)+BYTE_WIDTH-1 downto (BYTE_WIDTH*out_off)) := input((BYTE_WIDTH*in_off)+BYTE_WIDTH-1 downto (BYTE_WIDTH*in_off));
|
||||
end procedure;
|
||||
|
||||
procedure gen_udp_header(ref : in UDP_HEADER_TYPE; output : inout TEST_PACKET_TYPE) is
|
||||
procedure gen_output_header(ref : in OUTPUT_HEADER_TYPE; output : inout TEST_PACKET_TYPE) is
|
||||
begin
|
||||
-- IPv4 Source Address
|
||||
output.data(output.length) := ref.src.addr(IPv4_ADDRESS_WIDTH-1 downto 0);
|
||||
@ -458,25 +458,19 @@ package body rtps_test_package is
|
||||
-- IPv4 Destination Address
|
||||
output.data(output.length) := ref.dest.addr(IPv4_ADDRESS_WIDTH-1 downto 0);
|
||||
output.length := output.length + 1;
|
||||
-- Packet Length
|
||||
output.data(output.length) := (others => '0');
|
||||
output.length := output.length + 1;
|
||||
-- Source Port & Destination Port
|
||||
output.data(output.length) := ref.src.portn(UDP_PORT_WIDTH-1 downto 0) & ref.dest.portn(UDP_PORT_WIDTH-1 downto 0);
|
||||
output.length := output.length + 1;
|
||||
-- Length & Checksum
|
||||
-- Packet Length
|
||||
output.data(output.length) := (others => '0');
|
||||
output.length := output.length + 1;
|
||||
end procedure;
|
||||
|
||||
procedure fix_udp_packet(output : inout TEST_PACKET_TYPE) is
|
||||
procedure fix_output_packet(output : inout TEST_PACKET_TYPE) is
|
||||
begin
|
||||
assert (output.length < 2**UDP_PORT_WIDTH) report "Exceeded maximum UDP Packet Size" severity error;
|
||||
-- Fix Packet Length
|
||||
output.data(2) := int(output.length-3, WORD_WIDTH);
|
||||
-- Fix UDP Length
|
||||
output.data(4)(31 downto 16) := int((output.length-3)*4, UDP_HEADER_LENGTH_WIDTH);
|
||||
-- TODO: Calculate Checksum
|
||||
output.data(3) := int(output.length-4, WORD_WIDTH);
|
||||
end procedure;
|
||||
|
||||
procedure gen_rtps_header( ref : in RTPS_HEADER_TYPE; output : inout TEST_PACKET_TYPE) is
|
||||
|
||||
Loading…
Reference in New Issue
Block a user