Skip to content
Snippets Groups Projects
Commit a4072e2b authored by Eric Kooistra's avatar Eric Kooistra
Browse files

Merge branch 'L2SDP-342' into 'master'

added icmp checksum calculation

Closes L2SDP-342

See merge request desp/hdl!208
parents 34f1ace2 802d1d5e
No related branches found
No related tags found
1 merge request!208added icmp checksum calculation
Pipeline #25649 passed
...@@ -187,6 +187,8 @@ BEGIN ...@@ -187,6 +187,8 @@ BEGIN
nxt_hdr_response_arr <= func_network_total_header_response_arp( rcv_hdr_words_arr, reg_config.mac_address, reg_config.ip_address); nxt_hdr_response_arr <= func_network_total_header_response_arp( rcv_hdr_words_arr, reg_config.mac_address, reg_config.ip_address);
ELSIF rcv_hdr_status.is_icmp='1' THEN ELSIF rcv_hdr_status.is_icmp='1' THEN
nxt_hdr_response_arr <= func_network_total_header_response_icmp(rcv_hdr_words_arr, reg_config.mac_address); nxt_hdr_response_arr <= func_network_total_header_response_icmp(rcv_hdr_words_arr, reg_config.mac_address);
-- Calculate icmp checksum = original checksum + 0x0800.
nxt_hdr_response_arr(9)(c_halfword_w-1 DOWNTO 0) <= TO_UVEC( 2048 + TO_UINT(rcv_hdr_words_arr(9)(c_halfword_w-1 DOWNTO 0)), c_halfword_w);
ELSIF rcv_hdr_status.is_udp='1' THEN ELSIF rcv_hdr_status.is_udp='1' THEN
nxt_hdr_response_arr <= func_network_total_header_response_udp( rcv_hdr_words_arr, reg_config.mac_address); nxt_hdr_response_arr <= func_network_total_header_response_udp( rcv_hdr_words_arr, reg_config.mac_address);
ELSIF rcv_hdr_status.is_ip='1' THEN ELSIF rcv_hdr_status.is_ip='1' THEN
......
...@@ -181,9 +181,13 @@ ARCHITECTURE tb OF tb_eth IS ...@@ -181,9 +181,13 @@ ARCHITECTURE tb OF tb_eth IS
checksum => TO_UVEC(c_network_icmp_checksum, c_network_icmp_checksum_w), -- init value checksum => TO_UVEC(c_network_icmp_checksum, c_network_icmp_checksum_w), -- init value
id => TO_UVEC(c_network_icmp_id, c_network_icmp_id_w), id => TO_UVEC(c_network_icmp_id, c_network_icmp_id_w),
sequence => TO_UVEC(c_network_icmp_sequence, c_network_icmp_sequence_w)); sequence => TO_UVEC(c_network_icmp_sequence, c_network_icmp_sequence_w));
-- checksum is 0x0800 + original checksum
CONSTANT c_exp_icmp_checksum : STD_LOGIC_VECTOR(c_network_icmp_checksum_w-1 DOWNTO 0) := TO_UVEC( 2048 + TO_UINT(c_tx_icmp_header.checksum), c_network_icmp_checksum_w);
CONSTANT c_exp_icmp_header : t_network_icmp_header := (msg_type => TO_UVEC(c_network_icmp_msg_type_reply, c_network_icmp_msg_type_w), -- ping reply CONSTANT c_exp_icmp_header : t_network_icmp_header := (msg_type => TO_UVEC(c_network_icmp_msg_type_reply, c_network_icmp_msg_type_w), -- ping reply
code => c_tx_icmp_header.code, code => c_tx_icmp_header.code,
checksum => c_tx_icmp_header.checksum, -- init value checksum => c_exp_icmp_checksum,
id => c_tx_icmp_header.id, id => c_tx_icmp_header.id,
sequence => c_tx_icmp_header.sequence); sequence => c_tx_icmp_header.sequence);
......
...@@ -181,9 +181,13 @@ ARCHITECTURE tb OF tb_eth1g IS ...@@ -181,9 +181,13 @@ ARCHITECTURE tb OF tb_eth1g IS
checksum => TO_UVEC(c_network_icmp_checksum, c_network_icmp_checksum_w), -- init value checksum => TO_UVEC(c_network_icmp_checksum, c_network_icmp_checksum_w), -- init value
id => TO_UVEC(c_network_icmp_id, c_network_icmp_id_w), id => TO_UVEC(c_network_icmp_id, c_network_icmp_id_w),
sequence => TO_UVEC(c_network_icmp_sequence, c_network_icmp_sequence_w)); sequence => TO_UVEC(c_network_icmp_sequence, c_network_icmp_sequence_w));
-- checksum is 0x0800 + original checksum
CONSTANT c_exp_icmp_checksum : STD_LOGIC_VECTOR(c_network_icmp_checksum_w-1 DOWNTO 0) := TO_UVEC( 2048 + TO_UINT(c_tx_icmp_header.checksum), c_network_icmp_checksum_w);
CONSTANT c_exp_icmp_header : t_network_icmp_header := (msg_type => TO_UVEC(c_network_icmp_msg_type_reply, c_network_icmp_msg_type_w), -- ping reply CONSTANT c_exp_icmp_header : t_network_icmp_header := (msg_type => TO_UVEC(c_network_icmp_msg_type_reply, c_network_icmp_msg_type_w), -- ping reply
code => c_tx_icmp_header.code, code => c_tx_icmp_header.code,
checksum => c_tx_icmp_header.checksum, -- init value checksum => c_exp_icmp_checksum,
id => c_tx_icmp_header.id, id => c_tx_icmp_header.id,
sequence => c_tx_icmp_header.sequence); sequence => c_tx_icmp_header.sequence);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment