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