tipc: make tipc node table aware of net namespace
Global variables associated with node table are below: - node table list (node_htable) - node hash table list (tipc_node_list) - node table lock (node_list_lock) - node number counter (tipc_num_nodes) - node link number counter (tipc_num_links) To make node table support namespace, above global variables must be moved to tipc_net structure in order to keep secret for different namespaces. As a consequence, these variables are allocated and initialized when namespace is created, and deallocated when namespace is destroyed. After the change, functions associated with these variables have to utilize a namespace pointer to access them. So adding namespace pointer as a parameter of these functions is the major change made in the commit. Signed-off-by: Ying Xue <ying.xue@windriver.com> Tested-by: Tero Aho <Tero.Aho@coriant.com> Reviewed-by: Jon Maloy <jon.maloy@ericsson.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
c93d3baa24
commit
f2f9800d49
@@ -69,7 +69,8 @@ static const struct nla_policy tipc_nl_media_policy[TIPC_NLA_MEDIA_MAX + 1] = {
|
||||
|
||||
struct tipc_bearer __rcu *bearer_list[MAX_BEARERS + 1];
|
||||
|
||||
static void bearer_disable(struct tipc_bearer *b_ptr, bool shutting_down);
|
||||
static void bearer_disable(struct net *net, struct tipc_bearer *b_ptr,
|
||||
bool shutting_down);
|
||||
|
||||
/**
|
||||
* tipc_media_find - locates specified media object by name
|
||||
@@ -364,7 +365,7 @@ restart:
|
||||
|
||||
res = tipc_disc_create(net, b_ptr, &b_ptr->bcast_addr);
|
||||
if (res) {
|
||||
bearer_disable(b_ptr, false);
|
||||
bearer_disable(net, b_ptr, false);
|
||||
pr_warn("Bearer <%s> rejected, discovery object creation failed\n",
|
||||
name);
|
||||
return -EINVAL;
|
||||
@@ -384,7 +385,7 @@ restart:
|
||||
static int tipc_reset_bearer(struct net *net, struct tipc_bearer *b_ptr)
|
||||
{
|
||||
pr_info("Resetting bearer <%s>\n", b_ptr->name);
|
||||
tipc_link_reset_list(b_ptr->identity);
|
||||
tipc_link_reset_list(net, b_ptr->identity);
|
||||
tipc_disc_reset(net, b_ptr);
|
||||
return 0;
|
||||
}
|
||||
@@ -394,14 +395,15 @@ static int tipc_reset_bearer(struct net *net, struct tipc_bearer *b_ptr)
|
||||
*
|
||||
* Note: This routine assumes caller holds RTNL lock.
|
||||
*/
|
||||
static void bearer_disable(struct tipc_bearer *b_ptr, bool shutting_down)
|
||||
static void bearer_disable(struct net *net, struct tipc_bearer *b_ptr,
|
||||
bool shutting_down)
|
||||
{
|
||||
u32 i;
|
||||
|
||||
pr_info("Disabling bearer <%s>\n", b_ptr->name);
|
||||
b_ptr->media->disable_media(b_ptr);
|
||||
|
||||
tipc_link_delete_list(b_ptr->identity, shutting_down);
|
||||
tipc_link_delete_list(net, b_ptr->identity, shutting_down);
|
||||
if (b_ptr->link_req)
|
||||
tipc_disc_delete(b_ptr->link_req);
|
||||
|
||||
@@ -414,7 +416,7 @@ static void bearer_disable(struct tipc_bearer *b_ptr, bool shutting_down)
|
||||
kfree_rcu(b_ptr, rcu);
|
||||
}
|
||||
|
||||
int tipc_disable_bearer(const char *name)
|
||||
int tipc_disable_bearer(struct net *net, const char *name)
|
||||
{
|
||||
struct tipc_bearer *b_ptr;
|
||||
int res;
|
||||
@@ -424,7 +426,7 @@ int tipc_disable_bearer(const char *name)
|
||||
pr_warn("Attempt to disable unknown bearer <%s>\n", name);
|
||||
res = -EINVAL;
|
||||
} else {
|
||||
bearer_disable(b_ptr, false);
|
||||
bearer_disable(net, b_ptr, false);
|
||||
res = 0;
|
||||
}
|
||||
return res;
|
||||
@@ -593,7 +595,7 @@ static int tipc_l2_device_event(struct notifier_block *nb, unsigned long evt,
|
||||
break;
|
||||
case NETDEV_UNREGISTER:
|
||||
case NETDEV_CHANGENAME:
|
||||
bearer_disable(b_ptr, false);
|
||||
bearer_disable(dev_net(dev), b_ptr, false);
|
||||
break;
|
||||
}
|
||||
return NOTIFY_OK;
|
||||
@@ -626,7 +628,7 @@ void tipc_bearer_cleanup(void)
|
||||
dev_remove_pack(&tipc_packet_type);
|
||||
}
|
||||
|
||||
void tipc_bearer_stop(void)
|
||||
void tipc_bearer_stop(struct net *net)
|
||||
{
|
||||
struct tipc_bearer *b_ptr;
|
||||
u32 i;
|
||||
@@ -634,7 +636,7 @@ void tipc_bearer_stop(void)
|
||||
for (i = 0; i < MAX_BEARERS; i++) {
|
||||
b_ptr = rtnl_dereference(bearer_list[i]);
|
||||
if (b_ptr) {
|
||||
bearer_disable(b_ptr, true);
|
||||
bearer_disable(net, b_ptr, true);
|
||||
bearer_list[i] = NULL;
|
||||
}
|
||||
}
|
||||
@@ -772,6 +774,7 @@ int tipc_nl_bearer_disable(struct sk_buff *skb, struct genl_info *info)
|
||||
char *name;
|
||||
struct tipc_bearer *bearer;
|
||||
struct nlattr *attrs[TIPC_NLA_BEARER_MAX + 1];
|
||||
struct net *net = genl_info_net(info);
|
||||
|
||||
if (!info->attrs[TIPC_NLA_BEARER])
|
||||
return -EINVAL;
|
||||
@@ -794,7 +797,7 @@ int tipc_nl_bearer_disable(struct sk_buff *skb, struct genl_info *info)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
bearer_disable(bearer, false);
|
||||
bearer_disable(net, bearer, false);
|
||||
rtnl_unlock();
|
||||
|
||||
return 0;
|
||||
|
Reference in New Issue
Block a user