blob: 477fa00fad86886170a803b747a05fe6d929891b [file] [log] [blame]
Tom Rini83d290c2018-05-06 17:58:06 -04001/* SPDX-License-Identifier: GPL-2.0 */
Joe Hershberger2eede1f2015-03-22 17:09:19 -05002/*
3 * Copyright (c) 2015 National Instruments
4 *
5 * (C) Copyright 2015
6 * Joe Hershberger <joe.hershberger@ni.com>
Joe Hershberger2eede1f2015-03-22 17:09:19 -05007 */
8
9#ifndef __ETH_H
10#define __ETH_H
11
12void sandbox_eth_disable_response(int index, bool disable);
13
Joe Hershberger6f2707c2015-04-21 13:57:19 -050014void sandbox_eth_skip_timeout(void);
15
Joe Hershbergere95bb162018-09-26 16:48:54 -050016/*
17 * sandbox_eth_arp_req_to_reply()
18 *
19 * Check for an arp request to be sent. If so, inject a reply
20 *
21 * @dev: device that received the packet
22 * @packet: pointer to the received pacaket buffer
23 * @len: length of received packet
24 * @return 0 if injected, -EAGAIN if not
25 */
26int sandbox_eth_arp_req_to_reply(struct udevice *dev, void *packet,
27 unsigned int len);
28
29/*
30 * sandbox_eth_ping_req_to_reply()
31 *
32 * Check for a ping request to be sent. If so, inject a reply
33 *
34 * @dev: device that received the packet
35 * @packet: pointer to the received pacaket buffer
36 * @len: length of received packet
37 * @return 0 if injected, -EAGAIN if not
38 */
39int sandbox_eth_ping_req_to_reply(struct udevice *dev, void *packet,
40 unsigned int len);
41
Joe Hershberger45988da2018-09-26 16:49:00 -050042/*
43 * sandbox_eth_recv_arp_req()
44 *
45 * Inject an ARP request for this target
46 *
47 * @dev: device that received the packet
48 * @return 0 if injected, -EOVERFLOW if not
49 */
50int sandbox_eth_recv_arp_req(struct udevice *dev);
51
Joe Hershberger72ff0042018-09-26 16:49:01 -050052/*
53 * sandbox_eth_recv_ping_req()
54 *
55 * Inject a ping request for this target
56 *
57 * @dev: device that received the packet
58 * @return 0 if injected, -EOVERFLOW if not
59 */
60int sandbox_eth_recv_ping_req(struct udevice *dev);
61
Joe Hershbergerc7eb7332018-09-26 16:48:55 -050062/**
63 * A packet handler
64 *
65 * dev - device pointer
66 * pkt - pointer to the "sent" packet
67 * len - packet length
68 */
69typedef int sandbox_eth_tx_hand_f(struct udevice *dev, void *pkt,
70 unsigned int len);
71
Joe Hershberger76a50342018-09-26 16:48:56 -050072/**
73 * struct eth_sandbox_priv - memory for sandbox mock driver
74 *
75 * fake_host_hwaddr - MAC address of mocked machine
76 * fake_host_ipaddr - IP address of mocked machine
77 * disabled - Will not respond
Joe Hershbergerc67a4202018-09-26 16:48:57 -050078 * recv_packet_buffer - buffers of the packet returned as received
79 * recv_packet_length - lengths of the packet returned as received
80 * recv_packets - number of packets returned
Joe Hershberger76a50342018-09-26 16:48:56 -050081 * tx_handler - function to generate responses to sent packets
Joe Hershberger9cbe5972018-09-26 16:48:59 -050082 * priv - a pointer to some structure a test may want to keep track of
Joe Hershberger76a50342018-09-26 16:48:56 -050083 */
84struct eth_sandbox_priv {
85 uchar fake_host_hwaddr[ARP_HLEN];
86 struct in_addr fake_host_ipaddr;
87 bool disabled;
Joe Hershbergerc67a4202018-09-26 16:48:57 -050088 uchar * recv_packet_buffer[PKTBUFSRX];
89 int recv_packet_length[PKTBUFSRX];
90 int recv_packets;
Joe Hershberger76a50342018-09-26 16:48:56 -050091 sandbox_eth_tx_hand_f *tx_handler;
Joe Hershberger9cbe5972018-09-26 16:48:59 -050092 void *priv;
Joe Hershberger76a50342018-09-26 16:48:56 -050093};
94
Joe Hershbergerc7eb7332018-09-26 16:48:55 -050095/*
96 * Set packet handler
97 *
98 * handler - The func ptr to call on send. If NULL, set to default handler
99 */
100void sandbox_eth_set_tx_handler(int index, sandbox_eth_tx_hand_f *handler);
101
Joe Hershberger9cbe5972018-09-26 16:48:59 -0500102/*
103 * Set priv ptr
104 *
105 * priv - priv void ptr to store in the device
106 */
107void sandbox_eth_set_priv(int index, void *priv);
108
Joe Hershberger2eede1f2015-03-22 17:09:19 -0500109#endif /* __ETH_H */