Address Resolution Protocol
The ethernet library provides functions for creating and checking ethernet packets.
Functionality
- Create ARP packets
- Extract ARP headers
More details in nw_arp_pkg
Example use
Include the libraries:
library nw_util;
context nw_util.nw_util_context;
library nw_ethernet;
context nw_ethernet.nw_ethernet_context;
Define a few variables:
variable v_header : t_arp_header; -- header record
variable v_arp_pkt : t_slv_arr(0 to 27)(7 downto 0); -- byte array
variable v_len : natural;
First setup the header, then calculate the total ethernet packet length before creating the packet.
v_header := C_DEFAULT_ARP_HEADER; -- copy default header
v_header.sender_hw_addr := f_eth_mac_2_slv_arr("08:00:27:27:1a:d5"); -- change sender MAC
v_len := f_arp_create_pkt_len(v_header); -- calculate total packet length (28)
v_arp_pkt(0 to v_len - 1) := f_arp_create_pkt(v_header); -- create the ARP packet
Next step is to can be to put the ARP packet into an Ethernet frame:
v_eth_header := C_DEFAULT_ETH_HEADER;
v_len := f_eth_create_pkt_len(v_eth_header, v_arp_pkt); -- calculate total packet length
v_eth_pkt(0 to v_len - 1) := f_eth_create_pkt(v_eth_header, v_arp_pkt); -- create the packet
See further examples in the test bench nw_ethernet_tb.vhd.