1  /* SPDX-License-Identifier: GPL-2.0 */
2  /*
3   * Copyright (C) 2002 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)
4   */
5  
6  #ifndef __UM_NET_USER_H__
7  #define __UM_NET_USER_H__
8  
9  #define ETH_ADDR_LEN (6)
10  #define ETH_HEADER_ETHERTAP (16)
11  #define ETH_HEADER_OTHER (26) /* 14 for ethernet + VLAN + MPLS for crazy people */
12  #define ETH_MAX_PACKET (1500)
13  
14  #define UML_NET_VERSION (4)
15  
16  struct net_user_info {
17  	int (*init)(void *, void *);
18  	int (*open)(void *);
19  	void (*close)(int, void *);
20  	void (*remove)(void *);
21  	void (*add_address)(unsigned char *, unsigned char *, void *);
22  	void (*delete_address)(unsigned char *, unsigned char *, void *);
23  	int max_packet;
24  	int mtu;
25  };
26  
27  extern void iter_addresses(void *d, void (*cb)(unsigned char *,
28  					       unsigned char *, void *),
29  			   void *arg);
30  
31  extern void *get_output_buffer(int *len_out);
32  extern void free_output_buffer(void *buffer);
33  
34  extern int tap_open_common(void *dev, char *gate_addr);
35  extern void tap_check_ips(char *gate_addr, unsigned char *eth_addr);
36  
37  extern void read_output(int fd, char *output_out, int len);
38  
39  extern int net_read(int fd, void *buf, int len);
40  extern int net_recvfrom(int fd, void *buf, int len);
41  extern int net_write(int fd, void *buf, int len);
42  extern int net_send(int fd, void *buf, int len);
43  extern int net_sendto(int fd, void *buf, int len, void *to, int sock_len);
44  
45  extern void open_addr(unsigned char *addr, unsigned char *netmask, void *arg);
46  extern void close_addr(unsigned char *addr, unsigned char *netmask, void *arg);
47  
48  extern char *split_if_spec(char *str, ...);
49  
50  extern int dev_netmask(void *d, void *m);
51  
52  #endif
53