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
net
tipc
core.c
Go to the documentation of this file.
1
/*
2
* net/tipc/core.c: TIPC module code
3
*
4
* Copyright (c) 2003-2006, Ericsson AB
5
* Copyright (c) 2005-2006, 2010-2011, Wind River Systems
6
* All rights reserved.
7
*
8
* Redistribution and use in source and binary forms, with or without
9
* modification, are permitted provided that the following conditions are met:
10
*
11
* 1. Redistributions of source code must retain the above copyright
12
* notice, this list of conditions and the following disclaimer.
13
* 2. Redistributions in binary form must reproduce the above copyright
14
* notice, this list of conditions and the following disclaimer in the
15
* documentation and/or other materials provided with the distribution.
16
* 3. Neither the names of the copyright holders nor the names of its
17
* contributors may be used to endorse or promote products derived from
18
* this software without specific prior written permission.
19
*
20
* Alternatively, this software may be distributed under the terms of the
21
* GNU General Public License ("GPL") version 2 as published by the Free
22
* Software Foundation.
23
*
24
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
25
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
28
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
29
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
30
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
31
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
32
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
33
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
34
* POSSIBILITY OF SUCH DAMAGE.
35
*/
36
37
#include "
core.h
"
38
#include "
ref.h
"
39
#include "
name_table.h
"
40
#include "
subscr.h
"
41
#include "
config.h
"
42
43
#include <linux/module.h>
44
45
#ifndef CONFIG_TIPC_PORTS
46
#define CONFIG_TIPC_PORTS 8191
47
#endif
48
49
50
/* global variables used by multiple sub-systems within TIPC */
51
int
tipc_random
__read_mostly
;
52
53
/* configurable TIPC parameters */
54
u32
tipc_own_addr
__read_mostly
;
55
int
tipc_max_ports
__read_mostly
;
56
int
tipc_net_id
__read_mostly
;
57
int
tipc_remote_management
__read_mostly
;
58
59
69
struct
sk_buff
*
tipc_buf_acquire
(
u32
size
)
70
{
71
struct
sk_buff
*
skb
;
72
unsigned
int
buf_size
= (
BUF_HEADROOM
+ size + 3) & ~3
u
;
73
74
skb = alloc_skb_fclone(buf_size,
GFP_ATOMIC
);
75
if
(skb) {
76
skb_reserve(skb,
BUF_HEADROOM
);
77
skb_put
(skb, size);
78
skb->
next
=
NULL
;
79
}
80
return
skb
;
81
}
82
86
static
void
tipc_core_stop_net(
void
)
87
{
88
tipc_net_stop
();
89
tipc_eth_media_stop
();
90
}
91
95
int
tipc_core_start_net
(
unsigned
long
addr
)
96
{
97
int
res
;
98
99
tipc_net_start
(addr);
100
res =
tipc_eth_media_start
();
101
if
(res)
102
tipc_core_stop_net();
103
return
res
;
104
}
105
109
static
void
tipc_core_stop(
void
)
110
{
111
tipc_netlink_stop
();
112
tipc_handler_stop
();
113
tipc_cfg_stop
();
114
tipc_subscr_stop
();
115
tipc_nametbl_stop
();
116
tipc_ref_table_stop
();
117
tipc_socket_stop
();
118
}
119
123
static
int
tipc_core_start(
void
)
124
{
125
int
res
;
126
127
get_random_bytes
(&tipc_random,
sizeof
(tipc_random));
128
129
res =
tipc_handler_start
();
130
if
(!res)
131
res =
tipc_ref_table_init
(tipc_max_ports, tipc_random);
132
if
(!res)
133
res =
tipc_nametbl_init
();
134
if
(!res)
135
res =
tipc_subscr_start
();
136
if
(!res)
137
res =
tipc_cfg_init
();
138
if
(!res)
139
res =
tipc_netlink_start
();
140
if
(!res)
141
res =
tipc_socket_init
();
142
if
(res)
143
tipc_core_stop();
144
145
return
res
;
146
}
147
148
149
static
int
__init
tipc_init(
void
)
150
{
151
int
res
;
152
153
pr_info
(
"Activated (version "
TIPC_MOD_VER
")\n"
);
154
155
tipc_own_addr = 0;
156
tipc_remote_management = 1;
157
tipc_max_ports =
CONFIG_TIPC_PORTS
;
158
tipc_net_id = 4711;
159
160
res = tipc_core_start();
161
if
(res)
162
pr_err
(
"Unable to start in single node mode\n"
);
163
else
164
pr_info
(
"Started in single node mode\n"
);
165
return
res
;
166
}
167
168
static
void
__exit
tipc_exit(
void
)
169
{
170
tipc_core_stop_net();
171
tipc_core_stop();
172
pr_info
(
"Deactivated\n"
);
173
}
174
175
module_init
(tipc_init);
176
module_exit
(tipc_exit);
177
178
MODULE_DESCRIPTION
(
"TIPC: Transparent Inter Process Communication"
);
179
MODULE_LICENSE
(
"Dual BSD/GPL"
);
180
MODULE_VERSION
(
TIPC_MOD_VER
);
Generated on Thu Jan 10 2013 12:58:04 for Linux Kernel by
1.8.2