mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-25 16:11:45 +00:00
tipc: Remove prototype code for supporting multiple clusters
Eliminates routines, data structures, and files that were intended to allow TIPC to support a network containing multiple clusters. Currently, TIPC supports only networks consisting of a single cluster within a single zone, so this code is unnecessary. Signed-off-by: Allan Stephens <Allan.Stephens@windriver.com> Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
51a8e4dee7
commit
8f92df6ad4
16 changed files with 83 additions and 289 deletions
|
@ -95,7 +95,7 @@
|
||||||
#define TIPC_CMD_GET_MAX_PUBL 0x4005 /* tx none, rx unsigned */
|
#define TIPC_CMD_GET_MAX_PUBL 0x4005 /* tx none, rx unsigned */
|
||||||
#define TIPC_CMD_GET_MAX_SUBSCR 0x4006 /* tx none, rx unsigned */
|
#define TIPC_CMD_GET_MAX_SUBSCR 0x4006 /* tx none, rx unsigned */
|
||||||
#define TIPC_CMD_GET_MAX_ZONES 0x4007 /* obsoleted */
|
#define TIPC_CMD_GET_MAX_ZONES 0x4007 /* obsoleted */
|
||||||
#define TIPC_CMD_GET_MAX_CLUSTERS 0x4008 /* tx none, rx unsigned */
|
#define TIPC_CMD_GET_MAX_CLUSTERS 0x4008 /* obsoleted */
|
||||||
#define TIPC_CMD_GET_MAX_NODES 0x4009 /* tx none, rx unsigned */
|
#define TIPC_CMD_GET_MAX_NODES 0x4009 /* tx none, rx unsigned */
|
||||||
#define TIPC_CMD_GET_MAX_SLAVES 0x400A /* obsoleted */
|
#define TIPC_CMD_GET_MAX_SLAVES 0x400A /* obsoleted */
|
||||||
#define TIPC_CMD_GET_NETID 0x400B /* tx none, rx unsigned */
|
#define TIPC_CMD_GET_NETID 0x400B /* tx none, rx unsigned */
|
||||||
|
@ -131,7 +131,7 @@
|
||||||
#define TIPC_CMD_SET_MAX_PUBL 0x8005 /* tx unsigned, rx none */
|
#define TIPC_CMD_SET_MAX_PUBL 0x8005 /* tx unsigned, rx none */
|
||||||
#define TIPC_CMD_SET_MAX_SUBSCR 0x8006 /* tx unsigned, rx none */
|
#define TIPC_CMD_SET_MAX_SUBSCR 0x8006 /* tx unsigned, rx none */
|
||||||
#define TIPC_CMD_SET_MAX_ZONES 0x8007 /* obsoleted */
|
#define TIPC_CMD_SET_MAX_ZONES 0x8007 /* obsoleted */
|
||||||
#define TIPC_CMD_SET_MAX_CLUSTERS 0x8008 /* tx unsigned, rx none */
|
#define TIPC_CMD_SET_MAX_CLUSTERS 0x8008 /* obsoleted */
|
||||||
#define TIPC_CMD_SET_MAX_NODES 0x8009 /* tx unsigned, rx none */
|
#define TIPC_CMD_SET_MAX_NODES 0x8009 /* tx unsigned, rx none */
|
||||||
#define TIPC_CMD_SET_MAX_SLAVES 0x800A /* obsoleted */
|
#define TIPC_CMD_SET_MAX_SLAVES 0x800A /* obsoleted */
|
||||||
#define TIPC_CMD_SET_NETID 0x800B /* tx unsigned, rx none */
|
#define TIPC_CMD_SET_NETID 0x800B /* tx unsigned, rx none */
|
||||||
|
|
|
@ -29,16 +29,6 @@ config TIPC_ADVANCED
|
||||||
Saying Y here will open some advanced configuration for TIPC.
|
Saying Y here will open some advanced configuration for TIPC.
|
||||||
Most users do not need to bother; if unsure, just say N.
|
Most users do not need to bother; if unsure, just say N.
|
||||||
|
|
||||||
config TIPC_CLUSTERS
|
|
||||||
int "Maximum number of clusters in a zone"
|
|
||||||
depends on TIPC_ADVANCED
|
|
||||||
range 1 1
|
|
||||||
default "1"
|
|
||||||
help
|
|
||||||
Specifies how many clusters can be supported in a TIPC zone.
|
|
||||||
|
|
||||||
*** Currently TIPC only supports a single cluster per zone. ***
|
|
||||||
|
|
||||||
config TIPC_NODES
|
config TIPC_NODES
|
||||||
int "Maximum number of nodes in a cluster"
|
int "Maximum number of nodes in a cluster"
|
||||||
depends on TIPC_ADVANCED
|
depends on TIPC_ADVANCED
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
obj-$(CONFIG_TIPC) := tipc.o
|
obj-$(CONFIG_TIPC) := tipc.o
|
||||||
|
|
||||||
tipc-y += addr.o bcast.o bearer.o config.o cluster.o \
|
tipc-y += addr.o bcast.o bearer.o config.o \
|
||||||
core.o handler.o link.o discover.o msg.o \
|
core.o handler.o link.o discover.o msg.o \
|
||||||
name_distr.o subscr.o name_table.o net.o \
|
name_distr.o subscr.o name_table.o net.o \
|
||||||
netlink.o node.o node_subscr.o port.o ref.o \
|
netlink.o node.o node_subscr.o port.o ref.o \
|
||||||
|
|
|
@ -35,7 +35,8 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "core.h"
|
#include "core.h"
|
||||||
#include "cluster.h"
|
#include "node.h"
|
||||||
|
#include "addr.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* tipc_addr_domain_valid - validates a network domain address
|
* tipc_addr_domain_valid - validates a network domain address
|
||||||
|
@ -55,8 +56,6 @@ int tipc_addr_domain_valid(u32 addr)
|
||||||
|
|
||||||
if (n > max_nodes)
|
if (n > max_nodes)
|
||||||
return 0;
|
return 0;
|
||||||
if (c > tipc_max_clusters)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
if (n && (!z || !c))
|
if (n && (!z || !c))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -111,6 +111,9 @@ static struct bclink *bclink = NULL;
|
||||||
static struct link *bcl = NULL;
|
static struct link *bcl = NULL;
|
||||||
static DEFINE_SPINLOCK(bc_lock);
|
static DEFINE_SPINLOCK(bc_lock);
|
||||||
|
|
||||||
|
/* broadcast-capable node map */
|
||||||
|
struct tipc_node_map tipc_bcast_nmap;
|
||||||
|
|
||||||
const char tipc_bclink_name[] = "broadcast-link";
|
const char tipc_bclink_name[] = "broadcast-link";
|
||||||
|
|
||||||
static void tipc_nmap_diff(struct tipc_node_map *nm_a,
|
static void tipc_nmap_diff(struct tipc_node_map *nm_a,
|
||||||
|
@ -566,8 +569,8 @@ static int tipc_bcbearer_send(struct sk_buff *buf,
|
||||||
if (likely(!msg_non_seq(buf_msg(buf)))) {
|
if (likely(!msg_non_seq(buf_msg(buf)))) {
|
||||||
struct tipc_msg *msg;
|
struct tipc_msg *msg;
|
||||||
|
|
||||||
assert(tipc_cltr_bcast_nodes.count != 0);
|
assert(tipc_bcast_nmap.count != 0);
|
||||||
bcbuf_set_acks(buf, tipc_cltr_bcast_nodes.count);
|
bcbuf_set_acks(buf, tipc_bcast_nmap.count);
|
||||||
msg = buf_msg(buf);
|
msg = buf_msg(buf);
|
||||||
msg_set_non_seq(msg, 1);
|
msg_set_non_seq(msg, 1);
|
||||||
msg_set_mc_netid(msg, tipc_net_id);
|
msg_set_mc_netid(msg, tipc_net_id);
|
||||||
|
@ -576,7 +579,7 @@ static int tipc_bcbearer_send(struct sk_buff *buf,
|
||||||
|
|
||||||
/* Send buffer over bearers until all targets reached */
|
/* Send buffer over bearers until all targets reached */
|
||||||
|
|
||||||
bcbearer->remains = tipc_cltr_bcast_nodes;
|
bcbearer->remains = tipc_bcast_nmap;
|
||||||
|
|
||||||
for (bp_index = 0; bp_index < MAX_BEARERS; bp_index++) {
|
for (bp_index = 0; bp_index < MAX_BEARERS; bp_index++) {
|
||||||
struct bearer *p = bcbearer->bpairs[bp_index].primary;
|
struct bearer *p = bcbearer->bpairs[bp_index].primary;
|
||||||
|
|
|
@ -51,6 +51,7 @@ struct tipc_node_map {
|
||||||
u32 map[MAX_NODES / WSIZE];
|
u32 map[MAX_NODES / WSIZE];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
extern struct tipc_node_map tipc_bcast_nmap;
|
||||||
|
|
||||||
#define PLSIZE 32
|
#define PLSIZE 32
|
||||||
|
|
||||||
|
|
|
@ -1,135 +0,0 @@
|
||||||
/*
|
|
||||||
* net/tipc/cluster.c: TIPC cluster management routines
|
|
||||||
*
|
|
||||||
* Copyright (c) 2000-2006, Ericsson AB
|
|
||||||
* Copyright (c) 2005, Wind River Systems
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
|
||||||
* documentation and/or other materials provided with the distribution.
|
|
||||||
* 3. Neither the names of the copyright holders nor the names of its
|
|
||||||
* contributors may be used to endorse or promote products derived from
|
|
||||||
* this software without specific prior written permission.
|
|
||||||
*
|
|
||||||
* Alternatively, this software may be distributed under the terms of the
|
|
||||||
* GNU General Public License ("GPL") version 2 as published by the Free
|
|
||||||
* Software Foundation.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
||||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
||||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
||||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
||||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
||||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
||||||
* POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "core.h"
|
|
||||||
#include "cluster.h"
|
|
||||||
#include "link.h"
|
|
||||||
|
|
||||||
struct tipc_node **tipc_local_nodes = NULL;
|
|
||||||
struct tipc_node_map tipc_cltr_bcast_nodes = {0,{0,}};
|
|
||||||
|
|
||||||
struct cluster *tipc_cltr_create(u32 addr)
|
|
||||||
{
|
|
||||||
struct cluster *c_ptr;
|
|
||||||
int max_nodes;
|
|
||||||
|
|
||||||
c_ptr = kzalloc(sizeof(*c_ptr), GFP_ATOMIC);
|
|
||||||
if (c_ptr == NULL) {
|
|
||||||
warn("Cluster creation failure, no memory\n");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
c_ptr->addr = tipc_addr(tipc_zone(addr), tipc_cluster(addr), 0);
|
|
||||||
max_nodes = tipc_max_nodes + 1;
|
|
||||||
|
|
||||||
c_ptr->nodes = kcalloc(max_nodes + 1, sizeof(void*), GFP_ATOMIC);
|
|
||||||
if (c_ptr->nodes == NULL) {
|
|
||||||
warn("Cluster creation failure, no memory for node area\n");
|
|
||||||
kfree(c_ptr);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
tipc_local_nodes = c_ptr->nodes;
|
|
||||||
c_ptr->highest_node = 0;
|
|
||||||
|
|
||||||
tipc_net.clusters[1] = c_ptr;
|
|
||||||
return c_ptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
void tipc_cltr_delete(struct cluster *c_ptr)
|
|
||||||
{
|
|
||||||
u32 n_num;
|
|
||||||
|
|
||||||
if (!c_ptr)
|
|
||||||
return;
|
|
||||||
for (n_num = 1; n_num <= c_ptr->highest_node; n_num++) {
|
|
||||||
tipc_node_delete(c_ptr->nodes[n_num]);
|
|
||||||
}
|
|
||||||
kfree(c_ptr->nodes);
|
|
||||||
kfree(c_ptr);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void tipc_cltr_attach_node(struct cluster *c_ptr, struct tipc_node *n_ptr)
|
|
||||||
{
|
|
||||||
u32 n_num = tipc_node(n_ptr->addr);
|
|
||||||
u32 max_n_num = tipc_max_nodes;
|
|
||||||
|
|
||||||
assert(n_num > 0);
|
|
||||||
assert(n_num <= max_n_num);
|
|
||||||
assert(c_ptr->nodes[n_num] == NULL);
|
|
||||||
c_ptr->nodes[n_num] = n_ptr;
|
|
||||||
if (n_num > c_ptr->highest_node)
|
|
||||||
c_ptr->highest_node = n_num;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* tipc_cltr_broadcast - broadcast message to all nodes within cluster
|
|
||||||
*/
|
|
||||||
|
|
||||||
void tipc_cltr_broadcast(struct sk_buff *buf)
|
|
||||||
{
|
|
||||||
struct sk_buff *buf_copy;
|
|
||||||
struct cluster *c_ptr;
|
|
||||||
struct tipc_node *n_ptr;
|
|
||||||
u32 n_num;
|
|
||||||
|
|
||||||
if (tipc_mode == TIPC_NET_MODE) {
|
|
||||||
c_ptr = tipc_cltr_find(tipc_own_addr);
|
|
||||||
|
|
||||||
/* Send to nodes */
|
|
||||||
for (n_num = 1; n_num <= c_ptr->highest_node; n_num++) {
|
|
||||||
n_ptr = c_ptr->nodes[n_num];
|
|
||||||
if (n_ptr && tipc_node_has_active_links(n_ptr)) {
|
|
||||||
buf_copy = skb_copy(buf, GFP_ATOMIC);
|
|
||||||
if (buf_copy == NULL)
|
|
||||||
goto exit;
|
|
||||||
msg_set_destnode(buf_msg(buf_copy),
|
|
||||||
n_ptr->addr);
|
|
||||||
tipc_link_send(buf_copy, n_ptr->addr,
|
|
||||||
n_ptr->addr);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
exit:
|
|
||||||
buf_discard(buf);
|
|
||||||
}
|
|
||||||
|
|
||||||
int tipc_cltr_init(void)
|
|
||||||
{
|
|
||||||
return tipc_cltr_create(tipc_own_addr) ? 0 : -ENOMEM;
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,73 +0,0 @@
|
||||||
/*
|
|
||||||
* net/tipc/cluster.h: Include file for TIPC cluster management routines
|
|
||||||
*
|
|
||||||
* Copyright (c) 2000-2006, Ericsson AB
|
|
||||||
* Copyright (c) 2005, Wind River Systems
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
|
||||||
* documentation and/or other materials provided with the distribution.
|
|
||||||
* 3. Neither the names of the copyright holders nor the names of its
|
|
||||||
* contributors may be used to endorse or promote products derived from
|
|
||||||
* this software without specific prior written permission.
|
|
||||||
*
|
|
||||||
* Alternatively, this software may be distributed under the terms of the
|
|
||||||
* GNU General Public License ("GPL") version 2 as published by the Free
|
|
||||||
* Software Foundation.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
||||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
||||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
||||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
||||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
||||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
||||||
* POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef _TIPC_CLUSTER_H
|
|
||||||
#define _TIPC_CLUSTER_H
|
|
||||||
|
|
||||||
#include "addr.h"
|
|
||||||
#include "net.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* struct cluster - TIPC cluster structure
|
|
||||||
* @addr: network address of cluster
|
|
||||||
* @nodes: array of pointers to all nodes within cluster
|
|
||||||
* @highest_node: id of highest numbered node within cluster
|
|
||||||
*/
|
|
||||||
|
|
||||||
struct cluster {
|
|
||||||
u32 addr;
|
|
||||||
struct tipc_node **nodes;
|
|
||||||
u32 highest_node;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
extern struct tipc_node **tipc_local_nodes;
|
|
||||||
extern struct tipc_node_map tipc_cltr_bcast_nodes;
|
|
||||||
|
|
||||||
struct cluster *tipc_cltr_create(u32 addr);
|
|
||||||
void tipc_cltr_delete(struct cluster *c_ptr);
|
|
||||||
void tipc_cltr_attach_node(struct cluster *c_ptr, struct tipc_node *n_ptr);
|
|
||||||
void tipc_cltr_broadcast(struct sk_buff *buf);
|
|
||||||
int tipc_cltr_init(void);
|
|
||||||
|
|
||||||
static inline struct cluster *tipc_cltr_find(u32 addr)
|
|
||||||
{
|
|
||||||
if (!in_own_cluster(addr))
|
|
||||||
return NULL;
|
|
||||||
return tipc_net.clusters[1];
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -269,19 +269,6 @@ static struct sk_buff *cfg_set_max_ports(void)
|
||||||
return tipc_cfg_reply_none();
|
return tipc_cfg_reply_none();
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct sk_buff *cfg_set_max_clusters(void)
|
|
||||||
{
|
|
||||||
u32 value;
|
|
||||||
|
|
||||||
if (!TLV_CHECK(req_tlv_area, req_tlv_space, TIPC_TLV_UNSIGNED))
|
|
||||||
return tipc_cfg_reply_error_string(TIPC_CFG_TLV_ERROR);
|
|
||||||
value = ntohl(*(__be32 *)TLV_DATA(req_tlv_area));
|
|
||||||
if (value != delimit(value, 1, 1))
|
|
||||||
return tipc_cfg_reply_error_string(TIPC_CFG_INVALID_VALUE
|
|
||||||
" (max clusters fixed at 1)");
|
|
||||||
return tipc_cfg_reply_none();
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct sk_buff *cfg_set_max_nodes(void)
|
static struct sk_buff *cfg_set_max_nodes(void)
|
||||||
{
|
{
|
||||||
u32 value;
|
u32 value;
|
||||||
|
@ -420,9 +407,6 @@ struct sk_buff *tipc_cfg_do_cmd(u32 orig_node, u16 cmd, const void *request_area
|
||||||
case TIPC_CMD_SET_MAX_SUBSCR:
|
case TIPC_CMD_SET_MAX_SUBSCR:
|
||||||
rep_tlv_buf = cfg_set_max_subscriptions();
|
rep_tlv_buf = cfg_set_max_subscriptions();
|
||||||
break;
|
break;
|
||||||
case TIPC_CMD_SET_MAX_CLUSTERS:
|
|
||||||
rep_tlv_buf = cfg_set_max_clusters();
|
|
||||||
break;
|
|
||||||
case TIPC_CMD_SET_MAX_NODES:
|
case TIPC_CMD_SET_MAX_NODES:
|
||||||
rep_tlv_buf = cfg_set_max_nodes();
|
rep_tlv_buf = cfg_set_max_nodes();
|
||||||
break;
|
break;
|
||||||
|
@ -441,9 +425,6 @@ struct sk_buff *tipc_cfg_do_cmd(u32 orig_node, u16 cmd, const void *request_area
|
||||||
case TIPC_CMD_GET_MAX_SUBSCR:
|
case TIPC_CMD_GET_MAX_SUBSCR:
|
||||||
rep_tlv_buf = tipc_cfg_reply_unsigned(tipc_max_subscriptions);
|
rep_tlv_buf = tipc_cfg_reply_unsigned(tipc_max_subscriptions);
|
||||||
break;
|
break;
|
||||||
case TIPC_CMD_GET_MAX_CLUSTERS:
|
|
||||||
rep_tlv_buf = tipc_cfg_reply_unsigned(tipc_max_clusters);
|
|
||||||
break;
|
|
||||||
case TIPC_CMD_GET_MAX_NODES:
|
case TIPC_CMD_GET_MAX_NODES:
|
||||||
rep_tlv_buf = tipc_cfg_reply_unsigned(tipc_max_nodes);
|
rep_tlv_buf = tipc_cfg_reply_unsigned(tipc_max_nodes);
|
||||||
break;
|
break;
|
||||||
|
@ -458,6 +439,8 @@ struct sk_buff *tipc_cfg_do_cmd(u32 orig_node, u16 cmd, const void *request_area
|
||||||
case TIPC_CMD_GET_MAX_ZONES:
|
case TIPC_CMD_GET_MAX_ZONES:
|
||||||
case TIPC_CMD_SET_MAX_SLAVES:
|
case TIPC_CMD_SET_MAX_SLAVES:
|
||||||
case TIPC_CMD_GET_MAX_SLAVES:
|
case TIPC_CMD_GET_MAX_SLAVES:
|
||||||
|
case TIPC_CMD_SET_MAX_CLUSTERS:
|
||||||
|
case TIPC_CMD_GET_MAX_CLUSTERS:
|
||||||
rep_tlv_buf = tipc_cfg_reply_error_string(TIPC_CFG_NOT_SUPPORTED
|
rep_tlv_buf = tipc_cfg_reply_error_string(TIPC_CFG_NOT_SUPPORTED
|
||||||
" (obsolete command)");
|
" (obsolete command)");
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -48,10 +48,6 @@
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
|
|
||||||
#ifndef CONFIG_TIPC_CLUSTERS
|
|
||||||
#define CONFIG_TIPC_CLUSTERS 1
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef CONFIG_TIPC_NODES
|
#ifndef CONFIG_TIPC_NODES
|
||||||
#define CONFIG_TIPC_NODES 255
|
#define CONFIG_TIPC_NODES 255
|
||||||
#endif
|
#endif
|
||||||
|
@ -76,7 +72,6 @@ const char tipc_alphabet[] =
|
||||||
/* configurable TIPC parameters */
|
/* configurable TIPC parameters */
|
||||||
|
|
||||||
u32 tipc_own_addr;
|
u32 tipc_own_addr;
|
||||||
int tipc_max_clusters;
|
|
||||||
int tipc_max_nodes;
|
int tipc_max_nodes;
|
||||||
int tipc_max_ports;
|
int tipc_max_ports;
|
||||||
int tipc_max_subscriptions;
|
int tipc_max_subscriptions;
|
||||||
|
@ -199,7 +194,6 @@ static int __init tipc_init(void)
|
||||||
tipc_max_publications = 10000;
|
tipc_max_publications = 10000;
|
||||||
tipc_max_subscriptions = 2000;
|
tipc_max_subscriptions = 2000;
|
||||||
tipc_max_ports = CONFIG_TIPC_PORTS;
|
tipc_max_ports = CONFIG_TIPC_PORTS;
|
||||||
tipc_max_clusters = CONFIG_TIPC_CLUSTERS;
|
|
||||||
tipc_max_nodes = CONFIG_TIPC_NODES;
|
tipc_max_nodes = CONFIG_TIPC_NODES;
|
||||||
tipc_net_id = 4711;
|
tipc_net_id = 4711;
|
||||||
|
|
||||||
|
|
|
@ -184,7 +184,6 @@ void tipc_dump_dbg(struct print_buf *, const char *fmt, ...);
|
||||||
*/
|
*/
|
||||||
|
|
||||||
extern u32 tipc_own_addr;
|
extern u32 tipc_own_addr;
|
||||||
extern int tipc_max_clusters;
|
|
||||||
extern int tipc_max_nodes;
|
extern int tipc_max_nodes;
|
||||||
extern int tipc_max_ports;
|
extern int tipc_max_ports;
|
||||||
extern int tipc_max_subscriptions;
|
extern int tipc_max_subscriptions;
|
||||||
|
|
|
@ -35,7 +35,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "core.h"
|
#include "core.h"
|
||||||
#include "cluster.h"
|
#include "addr.h"
|
||||||
#include "link.h"
|
#include "link.h"
|
||||||
#include "name_distr.h"
|
#include "name_distr.h"
|
||||||
|
|
||||||
|
@ -107,6 +107,26 @@ static struct sk_buff *named_prepare_buf(u32 type, u32 size, u32 dest)
|
||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void named_cluster_distribute(struct sk_buff *buf)
|
||||||
|
{
|
||||||
|
struct sk_buff *buf_copy;
|
||||||
|
struct tipc_node *n_ptr;
|
||||||
|
u32 n_num;
|
||||||
|
|
||||||
|
for (n_num = 1; n_num <= tipc_net.highest_node; n_num++) {
|
||||||
|
n_ptr = tipc_net.nodes[n_num];
|
||||||
|
if (n_ptr && tipc_node_has_active_links(n_ptr)) {
|
||||||
|
buf_copy = skb_copy(buf, GFP_ATOMIC);
|
||||||
|
if (!buf_copy)
|
||||||
|
break;
|
||||||
|
msg_set_destnode(buf_msg(buf_copy), n_ptr->addr);
|
||||||
|
tipc_link_send(buf_copy, n_ptr->addr, n_ptr->addr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
buf_discard(buf);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* tipc_named_publish - tell other nodes about a new publication by this node
|
* tipc_named_publish - tell other nodes about a new publication by this node
|
||||||
*/
|
*/
|
||||||
|
@ -127,8 +147,8 @@ void tipc_named_publish(struct publication *publ)
|
||||||
|
|
||||||
item = (struct distr_item *)msg_data(buf_msg(buf));
|
item = (struct distr_item *)msg_data(buf_msg(buf));
|
||||||
publ_to_item(item, publ);
|
publ_to_item(item, publ);
|
||||||
dbg("tipc_named_withdraw: broadcasting publish msg\n");
|
dbg("tipc_named_publish: broadcasting publish msg\n");
|
||||||
tipc_cltr_broadcast(buf);
|
named_cluster_distribute(buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -152,7 +172,7 @@ void tipc_named_withdraw(struct publication *publ)
|
||||||
item = (struct distr_item *)msg_data(buf_msg(buf));
|
item = (struct distr_item *)msg_data(buf_msg(buf));
|
||||||
publ_to_item(item, publ);
|
publ_to_item(item, publ);
|
||||||
dbg("tipc_named_withdraw: broadcasting withdraw msg\n");
|
dbg("tipc_named_withdraw: broadcasting withdraw msg\n");
|
||||||
tipc_cltr_broadcast(buf);
|
named_cluster_distribute(buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -112,12 +112,23 @@
|
||||||
DEFINE_RWLOCK(tipc_net_lock);
|
DEFINE_RWLOCK(tipc_net_lock);
|
||||||
struct network tipc_net;
|
struct network tipc_net;
|
||||||
|
|
||||||
|
static int net_start(void)
|
||||||
|
{
|
||||||
|
tipc_net.nodes = kcalloc(tipc_max_nodes + 1,
|
||||||
|
sizeof(*tipc_net.nodes), GFP_ATOMIC);
|
||||||
|
tipc_net.highest_node = 0;
|
||||||
|
|
||||||
|
return tipc_net.nodes ? 0 : -ENOMEM;
|
||||||
|
}
|
||||||
|
|
||||||
static void net_stop(void)
|
static void net_stop(void)
|
||||||
{
|
{
|
||||||
u32 c_num;
|
u32 n_num;
|
||||||
|
|
||||||
for (c_num = 1; c_num <= tipc_max_clusters; c_num++)
|
for (n_num = 1; n_num <= tipc_net.highest_node; n_num++)
|
||||||
tipc_cltr_delete(tipc_net.clusters[c_num]);
|
tipc_node_delete(tipc_net.nodes[n_num]);
|
||||||
|
kfree(tipc_net.nodes);
|
||||||
|
tipc_net.nodes = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void net_route_named_msg(struct sk_buff *buf)
|
static void net_route_named_msg(struct sk_buff *buf)
|
||||||
|
@ -218,10 +229,12 @@ int tipc_net_start(u32 addr)
|
||||||
tipc_named_reinit();
|
tipc_named_reinit();
|
||||||
tipc_port_reinit();
|
tipc_port_reinit();
|
||||||
|
|
||||||
if ((res = tipc_cltr_init()) ||
|
res = net_start();
|
||||||
(res = tipc_bclink_init())) {
|
if (res)
|
||||||
|
return res;
|
||||||
|
res = tipc_bclink_init();
|
||||||
|
if (res)
|
||||||
return res;
|
return res;
|
||||||
}
|
|
||||||
|
|
||||||
tipc_k_signal((Handler)tipc_subscr_start, 0);
|
tipc_k_signal((Handler)tipc_subscr_start, 0);
|
||||||
tipc_k_signal((Handler)tipc_cfg_init, 0);
|
tipc_k_signal((Handler)tipc_cfg_init, 0);
|
||||||
|
|
|
@ -37,16 +37,18 @@
|
||||||
#ifndef _TIPC_NET_H
|
#ifndef _TIPC_NET_H
|
||||||
#define _TIPC_NET_H
|
#define _TIPC_NET_H
|
||||||
|
|
||||||
struct cluster;
|
struct tipc_node;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct network - TIPC network structure
|
* struct network - TIPC network structure
|
||||||
* @clusters: array of pointers to all clusters within zone
|
* @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
|
* @links: number of (unicast) links to cluster
|
||||||
*/
|
*/
|
||||||
|
|
||||||
struct network {
|
struct network {
|
||||||
struct cluster *clusters[2]; /* currently limited to just 1 cluster */
|
struct tipc_node **nodes;
|
||||||
|
u32 highest_node;
|
||||||
u32 links;
|
u32 links;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -62,9 +62,9 @@ u32 tipc_own_tag = 0;
|
||||||
|
|
||||||
struct tipc_node *tipc_node_create(u32 addr)
|
struct tipc_node *tipc_node_create(u32 addr)
|
||||||
{
|
{
|
||||||
struct cluster *c_ptr;
|
|
||||||
struct tipc_node *n_ptr;
|
struct tipc_node *n_ptr;
|
||||||
struct tipc_node **curr_node;
|
struct tipc_node **curr_node;
|
||||||
|
u32 n_num;
|
||||||
|
|
||||||
spin_lock_bh(&node_create_lock);
|
spin_lock_bh(&node_create_lock);
|
||||||
|
|
||||||
|
@ -84,21 +84,14 @@ struct tipc_node *tipc_node_create(u32 addr)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
c_ptr = tipc_cltr_find(addr);
|
|
||||||
if (!c_ptr) {
|
|
||||||
c_ptr = tipc_cltr_create(addr);
|
|
||||||
}
|
|
||||||
if (!c_ptr) {
|
|
||||||
spin_unlock_bh(&node_create_lock);
|
|
||||||
kfree(n_ptr);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
n_ptr->addr = addr;
|
n_ptr->addr = addr;
|
||||||
spin_lock_init(&n_ptr->lock);
|
spin_lock_init(&n_ptr->lock);
|
||||||
INIT_LIST_HEAD(&n_ptr->nsub);
|
INIT_LIST_HEAD(&n_ptr->nsub);
|
||||||
n_ptr->owner = c_ptr;
|
|
||||||
tipc_cltr_attach_node(c_ptr, n_ptr);
|
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;
|
||||||
|
|
||||||
/* Insert node into ordered list */
|
/* Insert node into ordered list */
|
||||||
for (curr_node = &tipc_nodes; *curr_node;
|
for (curr_node = &tipc_nodes; *curr_node;
|
||||||
|
@ -115,11 +108,19 @@ struct tipc_node *tipc_node_create(u32 addr)
|
||||||
|
|
||||||
void tipc_node_delete(struct tipc_node *n_ptr)
|
void tipc_node_delete(struct tipc_node *n_ptr)
|
||||||
{
|
{
|
||||||
|
u32 n_num;
|
||||||
|
|
||||||
if (!n_ptr)
|
if (!n_ptr)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
dbg("node %x deleted\n", n_ptr->addr);
|
dbg("node %x deleted\n", n_ptr->addr);
|
||||||
|
n_num = tipc_node(n_ptr->addr);
|
||||||
|
tipc_net.nodes[n_num] = NULL;
|
||||||
kfree(n_ptr);
|
kfree(n_ptr);
|
||||||
|
|
||||||
|
while (!tipc_net.nodes[tipc_net.highest_node])
|
||||||
|
if (--tipc_net.highest_node == 0)
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -324,7 +325,7 @@ static void node_established_contact(struct tipc_node *n_ptr)
|
||||||
n_ptr->bclink.acked = tipc_bclink_get_last_sent();
|
n_ptr->bclink.acked = tipc_bclink_get_last_sent();
|
||||||
|
|
||||||
if (n_ptr->bclink.supported) {
|
if (n_ptr->bclink.supported) {
|
||||||
tipc_nmap_add(&tipc_cltr_bcast_nodes, n_ptr->addr);
|
tipc_nmap_add(&tipc_bcast_nmap, n_ptr->addr);
|
||||||
if (n_ptr->addr < tipc_own_addr)
|
if (n_ptr->addr < tipc_own_addr)
|
||||||
tipc_own_tag++;
|
tipc_own_tag++;
|
||||||
}
|
}
|
||||||
|
@ -361,13 +362,11 @@ static void node_lost_contact(struct tipc_node *n_ptr)
|
||||||
buf_discard(n_ptr->bclink.defragm);
|
buf_discard(n_ptr->bclink.defragm);
|
||||||
n_ptr->bclink.defragm = NULL;
|
n_ptr->bclink.defragm = NULL;
|
||||||
}
|
}
|
||||||
if (in_own_cluster(n_ptr->addr) && n_ptr->bclink.supported) {
|
|
||||||
tipc_bclink_acknowledge(n_ptr, mod(n_ptr->bclink.acked + 10000));
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Update routing tables */
|
|
||||||
if (n_ptr->bclink.supported) {
|
if (n_ptr->bclink.supported) {
|
||||||
tipc_nmap_remove(&tipc_cltr_bcast_nodes, n_ptr->addr);
|
tipc_bclink_acknowledge(n_ptr,
|
||||||
|
mod(n_ptr->bclink.acked + 10000));
|
||||||
|
tipc_nmap_remove(&tipc_bcast_nmap, n_ptr->addr);
|
||||||
if (n_ptr->addr < tipc_own_addr)
|
if (n_ptr->addr < tipc_own_addr)
|
||||||
tipc_own_tag--;
|
tipc_own_tag--;
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,14 +38,14 @@
|
||||||
#define _TIPC_NODE_H
|
#define _TIPC_NODE_H
|
||||||
|
|
||||||
#include "node_subscr.h"
|
#include "node_subscr.h"
|
||||||
#include "cluster.h"
|
#include "addr.h"
|
||||||
|
#include "net.h"
|
||||||
#include "bearer.h"
|
#include "bearer.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct tipc_node - TIPC node structure
|
* struct tipc_node - TIPC node structure
|
||||||
* @addr: network address of node
|
* @addr: network address of node
|
||||||
* @lock: spinlock governing access to structure
|
* @lock: spinlock governing access to structure
|
||||||
* @owner: pointer to cluster that node belongs to
|
|
||||||
* @next: pointer to next node in sorted list of cluster's nodes
|
* @next: pointer to next node in sorted list of cluster's nodes
|
||||||
* @nsub: list of "node down" subscriptions monitoring node
|
* @nsub: list of "node down" subscriptions monitoring node
|
||||||
* @active_links: pointers to active links to node
|
* @active_links: pointers to active links to node
|
||||||
|
@ -69,7 +69,6 @@
|
||||||
struct tipc_node {
|
struct tipc_node {
|
||||||
u32 addr;
|
u32 addr;
|
||||||
spinlock_t lock;
|
spinlock_t lock;
|
||||||
struct cluster *owner;
|
|
||||||
struct tipc_node *next;
|
struct tipc_node *next;
|
||||||
struct list_head nsub;
|
struct list_head nsub;
|
||||||
struct link *active_links[2];
|
struct link *active_links[2];
|
||||||
|
@ -108,7 +107,7 @@ struct sk_buff *tipc_node_get_nodes(const void *req_tlv_area, int req_tlv_space)
|
||||||
static inline struct tipc_node *tipc_node_find(u32 addr)
|
static inline struct tipc_node *tipc_node_find(u32 addr)
|
||||||
{
|
{
|
||||||
if (likely(in_own_cluster(addr)))
|
if (likely(in_own_cluster(addr)))
|
||||||
return tipc_local_nodes[tipc_node(addr)];
|
return tipc_net.nodes[tipc_node(addr)];
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue