Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
arch
um
drivers
slip_kern.c
Go to the documentation of this file.
1
/*
2
* Copyright (C) 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)
3
* Licensed under the GPL.
4
*/
5
6
#include <linux/if_arp.h>
7
#include <
linux/init.h
>
8
#include <linux/netdevice.h>
9
#include <
net_kern.h
>
10
#include "
slip.h
"
11
12
struct
slip_init
{
13
char
*
gate_addr
;
14
};
15
16
static
void
slip_init
(
struct
net_device
*
dev
,
void
*
data
)
17
{
18
struct
uml_net_private
*
private
;
19
struct
slip_data
*spri;
20
struct
slip_init
*
init
=
data
;
21
22
private
= netdev_priv(dev);
23
spri = (
struct
slip_data
*) private->user;
24
25
memset
(spri->
name
, 0,
sizeof
(spri->
name
));
26
spri->
addr
=
NULL
;
27
spri->
gate_addr
= init->
gate_addr
;
28
spri->
slave
= -1;
29
spri->
dev
=
dev
;
30
31
slip_proto_init(&spri->
slip
);
32
33
dev->
hard_header_len
= 0;
34
dev->
header_ops
=
NULL
;
35
dev->
addr_len
= 0;
36
dev->
type
=
ARPHRD_SLIP
;
37
dev->
tx_queue_len
= 256;
38
dev->
flags
=
IFF_NOARP
;
39
printk
(
"SLIP backend - SLIP IP = %s\n"
, spri->
gate_addr
);
40
}
41
42
static
unsigned
short
slip_protocol(
struct
sk_buff
*skbuff)
43
{
44
return
htons
(
ETH_P_IP
);
45
}
46
47
static
int
slip_read(
int
fd
,
struct
sk_buff
*
skb
,
struct
uml_net_private
*
lp
)
48
{
49
return
slip_user_read
(fd, skb_mac_header(skb), skb->
dev
->mtu,
50
(
struct
slip_data
*) &lp->
user
);
51
}
52
53
static
int
slip_write(
int
fd,
struct
sk_buff
*skb,
struct
uml_net_private
*lp)
54
{
55
return
slip_user_write
(fd, skb->
data
, skb->
len
,
56
(
struct
slip_data
*) &lp->
user
);
57
}
58
59
static
const
struct
net_kern_info
slip_kern_info = {
60
.init =
slip_init
,
61
.protocol = slip_protocol,
62
.read = slip_read,
63
.write = slip_write,
64
};
65
66
static
int
slip_setup(
char
*
str
,
char
**mac_out,
void
*
data
)
67
{
68
struct
slip_init
*
init
=
data
;
69
70
*init = ((
struct
slip_init
) { .gate_addr =
NULL
});
71
72
if
(str[0] !=
'\0'
)
73
init->
gate_addr
=
str
;
74
return
1;
75
}
76
77
static
struct
transport
slip_transport = {
78
.list =
LIST_HEAD_INIT
(slip_transport.
list
),
79
.name =
"slip"
,
80
.setup = slip_setup,
81
.user = &
slip_user_info
,
82
.kern = &slip_kern_info,
83
.private_size =
sizeof
(
struct
slip_data
),
84
.setup_size =
sizeof
(
struct
slip_init
),
85
};
86
87
static
int
register_slip(
void
)
88
{
89
register_transport
(&slip_transport);
90
return
0;
91
}
92
93
late_initcall
(register_slip);
Generated on Thu Jan 10 2013 13:19:25 for Linux Kernel by
1.8.2