0001
0002
0003
0004
0005
0006 #ifndef __UM_NET_KERN_H
0007 #define __UM_NET_KERN_H
0008
0009 #include <linux/netdevice.h>
0010 #include <linux/platform_device.h>
0011 #include <linux/skbuff.h>
0012 #include <linux/socket.h>
0013 #include <linux/list.h>
0014 #include <linux/workqueue.h>
0015
0016 struct uml_net {
0017 struct list_head list;
0018 struct net_device *dev;
0019 struct platform_device pdev;
0020 int index;
0021 };
0022
0023 struct uml_net_private {
0024 struct list_head list;
0025 spinlock_t lock;
0026 struct net_device *dev;
0027 struct timer_list tl;
0028
0029 struct work_struct work;
0030 int fd;
0031 unsigned char mac[ETH_ALEN];
0032 int max_packet;
0033 unsigned short (*protocol)(struct sk_buff *);
0034 int (*open)(void *);
0035 void (*close)(int, void *);
0036 void (*remove)(void *);
0037 int (*read)(int, struct sk_buff *skb, struct uml_net_private *);
0038 int (*write)(int, struct sk_buff *skb, struct uml_net_private *);
0039
0040 void (*add_address)(unsigned char *, unsigned char *, void *);
0041 void (*delete_address)(unsigned char *, unsigned char *, void *);
0042 char user[];
0043 };
0044
0045 struct net_kern_info {
0046 void (*init)(struct net_device *, void *);
0047 unsigned short (*protocol)(struct sk_buff *);
0048 int (*read)(int, struct sk_buff *skb, struct uml_net_private *);
0049 int (*write)(int, struct sk_buff *skb, struct uml_net_private *);
0050 };
0051
0052 struct transport {
0053 struct list_head list;
0054 const char *name;
0055 int (* const setup)(char *, char **, void *);
0056 const struct net_user_info *user;
0057 const struct net_kern_info *kern;
0058 const int private_size;
0059 const int setup_size;
0060 };
0061
0062 extern int tap_setup_common(char *str, char *type, char **dev_name,
0063 char **mac_out, char **gate_addr);
0064 extern void register_transport(struct transport *new);
0065 extern unsigned short eth_protocol(struct sk_buff *skb);
0066 extern void uml_net_setup_etheraddr(struct net_device *dev, char *str);
0067
0068
0069 #endif