xref: /OK3568_Linux_fs/kernel/arch/um/include/shared/net_kern.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * Copyright (C) 2002 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)
4*4882a593Smuzhiyun  */
5*4882a593Smuzhiyun 
6*4882a593Smuzhiyun #ifndef __UM_NET_KERN_H
7*4882a593Smuzhiyun #define __UM_NET_KERN_H
8*4882a593Smuzhiyun 
9*4882a593Smuzhiyun #include <linux/netdevice.h>
10*4882a593Smuzhiyun #include <linux/platform_device.h>
11*4882a593Smuzhiyun #include <linux/skbuff.h>
12*4882a593Smuzhiyun #include <linux/socket.h>
13*4882a593Smuzhiyun #include <linux/list.h>
14*4882a593Smuzhiyun #include <linux/workqueue.h>
15*4882a593Smuzhiyun 
16*4882a593Smuzhiyun struct uml_net {
17*4882a593Smuzhiyun 	struct list_head list;
18*4882a593Smuzhiyun 	struct net_device *dev;
19*4882a593Smuzhiyun 	struct platform_device pdev;
20*4882a593Smuzhiyun 	int index;
21*4882a593Smuzhiyun };
22*4882a593Smuzhiyun 
23*4882a593Smuzhiyun struct uml_net_private {
24*4882a593Smuzhiyun 	struct list_head list;
25*4882a593Smuzhiyun 	spinlock_t lock;
26*4882a593Smuzhiyun 	struct net_device *dev;
27*4882a593Smuzhiyun 	struct timer_list tl;
28*4882a593Smuzhiyun 
29*4882a593Smuzhiyun 	struct work_struct work;
30*4882a593Smuzhiyun 	int fd;
31*4882a593Smuzhiyun 	unsigned char mac[ETH_ALEN];
32*4882a593Smuzhiyun 	int max_packet;
33*4882a593Smuzhiyun 	unsigned short (*protocol)(struct sk_buff *);
34*4882a593Smuzhiyun 	int (*open)(void *);
35*4882a593Smuzhiyun 	void (*close)(int, void *);
36*4882a593Smuzhiyun 	void (*remove)(void *);
37*4882a593Smuzhiyun 	int (*read)(int, struct sk_buff *skb, struct uml_net_private *);
38*4882a593Smuzhiyun 	int (*write)(int, struct sk_buff *skb, struct uml_net_private *);
39*4882a593Smuzhiyun 
40*4882a593Smuzhiyun 	void (*add_address)(unsigned char *, unsigned char *, void *);
41*4882a593Smuzhiyun 	void (*delete_address)(unsigned char *, unsigned char *, void *);
42*4882a593Smuzhiyun 	char user[0];
43*4882a593Smuzhiyun };
44*4882a593Smuzhiyun 
45*4882a593Smuzhiyun struct net_kern_info {
46*4882a593Smuzhiyun 	void (*init)(struct net_device *, void *);
47*4882a593Smuzhiyun 	unsigned short (*protocol)(struct sk_buff *);
48*4882a593Smuzhiyun 	int (*read)(int, struct sk_buff *skb, struct uml_net_private *);
49*4882a593Smuzhiyun 	int (*write)(int, struct sk_buff *skb, struct uml_net_private *);
50*4882a593Smuzhiyun };
51*4882a593Smuzhiyun 
52*4882a593Smuzhiyun struct transport {
53*4882a593Smuzhiyun 	struct list_head list;
54*4882a593Smuzhiyun 	const char *name;
55*4882a593Smuzhiyun 	int (* const setup)(char *, char **, void *);
56*4882a593Smuzhiyun 	const struct net_user_info *user;
57*4882a593Smuzhiyun 	const struct net_kern_info *kern;
58*4882a593Smuzhiyun 	const int private_size;
59*4882a593Smuzhiyun 	const int setup_size;
60*4882a593Smuzhiyun };
61*4882a593Smuzhiyun 
62*4882a593Smuzhiyun extern struct net_device *ether_init(int);
63*4882a593Smuzhiyun extern unsigned short ether_protocol(struct sk_buff *);
64*4882a593Smuzhiyun extern int tap_setup_common(char *str, char *type, char **dev_name,
65*4882a593Smuzhiyun 			    char **mac_out, char **gate_addr);
66*4882a593Smuzhiyun extern void register_transport(struct transport *new);
67*4882a593Smuzhiyun extern unsigned short eth_protocol(struct sk_buff *skb);
68*4882a593Smuzhiyun extern void uml_net_setup_etheraddr(struct net_device *dev, char *str);
69*4882a593Smuzhiyun 
70*4882a593Smuzhiyun 
71*4882a593Smuzhiyun #endif
72