183d290c5STom Rini /* SPDX-License-Identifier: GPL-2.0 */ 22eede1f3SJoe Hershberger /* 32eede1f3SJoe Hershberger * Copyright (c) 2015 National Instruments 42eede1f3SJoe Hershberger * 52eede1f3SJoe Hershberger * (C) Copyright 2015 62eede1f3SJoe Hershberger * Joe Hershberger <joe.hershberger@ni.com> 72eede1f3SJoe Hershberger */ 82eede1f3SJoe Hershberger 92eede1f3SJoe Hershberger #ifndef __ETH_H 102eede1f3SJoe Hershberger #define __ETH_H 112eede1f3SJoe Hershberger 122eede1f3SJoe Hershberger void sandbox_eth_disable_response(int index, bool disable); 132eede1f3SJoe Hershberger 146f2707c6SJoe Hershberger void sandbox_eth_skip_timeout(void); 156f2707c6SJoe Hershberger 16e95bb161SJoe Hershberger /* 17e95bb161SJoe Hershberger * sandbox_eth_arp_req_to_reply() 18e95bb161SJoe Hershberger * 19e95bb161SJoe Hershberger * Check for an arp request to be sent. If so, inject a reply 20e95bb161SJoe Hershberger * 21e95bb161SJoe Hershberger * @dev: device that received the packet 22e95bb161SJoe Hershberger * @packet: pointer to the received pacaket buffer 23e95bb161SJoe Hershberger * @len: length of received packet 24e95bb161SJoe Hershberger * @return 0 if injected, -EAGAIN if not 25e95bb161SJoe Hershberger */ 26e95bb161SJoe Hershberger int sandbox_eth_arp_req_to_reply(struct udevice *dev, void *packet, 27e95bb161SJoe Hershberger unsigned int len); 28e95bb161SJoe Hershberger 29e95bb161SJoe Hershberger /* 30e95bb161SJoe Hershberger * sandbox_eth_ping_req_to_reply() 31e95bb161SJoe Hershberger * 32e95bb161SJoe Hershberger * Check for a ping request to be sent. If so, inject a reply 33e95bb161SJoe Hershberger * 34e95bb161SJoe Hershberger * @dev: device that received the packet 35e95bb161SJoe Hershberger * @packet: pointer to the received pacaket buffer 36e95bb161SJoe Hershberger * @len: length of received packet 37e95bb161SJoe Hershberger * @return 0 if injected, -EAGAIN if not 38e95bb161SJoe Hershberger */ 39e95bb161SJoe Hershberger int sandbox_eth_ping_req_to_reply(struct udevice *dev, void *packet, 40e95bb161SJoe Hershberger unsigned int len); 41e95bb161SJoe Hershberger 4245988daeSJoe Hershberger /* 4345988daeSJoe Hershberger * sandbox_eth_recv_arp_req() 4445988daeSJoe Hershberger * 4545988daeSJoe Hershberger * Inject an ARP request for this target 4645988daeSJoe Hershberger * 4745988daeSJoe Hershberger * @dev: device that received the packet 4845988daeSJoe Hershberger * @return 0 if injected, -EOVERFLOW if not 4945988daeSJoe Hershberger */ 5045988daeSJoe Hershberger int sandbox_eth_recv_arp_req(struct udevice *dev); 5145988daeSJoe Hershberger 52*72ff0042SJoe Hershberger /* 53*72ff0042SJoe Hershberger * sandbox_eth_recv_ping_req() 54*72ff0042SJoe Hershberger * 55*72ff0042SJoe Hershberger * Inject a ping request for this target 56*72ff0042SJoe Hershberger * 57*72ff0042SJoe Hershberger * @dev: device that received the packet 58*72ff0042SJoe Hershberger * @return 0 if injected, -EOVERFLOW if not 59*72ff0042SJoe Hershberger */ 60*72ff0042SJoe Hershberger int sandbox_eth_recv_ping_req(struct udevice *dev); 61*72ff0042SJoe Hershberger 62c7eb733dSJoe Hershberger /** 63c7eb733dSJoe Hershberger * A packet handler 64c7eb733dSJoe Hershberger * 65c7eb733dSJoe Hershberger * dev - device pointer 66c7eb733dSJoe Hershberger * pkt - pointer to the "sent" packet 67c7eb733dSJoe Hershberger * len - packet length 68c7eb733dSJoe Hershberger */ 69c7eb733dSJoe Hershberger typedef int sandbox_eth_tx_hand_f(struct udevice *dev, void *pkt, 70c7eb733dSJoe Hershberger unsigned int len); 71c7eb733dSJoe Hershberger 7276a50343SJoe Hershberger /** 7376a50343SJoe Hershberger * struct eth_sandbox_priv - memory for sandbox mock driver 7476a50343SJoe Hershberger * 7576a50343SJoe Hershberger * fake_host_hwaddr - MAC address of mocked machine 7676a50343SJoe Hershberger * fake_host_ipaddr - IP address of mocked machine 7776a50343SJoe Hershberger * disabled - Will not respond 78c67a4207SJoe Hershberger * recv_packet_buffer - buffers of the packet returned as received 79c67a4207SJoe Hershberger * recv_packet_length - lengths of the packet returned as received 80c67a4207SJoe Hershberger * recv_packets - number of packets returned 8176a50343SJoe Hershberger * tx_handler - function to generate responses to sent packets 829cbe5972SJoe Hershberger * priv - a pointer to some structure a test may want to keep track of 8376a50343SJoe Hershberger */ 8476a50343SJoe Hershberger struct eth_sandbox_priv { 8576a50343SJoe Hershberger uchar fake_host_hwaddr[ARP_HLEN]; 8676a50343SJoe Hershberger struct in_addr fake_host_ipaddr; 8776a50343SJoe Hershberger bool disabled; 88c67a4207SJoe Hershberger uchar * recv_packet_buffer[PKTBUFSRX]; 89c67a4207SJoe Hershberger int recv_packet_length[PKTBUFSRX]; 90c67a4207SJoe Hershberger int recv_packets; 9176a50343SJoe Hershberger sandbox_eth_tx_hand_f *tx_handler; 929cbe5972SJoe Hershberger void *priv; 9376a50343SJoe Hershberger }; 9476a50343SJoe Hershberger 95c7eb733dSJoe Hershberger /* 96c7eb733dSJoe Hershberger * Set packet handler 97c7eb733dSJoe Hershberger * 98c7eb733dSJoe Hershberger * handler - The func ptr to call on send. If NULL, set to default handler 99c7eb733dSJoe Hershberger */ 100c7eb733dSJoe Hershberger void sandbox_eth_set_tx_handler(int index, sandbox_eth_tx_hand_f *handler); 101c7eb733dSJoe Hershberger 1029cbe5972SJoe Hershberger /* 1039cbe5972SJoe Hershberger * Set priv ptr 1049cbe5972SJoe Hershberger * 1059cbe5972SJoe Hershberger * priv - priv void ptr to store in the device 1069cbe5972SJoe Hershberger */ 1079cbe5972SJoe Hershberger void sandbox_eth_set_priv(int index, void *priv); 1089cbe5972SJoe Hershberger 1092eede1f3SJoe Hershberger #endif /* __ETH_H */ 110