| 
									
										
										
										
											2007-02-10 01:43:56 -08:00
										 |  |  | /*
 | 
					
						
							| 
									
										
										
										
											2007-10-16 01:27:31 -07:00
										 |  |  |  * Copyright (C) 2002 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com) | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  |  * Licensed under the GPL | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifndef __UM_NET_KERN_H
 | 
					
						
							|  |  |  | #define __UM_NET_KERN_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-11-01 15:14:05 +00:00
										 |  |  | #include <linux/netdevice.h>
 | 
					
						
							|  |  |  | #include <linux/platform_device.h>
 | 
					
						
							|  |  |  | #include <linux/skbuff.h>
 | 
					
						
							|  |  |  | #include <linux/socket.h>
 | 
					
						
							|  |  |  | #include <linux/list.h>
 | 
					
						
							| 
									
										
										
										
											2006-12-13 00:33:50 -08:00
										 |  |  | #include <linux/workqueue.h>
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | struct uml_net { | 
					
						
							|  |  |  | 	struct list_head list; | 
					
						
							|  |  |  | 	struct net_device *dev; | 
					
						
							|  |  |  | 	struct platform_device pdev; | 
					
						
							|  |  |  | 	int index; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct uml_net_private { | 
					
						
							|  |  |  | 	struct list_head list; | 
					
						
							|  |  |  | 	spinlock_t lock; | 
					
						
							|  |  |  | 	struct net_device *dev; | 
					
						
							|  |  |  | 	struct timer_list tl; | 
					
						
							| 
									
										
										
										
											2009-03-26 15:11:16 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-12-13 00:33:50 -08:00
										 |  |  | 	struct work_struct work; | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 	int fd; | 
					
						
							|  |  |  | 	unsigned char mac[ETH_ALEN]; | 
					
						
							| 
									
										
										
										
											2007-10-16 01:27:31 -07:00
										 |  |  | 	int max_packet; | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 	unsigned short (*protocol)(struct sk_buff *); | 
					
						
							|  |  |  | 	int (*open)(void *); | 
					
						
							|  |  |  | 	void (*close)(int, void *); | 
					
						
							|  |  |  | 	void (*remove)(void *); | 
					
						
							| 
									
										
										
										
											2007-10-16 01:27:31 -07:00
										 |  |  | 	int (*read)(int, struct sk_buff *skb, struct uml_net_private *); | 
					
						
							|  |  |  | 	int (*write)(int, struct sk_buff *skb, struct uml_net_private *); | 
					
						
							| 
									
										
										
										
											2007-02-10 01:43:56 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 	void (*add_address)(unsigned char *, unsigned char *, void *); | 
					
						
							|  |  |  | 	void (*delete_address)(unsigned char *, unsigned char *, void *); | 
					
						
							| 
									
										
										
										
											2007-05-06 14:51:15 -07:00
										 |  |  | 	char user[0]; | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct net_kern_info { | 
					
						
							|  |  |  | 	void (*init)(struct net_device *, void *); | 
					
						
							|  |  |  | 	unsigned short (*protocol)(struct sk_buff *); | 
					
						
							| 
									
										
										
										
											2007-10-16 01:27:31 -07:00
										 |  |  | 	int (*read)(int, struct sk_buff *skb, struct uml_net_private *); | 
					
						
							|  |  |  | 	int (*write)(int, struct sk_buff *skb, struct uml_net_private *); | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct transport { | 
					
						
							|  |  |  | 	struct list_head list; | 
					
						
							| 
									
										
										
										
											2007-02-10 01:43:56 -08:00
										 |  |  | 	const char *name; | 
					
						
							|  |  |  | 	int (* const setup)(char *, char **, void *); | 
					
						
							| 
									
										
										
										
											2006-09-27 01:50:33 -07:00
										 |  |  | 	const struct net_user_info *user; | 
					
						
							|  |  |  | 	const struct net_kern_info *kern; | 
					
						
							| 
									
										
										
										
											2007-02-10 01:43:56 -08:00
										 |  |  | 	const int private_size; | 
					
						
							|  |  |  | 	const int setup_size; | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | extern struct net_device *ether_init(int); | 
					
						
							|  |  |  | extern unsigned short ether_protocol(struct sk_buff *); | 
					
						
							| 
									
										
										
										
											2007-02-10 01:43:56 -08:00
										 |  |  | extern int tap_setup_common(char *str, char *type, char **dev_name, | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 			    char **mac_out, char **gate_addr); | 
					
						
							|  |  |  | extern void register_transport(struct transport *new); | 
					
						
							|  |  |  | extern unsigned short eth_protocol(struct sk_buff *skb); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif
 |