xref: /openbmc/u-boot/arch/sandbox/include/asm/eth-raw-os.h (revision a57d45db90c8de2959b4484cc8f6ba81219a2269)
183d290c5STom Rini /* SPDX-License-Identifier: GPL-2.0 */
2a346ca79SJoe Hershberger /*
3a346ca79SJoe Hershberger  * Copyright (c) 2015 National Instruments
4a346ca79SJoe Hershberger  *
5a346ca79SJoe Hershberger  * (C) Copyright 2015
6a346ca79SJoe Hershberger  * Joe Hershberger <joe.hershberger@ni.com>
7a346ca79SJoe Hershberger  */
8a346ca79SJoe Hershberger 
9a346ca79SJoe Hershberger #ifndef __ETH_RAW_OS_H
10a346ca79SJoe Hershberger #define __ETH_RAW_OS_H
11a346ca79SJoe Hershberger 
128c7988b6SJoe Hershberger #define	IFNAMSIZ	16
138c7988b6SJoe Hershberger 
14a346ca79SJoe Hershberger /**
15a346ca79SJoe Hershberger  * struct eth_sandbox_raw_priv - raw socket session
16a346ca79SJoe Hershberger  *
17a346ca79SJoe Hershberger  * sd: socket descriptor - the open socket during a session
188c7988b6SJoe Hershberger  * host_ifname: interface name on the host to use for sending our packets
198c7988b6SJoe Hershberger  * host_ifindex: interface index number on the host
20a346ca79SJoe Hershberger  * device: struct sockaddr_ll - the host interface packets move to/from
2122f68524SJoe Hershberger  * local: 1 or 0 to select the local interface ('lo') or not
2222f68524SJoe Hershberger  * local_bindsd: socket descriptor to prevent the kernel from sending
2322f68524SJoe Hershberger  *		 a message to the server claiming the port is
2422f68524SJoe Hershberger  *		 unreachable
2522f68524SJoe Hershberger  * local_bind_udp_port: The UDP port number that we bound to
26a346ca79SJoe Hershberger  */
27a346ca79SJoe Hershberger struct eth_sandbox_raw_priv {
28a346ca79SJoe Hershberger 	int sd;
298c7988b6SJoe Hershberger 	char host_ifname[IFNAMSIZ];
308c7988b6SJoe Hershberger 	unsigned int host_ifindex;
31a346ca79SJoe Hershberger 	void *device;
3222f68524SJoe Hershberger 	int local;
3322f68524SJoe Hershberger 	int local_bind_sd;
3422f68524SJoe Hershberger 	unsigned short local_bind_udp_port;
35a346ca79SJoe Hershberger };
36a346ca79SJoe Hershberger 
37*f40a31e6SJoe Hershberger /* A struct to mimic if_nameindex but that does not depend on Linux headers */
38*f40a31e6SJoe Hershberger struct sandbox_eth_raw_if_nameindex {
39*f40a31e6SJoe Hershberger 	unsigned int if_index; /* Index of interface (1, 2, ...) */
40*f40a31e6SJoe Hershberger 	char        *if_name;  /* Null-terminated name ("eth0", etc.) */
41*f40a31e6SJoe Hershberger };
42*f40a31e6SJoe Hershberger 
43*f40a31e6SJoe Hershberger /* Enumerate host network interfaces */
44*f40a31e6SJoe Hershberger struct sandbox_eth_raw_if_nameindex *sandbox_eth_raw_if_nameindex(void);
45*f40a31e6SJoe Hershberger /* Free the data structure of enumerated network interfaces */
46*f40a31e6SJoe Hershberger void sandbox_eth_raw_if_freenameindex(struct sandbox_eth_raw_if_nameindex *ptr);
47*f40a31e6SJoe Hershberger 
48ac13270bSJoe Hershberger /*
49ac13270bSJoe Hershberger  * Check if the interface named "ifname" is a localhost interface or not.
50ac13270bSJoe Hershberger  * ifname - the interface name on the host to check
51ac13270bSJoe Hershberger  *
52ac13270bSJoe Hershberger  * returns - 0 if real interface, 1 if local, negative if error
53ac13270bSJoe Hershberger  */
54ac13270bSJoe Hershberger int sandbox_eth_raw_os_is_local(const char *ifname);
55ac13270bSJoe Hershberger 
56c9e2caffSJoe Hershberger /*
57c9e2caffSJoe Hershberger  * Look up the name of the interface based on the ifindex populated in priv.
58c9e2caffSJoe Hershberger  *
59c9e2caffSJoe Hershberger  * Overwrite the host_ifname member in priv based on looking up host_ifindex
60c9e2caffSJoe Hershberger  *
61c9e2caffSJoe Hershberger  * returns - 0 if success, negative if error
62c9e2caffSJoe Hershberger  */
63c9e2caffSJoe Hershberger int sandbox_eth_raw_os_idx_to_name(struct eth_sandbox_raw_priv *priv);
64c9e2caffSJoe Hershberger 
658c7988b6SJoe Hershberger int sandbox_eth_raw_os_start(struct eth_sandbox_raw_priv *priv,
668c7988b6SJoe Hershberger 			     unsigned char *ethmac);
67a346ca79SJoe Hershberger int sandbox_eth_raw_os_send(void *packet, int length,
6822f68524SJoe Hershberger 			    struct eth_sandbox_raw_priv *priv);
69a346ca79SJoe Hershberger int sandbox_eth_raw_os_recv(void *packet, int *length,
70a346ca79SJoe Hershberger 			    const struct eth_sandbox_raw_priv *priv);
71a346ca79SJoe Hershberger void sandbox_eth_raw_os_stop(struct eth_sandbox_raw_priv *priv);
72a346ca79SJoe Hershberger 
73a346ca79SJoe Hershberger #endif /* __ETH_RAW_OS_H */
74