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
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
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
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
......
......@@ -181,9 +181,13 @@ ARCHITECTURE tb OF tb_eth IS
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),
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
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,
sequence => c_tx_icmp_header.sequence);
......
......@@ -181,9 +181,13 @@ ARCHITECTURE tb OF tb_eth1g IS
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),
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
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,
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