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
daemon_kern.c
Go to the documentation of this file.
1
/*
2
* Copyright (C) 2001 Lennert Buytenhek (
[email protected]
) and
3
* James Leu (
[email protected]
).
4
* Copyright (C) 2001 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)
5
* Copyright (C) 2001 by various other people who didn't put their name here.
6
* Licensed under the GPL.
7
*/
8
9
#include <
linux/init.h
>
10
#include <linux/netdevice.h>
11
#include <
net_kern.h
>
12
#include "
daemon.h
"
13
14
struct
daemon_init
{
15
char
*
sock_type
;
16
char
*
ctl_sock
;
17
};
18
19
static
void
daemon_init
(
struct
net_device
*
dev
,
void
*
data
)
20
{
21
struct
uml_net_private
*
pri
;
22
struct
daemon_data
*dpri;
23
struct
daemon_init
*
init
=
data
;
24
25
pri = netdev_priv(dev);
26
dpri = (
struct
daemon_data
*) pri->
user
;
27
dpri->
sock_type
= init->
sock_type
;
28
dpri->
ctl_sock
= init->
ctl_sock
;
29
dpri->
fd
= -1;
30
dpri->
control
= -1;
31
dpri->
dev
= dev;
32
/* We will free this pointer. If it contains crap we're burned. */
33
dpri->
ctl_addr
=
NULL
;
34
dpri->
data_addr
=
NULL
;
35
dpri->
local_addr
=
NULL
;
36
37
printk
(
"daemon backend (uml_switch version %d) - %s:%s"
,
38
SWITCH_VERSION
, dpri->
sock_type
, dpri->
ctl_sock
);
39
printk
(
"\n"
);
40
}
41
42
static
int
daemon_read(
int
fd
,
struct
sk_buff
*
skb
,
struct
uml_net_private
*
lp
)
43
{
44
return
net_recvfrom
(fd, skb_mac_header(skb),
45
skb->
dev
->mtu +
ETH_HEADER_OTHER
);
46
}
47
48
static
int
daemon_write(
int
fd,
struct
sk_buff
*skb,
struct
uml_net_private
*lp)
49
{
50
return
daemon_user_write
(fd, skb->
data
, skb->
len
,
51
(
struct
daemon_data
*) &lp->
user
);
52
}
53
54
static
const
struct
net_kern_info
daemon_kern_info = {
55
.init =
daemon_init
,
56
.protocol =
eth_protocol
,
57
.read = daemon_read,
58
.write = daemon_write,
59
};
60
61
static
int
daemon_setup(
char
*
str
,
char
**mac_out,
void
*
data
)
62
{
63
struct
daemon_init
*
init
=
data
;
64
char
*remain;
65
66
*init = ((
struct
daemon_init
)
67
{ .sock_type =
"unix"
,
68
.ctl_sock =
"/tmp/uml.ctl"
});
69
70
remain =
split_if_spec
(str, mac_out, &init->
sock_type
, &init->
ctl_sock
,
71
NULL
);
72
if
(remain !=
NULL
)
73
printk
(
KERN_WARNING
"daemon_setup : Ignoring data socket "
74
"specification\n"
);
75
76
return
1;
77
}
78
79
static
struct
transport
daemon_transport = {
80
.list =
LIST_HEAD_INIT
(daemon_transport.
list
),
81
.name =
"daemon"
,
82
.setup = daemon_setup,
83
.user = &
daemon_user_info
,
84
.kern = &daemon_kern_info,
85
.private_size =
sizeof
(
struct
daemon_data
),
86
.setup_size =
sizeof
(
struct
daemon_init
),
87
};
88
89
static
int
register_daemon(
void
)
90
{
91
register_transport
(&daemon_transport);
92
return
0;
93
}
94
95
late_initcall
(register_daemon);
Generated on Thu Jan 10 2013 13:19:14 for Linux Kernel by
1.8.2