Blame view
arch/um/drivers/slip_kern.c
2.03 KB
cd1ae0e49 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 Linux-2.6.12-rc2 |
9 |
#include "net_kern.h" |
1da177e4c Linux-2.6.12-rc2 |
10 11 12 13 14 |
#include "slip.h" struct slip_init { char *gate_addr; }; |
074a0db8e uml: make several... |
15 |
static void slip_init(struct net_device *dev, void *data) |
1da177e4c Linux-2.6.12-rc2 |
16 17 18 19 |
{ struct uml_net_private *private; struct slip_data *spri; struct slip_init *init = data; |
17c324fa8 um: Kill directly... |
20 |
private = netdev_priv(dev); |
1da177e4c Linux-2.6.12-rc2 |
21 |
spri = (struct slip_data *) private->user; |
854e981cc [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 Linux-2.6.12-rc2 |
30 |
|
1da177e4c Linux-2.6.12-rc2 |
31 |
dev->hard_header_len = 0; |
be8ad5a40 [UMP]: header_ops... |
32 |
dev->header_ops = NULL; |
a3c77c67a [PATCH] uml: slir... |
33 34 |
dev->addr_len = 0; dev->type = ARPHRD_SLIP; |
1da177e4c 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 uml: network form... |
43 |
return htons(ETH_P_IP); |
1da177e4c Linux-2.6.12-rc2 |
44 |
} |
b53f35a80 uml: network driv... |
45 |
static int slip_read(int fd, struct sk_buff *skb, struct uml_net_private *lp) |
1da177e4c Linux-2.6.12-rc2 |
46 |
{ |
b53f35a80 uml: network driv... |
47 |
return slip_user_read(fd, skb_mac_header(skb), skb->dev->mtu, |
cd1ae0e49 uml: network form... |
48 |
(struct slip_data *) &lp->user); |
1da177e4c Linux-2.6.12-rc2 |
49 |
} |
b53f35a80 uml: network driv... |
50 |
static int slip_write(int fd, struct sk_buff *skb, struct uml_net_private *lp) |
1da177e4c Linux-2.6.12-rc2 |
51 |
{ |
b53f35a80 uml: network driv... |
52 |
return slip_user_write(fd, skb->data, skb->len, |
cd1ae0e49 uml: network form... |
53 |
(struct slip_data *) &lp->user); |
1da177e4c Linux-2.6.12-rc2 |
54 |
} |
074a0db8e uml: make several... |
55 |
static const struct net_kern_info slip_kern_info = { |
1da177e4c 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 uml: network form... |
65 |
*init = ((struct slip_init) { .gate_addr = NULL }); |
1da177e4c Linux-2.6.12-rc2 |
66 |
|
cd1ae0e49 uml: network form... |
67 |
if (str[0] != '\0') |
1da177e4c Linux-2.6.12-rc2 |
68 |
init->gate_addr = str; |
cd1ae0e49 uml: network form... |
69 |
return 1; |
1da177e4c 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 [PATCH] uml: fix ... |
85 |
return 0; |
1da177e4c Linux-2.6.12-rc2 |
86 |
} |
8210fd2a9 [PATCH] uml: use ... |
87 |
late_initcall(register_slip); |