*/
DEFINE_RWLOCK(tipc_net_lock);
-struct network tipc_net;
+struct tipc_node **tipc_nodes;
+u32 tipc_highest_node;
+atomic_t tipc_num_links;
static int net_start(void)
{
- tipc_net.nodes = kcalloc(tipc_max_nodes + 1,
- sizeof(*tipc_net.nodes), GFP_ATOMIC);
- tipc_net.highest_node = 0;
- atomic_set(&tipc_net.links, 0);
+ tipc_nodes = kcalloc(tipc_max_nodes + 1,
+ sizeof(*tipc_nodes), GFP_ATOMIC);
+ tipc_highest_node = 0;
+ atomic_set(&tipc_num_links, 0);
- return tipc_net.nodes ? 0 : -ENOMEM;
+ return tipc_nodes ? 0 : -ENOMEM;
}
static void net_stop(void)
{
u32 n_num;
- for (n_num = 1; n_num <= tipc_net.highest_node; n_num++)
- tipc_node_delete(tipc_net.nodes[n_num]);
- kfree(tipc_net.nodes);
- tipc_net.nodes = NULL;
+ for (n_num = 1; n_num <= tipc_highest_node; n_num++)
+ tipc_node_delete(tipc_nodes[n_num]);
+ kfree(tipc_nodes);
+ tipc_nodes = NULL;
}
static void net_route_named_msg(struct sk_buff *buf)
struct tipc_node;
-/**
- * struct network - TIPC network structure
- * @nodes: array of pointers to all nodes within cluster
- * @highest_node: id of highest numbered node within cluster
- * @links: number of (unicast) links to cluster
- */
-
-struct network {
- struct tipc_node **nodes;
- u32 highest_node;
- atomic_t links;
-};
-
+extern struct tipc_node **tipc_nodes;
+extern u32 tipc_highest_node;
+extern atomic_t tipc_num_links;
-extern struct network tipc_net;
extern rwlock_t tipc_net_lock;
void tipc_net_route_msg(struct sk_buff *buf);
INIT_LIST_HEAD(&n_ptr->nsub);
n_num = tipc_node(addr);
- tipc_net.nodes[n_num] = n_ptr;
- if (n_num > tipc_net.highest_node)
- tipc_net.highest_node = n_num;
+ tipc_nodes[n_num] = n_ptr;
+ if (n_num > tipc_highest_node)
+ tipc_highest_node = n_num;
spin_unlock_bh(&node_create_lock);
return n_ptr;
return;
n_num = tipc_node(n_ptr->addr);
- tipc_net.nodes[n_num] = NULL;
+ tipc_nodes[n_num] = NULL;
kfree(n_ptr);
- while (!tipc_net.nodes[tipc_net.highest_node])
- if (--tipc_net.highest_node == 0)
+ while (!tipc_nodes[tipc_highest_node])
+ if (--tipc_highest_node == 0)
break;
}
if (!n_ptr->links[bearer_id]) {
n_ptr->links[bearer_id] = l_ptr;
- atomic_inc(&tipc_net.links);
+ atomic_inc(&tipc_num_links);
n_ptr->link_cnt++;
return n_ptr;
}
void tipc_node_detach_link(struct tipc_node *n_ptr, struct link *l_ptr)
{
n_ptr->links[l_ptr->b_ptr->identity] = NULL;
- atomic_dec(&tipc_net.links);
+ atomic_dec(&tipc_num_links);
n_ptr->link_cnt--;
}
" (network address)");
read_lock_bh(&tipc_net_lock);
- if (!tipc_net.nodes) {
+ if (!tipc_nodes) {
read_unlock_bh(&tipc_net_lock);
return tipc_cfg_reply_none();
}
/* For now, get space for all other nodes */
payload_size = TLV_SPACE(sizeof(node_info)) *
- (tipc_net.highest_node - 1);
+ (tipc_highest_node - 1);
if (payload_size > 32768u) {
read_unlock_bh(&tipc_net_lock);
return tipc_cfg_reply_error_string(TIPC_CFG_NOT_SUPPORTED
/* Add TLVs for all nodes in scope */
- for (n_num = 1; n_num <= tipc_net.highest_node; n_num++) {
- n_ptr = tipc_net.nodes[n_num];
+ for (n_num = 1; n_num <= tipc_highest_node; n_num++) {
+ n_ptr = tipc_nodes[n_num];
if (!n_ptr || !tipc_in_scope(domain, n_ptr->addr))
continue;
node_info.addr = htonl(n_ptr->addr);
/* Get space for all unicast links + multicast link */
payload_size = TLV_SPACE(sizeof(link_info)) *
- (atomic_read(&tipc_net.links) + 1);
+ (atomic_read(&tipc_num_links) + 1);
if (payload_size > 32768u) {
read_unlock_bh(&tipc_net_lock);
return tipc_cfg_reply_error_string(TIPC_CFG_NOT_SUPPORTED
/* Add TLVs for any other links in scope */
- for (n_num = 1; n_num <= tipc_net.highest_node; n_num++) {
+ for (n_num = 1; n_num <= tipc_highest_node; n_num++) {
u32 i;
- n_ptr = tipc_net.nodes[n_num];
+ n_ptr = tipc_nodes[n_num];
if (!n_ptr || !tipc_in_scope(domain, n_ptr->addr))
continue;
tipc_node_lock(n_ptr);