summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--net/tipc/bearer.c63
-rw-r--r--net/tipc/bearer.h5
-rw-r--r--net/tipc/eth_media.c10
-rw-r--r--net/tipc/ib_media.c7
4 files changed, 23 insertions, 62 deletions
diff --git a/net/tipc/bearer.c b/net/tipc/bearer.c
index c2101c0bfd6d..826aa9fdf45f 100644
--- a/net/tipc/bearer.c
+++ b/net/tipc/bearer.c
@@ -1,7 +1,7 @@
/*
* net/tipc/bearer.c: TIPC bearer code
*
- * Copyright (c) 1996-2006, Ericsson AB
+ * Copyright (c) 1996-2006, 2013, Ericsson AB
* Copyright (c) 2004-2006, 2010-2011, Wind River Systems
* All rights reserved.
*
@@ -41,8 +41,13 @@
#define MAX_ADDR_STR 60
-static struct tipc_media *media_list[MAX_MEDIA];
-static u32 media_count;
+static struct tipc_media * const media_list[] = {
+ &eth_media_info,
+#ifdef CONFIG_TIPC_MEDIA_IB
+ &ib_media_info,
+#endif
+ NULL
+};
struct tipc_bearer tipc_bearers[MAX_BEARERS];
@@ -55,11 +60,11 @@ struct tipc_media *tipc_media_find(const char *name)
{
u32 i;
- for (i = 0; i < media_count; i++) {
+ for (i = 0; media_list[i] != NULL; i++) {
if (!strcmp(media_list[i]->name, name))
- return media_list[i];
+ break;
}
- return NULL;
+ return media_list[i];
}
/**
@@ -69,44 +74,11 @@ static struct tipc_media *media_find_id(u8 type)
{
u32 i;
- for (i = 0; i < media_count; i++) {
+ for (i = 0; media_list[i] != NULL; i++) {
if (media_list[i]->type_id == type)
- return media_list[i];
+ break;
}
- return NULL;
-}
-
-/**
- * tipc_register_media - register a media type
- *
- * Bearers for this media type must be activated separately at a later stage.
- */
-int tipc_register_media(struct tipc_media *m_ptr)
-{
- int res = -EINVAL;
-
- write_lock_bh(&tipc_net_lock);
-
- if ((strlen(m_ptr->name) + 1) > TIPC_MAX_MEDIA_NAME)
- goto exit;
- if (m_ptr->priority > TIPC_MAX_LINK_PRI)
- goto exit;
- if ((m_ptr->tolerance < TIPC_MIN_LINK_TOL) ||
- (m_ptr->tolerance > TIPC_MAX_LINK_TOL))
- goto exit;
- if (media_count >= MAX_MEDIA)
- goto exit;
- if (tipc_media_find(m_ptr->name) || media_find_id(m_ptr->type_id))
- goto exit;
-
- media_list[media_count] = m_ptr;
- media_count++;
- res = 0;
-exit:
- write_unlock_bh(&tipc_net_lock);
- if (res)
- pr_warn("Media <%s> registration error\n", m_ptr->name);
- return res;
+ return media_list[i];
}
/**
@@ -144,13 +116,11 @@ struct sk_buff *tipc_media_get_names(void)
if (!buf)
return NULL;
- read_lock_bh(&tipc_net_lock);
- for (i = 0; i < media_count; i++) {
+ for (i = 0; media_list[i] != NULL; i++) {
tipc_cfg_append_tlv(buf, TIPC_TLV_MEDIA_NAME,
media_list[i]->name,
strlen(media_list[i]->name) + 1);
}
- read_unlock_bh(&tipc_net_lock);
return buf;
}
@@ -247,7 +217,7 @@ struct sk_buff *tipc_bearer_get_names(void)
return NULL;
read_lock_bh(&tipc_net_lock);
- for (i = 0; i < media_count; i++) {
+ for (i = 0; media_list[i] != NULL; i++) {
for (j = 0; j < MAX_BEARERS; j++) {
b_ptr = &tipc_bearers[j];
if (b_ptr->active && (b_ptr->media == media_list[i])) {
@@ -472,5 +442,4 @@ void tipc_bearer_stop(void)
if (tipc_bearers[i].active)
bearer_disable(&tipc_bearers[i]);
}
- media_count = 0;
}
diff --git a/net/tipc/bearer.h b/net/tipc/bearer.h
index cc780bbedbb9..516af8c0577d 100644
--- a/net/tipc/bearer.h
+++ b/net/tipc/bearer.h
@@ -1,7 +1,7 @@
/*
* net/tipc/bearer.h: Include file for TIPC bearer code
*
- * Copyright (c) 1996-2006, Ericsson AB
+ * Copyright (c) 1996-2006, 2013, Ericsson AB
* Copyright (c) 2005, 2010-2011, Wind River Systems
* All rights reserved.
*
@@ -157,7 +157,6 @@ extern struct tipc_bearer tipc_bearers[];
/*
* TIPC routines available to supported media types
*/
-int tipc_register_media(struct tipc_media *m_ptr);
void tipc_recv_msg(struct sk_buff *buf, struct tipc_bearer *tb_ptr);
@@ -171,10 +170,12 @@ int tipc_disable_bearer(const char *name);
*/
int tipc_eth_media_start(void);
void tipc_eth_media_stop(void);
+extern struct tipc_media eth_media_info;
#ifdef CONFIG_TIPC_MEDIA_IB
int tipc_ib_media_start(void);
void tipc_ib_media_stop(void);
+extern struct tipc_media ib_media_info;
#else
static inline int tipc_ib_media_start(void) { return 0; }
static inline void tipc_ib_media_stop(void) { return; }
diff --git a/net/tipc/eth_media.c b/net/tipc/eth_media.c
index 1e3c33250db3..37fb145476ec 100644
--- a/net/tipc/eth_media.c
+++ b/net/tipc/eth_media.c
@@ -1,7 +1,7 @@
/*
* net/tipc/eth_media.c: Ethernet bearer support for TIPC
*
- * Copyright (c) 2001-2007, Ericsson AB
+ * Copyright (c) 2001-2007, 2013, Ericsson AB
* Copyright (c) 2005-2008, 2011-2013, Wind River Systems
* All rights reserved.
*
@@ -57,7 +57,7 @@ struct eth_media {
struct work_struct cleanup;
};
-static struct tipc_media eth_media_info;
+
static struct eth_media eth_media_array[MAX_ETH_MEDIA];
static int eth_started;
@@ -315,7 +315,7 @@ static int eth_msg2addr(const struct tipc_bearer *tb_ptr,
/*
* Ethernet media registration info
*/
-static struct tipc_media eth_media_info = {
+struct tipc_media eth_media_info = {
.send_msg = send_msg,
.enable_media = enable_media,
.disable_media = disable_media,
@@ -342,10 +342,6 @@ int tipc_eth_media_start(void)
if (eth_started)
return -EINVAL;
- res = tipc_register_media(&eth_media_info);
- if (res)
- return res;
-
res = register_netdevice_notifier(&notifier);
if (!res)
eth_started = 1;
diff --git a/net/tipc/ib_media.c b/net/tipc/ib_media.c
index cbe7fe15cc7c..48e1c07842e6 100644
--- a/net/tipc/ib_media.c
+++ b/net/tipc/ib_media.c
@@ -60,7 +60,6 @@ struct ib_media {
struct work_struct cleanup;
};
-static struct tipc_media ib_media_info;
static struct ib_media ib_media_array[MAX_IB_MEDIA];
static int ib_started;
@@ -311,7 +310,7 @@ static int ib_msg2addr(const struct tipc_bearer *tb_ptr,
/*
* InfiniBand media registration info
*/
-static struct tipc_media ib_media_info = {
+struct tipc_media ib_media_info = {
.send_msg = send_msg,
.enable_media = enable_media,
.disable_media = disable_media,
@@ -338,10 +337,6 @@ int tipc_ib_media_start(void)
if (ib_started)
return -EINVAL;
- res = tipc_register_media(&ib_media_info);
- if (res)
- return res;
-
res = register_netdevice_notifier(&notifier);
if (!res)
ib_started = 1;
OpenPOWER on IntegriCloud