Blame view

arch/um/drivers/slip_kern.c 2.03 KB
cd1ae0e49   Jeff Dike   uml: network form...
1
2
3
4
5
6
7
8
  /*
   * Copyright (C) 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)
   * Licensed under the GPL.
   */
  
  #include <linux/if_arp.h>
  #include <linux/init.h>
  #include <linux/netdevice.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
9
  #include "net_kern.h"
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
10
11
12
13
14
  #include "slip.h"
  
  struct slip_init {
  	char *gate_addr;
  };
074a0db8e   WANG Cong   uml: make several...
15
  static void slip_init(struct net_device *dev, void *data)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
16
17
18
19
  {
  	struct uml_net_private *private;
  	struct slip_data *spri;
  	struct slip_init *init = data;
17c324fa8   Wang Chen   um: Kill directly...
20
  	private = netdev_priv(dev);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
21
  	spri = (struct slip_data *) private->user;
854e981cc   Paolo 'Blaisorblade' Giarrusso   [PATCH] uml: fix ...
22
23
24
25
26
27
28
29
  
  	memset(spri->name, 0, sizeof(spri->name));
  	spri->addr = NULL;
  	spri->gate_addr = init->gate_addr;
  	spri->slave = -1;
  	spri->dev = dev;
  
  	slip_proto_init(&spri->slip);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
30

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
31
  	dev->hard_header_len = 0;
be8ad5a40   Jeff Dike   [UMP]: header_ops...
32
  	dev->header_ops = NULL;
a3c77c67a   Jeff Dike   [PATCH] uml: slir...
33
34
  	dev->addr_len = 0;
  	dev->type = ARPHRD_SLIP;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
35
36
37
38
39
40
41
42
  	dev->tx_queue_len = 256;
  	dev->flags = IFF_NOARP;
  	printk("SLIP backend - SLIP IP = %s
  ", spri->gate_addr);
  }
  
  static unsigned short slip_protocol(struct sk_buff *skbuff)
  {
cd1ae0e49   Jeff Dike   uml: network form...
43
  	return htons(ETH_P_IP);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
44
  }
b53f35a80   Jeff Dike   uml: network driv...
45
  static int slip_read(int fd, struct sk_buff *skb, struct uml_net_private *lp)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
46
  {
b53f35a80   Jeff Dike   uml: network driv...
47
  	return slip_user_read(fd, skb_mac_header(skb), skb->dev->mtu,
cd1ae0e49   Jeff Dike   uml: network form...
48
  			      (struct slip_data *) &lp->user);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
49
  }
b53f35a80   Jeff Dike   uml: network driv...
50
  static int slip_write(int fd, struct sk_buff *skb, struct uml_net_private *lp)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
51
  {
b53f35a80   Jeff Dike   uml: network driv...
52
  	return slip_user_write(fd, skb->data, skb->len,
cd1ae0e49   Jeff Dike   uml: network form...
53
  			       (struct slip_data *) &lp->user);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
54
  }
074a0db8e   WANG Cong   uml: make several...
55
  static const struct net_kern_info slip_kern_info = {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
56
57
58
59
60
61
62
63
64
  	.init			= slip_init,
  	.protocol		= slip_protocol,
  	.read			= slip_read,
  	.write			= slip_write,
  };
  
  static int slip_setup(char *str, char **mac_out, void *data)
  {
  	struct slip_init *init = data;
cd1ae0e49   Jeff Dike   uml: network form...
65
  	*init = ((struct slip_init) { .gate_addr = NULL });
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
66

cd1ae0e49   Jeff Dike   uml: network form...
67
  	if (str[0] != '\0')
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
68
  		init->gate_addr = str;
cd1ae0e49   Jeff Dike   uml: network form...
69
  	return 1;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
  }
  
  static struct transport slip_transport = {
  	.list 		= LIST_HEAD_INIT(slip_transport.list),
  	.name 		= "slip",
  	.setup  	= slip_setup,
  	.user 		= &slip_user_info,
  	.kern 		= &slip_kern_info,
  	.private_size 	= sizeof(struct slip_data),
  	.setup_size 	= sizeof(struct slip_init),
  };
  
  static int register_slip(void)
  {
  	register_transport(&slip_transport);
f4c57a78e   Jeff Dike   [PATCH] uml: fix ...
85
  	return 0;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
86
  }
8210fd2a9   Jeff Dike   [PATCH] uml: use ...
87
  late_initcall(register_slip);