|
@@ -112,39 +112,42 @@ int tipc_register_media(u32 media_type,
|
|
goto exit;
|
|
goto exit;
|
|
|
|
|
|
if (!media_name_valid(name)) {
|
|
if (!media_name_valid(name)) {
|
|
- warn("Media registration error: illegal name <%s>\n", name);
|
|
|
|
|
|
+ warn("Media <%s> rejected, illegal name\n", name);
|
|
goto exit;
|
|
goto exit;
|
|
}
|
|
}
|
|
if (!bcast_addr) {
|
|
if (!bcast_addr) {
|
|
- warn("Media registration error: no broadcast address supplied\n");
|
|
|
|
|
|
+ warn("Media <%s> rejected, no broadcast address\n", name);
|
|
goto exit;
|
|
goto exit;
|
|
}
|
|
}
|
|
if ((bearer_priority < TIPC_MIN_LINK_PRI) &&
|
|
if ((bearer_priority < TIPC_MIN_LINK_PRI) &&
|
|
(bearer_priority > TIPC_MAX_LINK_PRI)) {
|
|
(bearer_priority > TIPC_MAX_LINK_PRI)) {
|
|
- warn("Media registration error: priority %u\n", bearer_priority);
|
|
|
|
|
|
+ warn("Media <%s> rejected, illegal priority (%u)\n", name,
|
|
|
|
+ bearer_priority);
|
|
goto exit;
|
|
goto exit;
|
|
}
|
|
}
|
|
if ((link_tolerance < TIPC_MIN_LINK_TOL) ||
|
|
if ((link_tolerance < TIPC_MIN_LINK_TOL) ||
|
|
(link_tolerance > TIPC_MAX_LINK_TOL)) {
|
|
(link_tolerance > TIPC_MAX_LINK_TOL)) {
|
|
- warn("Media registration error: tolerance %u\n", link_tolerance);
|
|
|
|
|
|
+ warn("Media <%s> rejected, illegal tolerance (%u)\n", name,
|
|
|
|
+ link_tolerance);
|
|
goto exit;
|
|
goto exit;
|
|
}
|
|
}
|
|
|
|
|
|
media_id = media_count++;
|
|
media_id = media_count++;
|
|
if (media_id >= MAX_MEDIA) {
|
|
if (media_id >= MAX_MEDIA) {
|
|
- warn("Attempt to register more than %u media\n", MAX_MEDIA);
|
|
|
|
|
|
+ warn("Media <%s> rejected, media limit reached (%u)\n", name,
|
|
|
|
+ MAX_MEDIA);
|
|
media_count--;
|
|
media_count--;
|
|
goto exit;
|
|
goto exit;
|
|
}
|
|
}
|
|
for (i = 0; i < media_id; i++) {
|
|
for (i = 0; i < media_id; i++) {
|
|
if (media_list[i].type_id == media_type) {
|
|
if (media_list[i].type_id == media_type) {
|
|
- warn("Attempt to register second media with type %u\n",
|
|
|
|
|
|
+ warn("Media <%s> rejected, duplicate type (%u)\n", name,
|
|
media_type);
|
|
media_type);
|
|
media_count--;
|
|
media_count--;
|
|
goto exit;
|
|
goto exit;
|
|
}
|
|
}
|
|
if (!strcmp(name, media_list[i].name)) {
|
|
if (!strcmp(name, media_list[i].name)) {
|
|
- warn("Attempt to re-register media name <%s>\n", name);
|
|
|
|
|
|
+ warn("Media <%s> rejected, duplicate name\n", name);
|
|
media_count--;
|
|
media_count--;
|
|
goto exit;
|
|
goto exit;
|
|
}
|
|
}
|
|
@@ -283,6 +286,9 @@ static struct bearer *bearer_find(const char *name)
|
|
struct bearer *b_ptr;
|
|
struct bearer *b_ptr;
|
|
u32 i;
|
|
u32 i;
|
|
|
|
|
|
|
|
+ if (tipc_mode != TIPC_NET_MODE)
|
|
|
|
+ return NULL;
|
|
|
|
+
|
|
for (i = 0, b_ptr = tipc_bearers; i < MAX_BEARERS; i++, b_ptr++) {
|
|
for (i = 0, b_ptr = tipc_bearers; i < MAX_BEARERS; i++, b_ptr++) {
|
|
if (b_ptr->active && (!strcmp(b_ptr->publ.name, name)))
|
|
if (b_ptr->active && (!strcmp(b_ptr->publ.name, name)))
|
|
return b_ptr;
|
|
return b_ptr;
|
|
@@ -475,26 +481,33 @@ int tipc_enable_bearer(const char *name, u32 bcast_scope, u32 priority)
|
|
u32 i;
|
|
u32 i;
|
|
int res = -EINVAL;
|
|
int res = -EINVAL;
|
|
|
|
|
|
- if (tipc_mode != TIPC_NET_MODE)
|
|
|
|
|
|
+ if (tipc_mode != TIPC_NET_MODE) {
|
|
|
|
+ warn("Bearer <%s> rejected, not supported in standalone mode\n",
|
|
|
|
+ name);
|
|
return -ENOPROTOOPT;
|
|
return -ENOPROTOOPT;
|
|
-
|
|
|
|
- if (!bearer_name_validate(name, &b_name) ||
|
|
|
|
- !tipc_addr_domain_valid(bcast_scope) ||
|
|
|
|
- !in_scope(bcast_scope, tipc_own_addr))
|
|
|
|
|
|
+ }
|
|
|
|
+ if (!bearer_name_validate(name, &b_name)) {
|
|
|
|
+ warn("Bearer <%s> rejected, illegal name\n", name);
|
|
return -EINVAL;
|
|
return -EINVAL;
|
|
-
|
|
|
|
|
|
+ }
|
|
|
|
+ if (!tipc_addr_domain_valid(bcast_scope) ||
|
|
|
|
+ !in_scope(bcast_scope, tipc_own_addr)) {
|
|
|
|
+ warn("Bearer <%s> rejected, illegal broadcast scope\n", name);
|
|
|
|
+ return -EINVAL;
|
|
|
|
+ }
|
|
if ((priority < TIPC_MIN_LINK_PRI ||
|
|
if ((priority < TIPC_MIN_LINK_PRI ||
|
|
priority > TIPC_MAX_LINK_PRI) &&
|
|
priority > TIPC_MAX_LINK_PRI) &&
|
|
- (priority != TIPC_MEDIA_LINK_PRI))
|
|
|
|
|
|
+ (priority != TIPC_MEDIA_LINK_PRI)) {
|
|
|
|
+ warn("Bearer <%s> rejected, illegal priority\n", name);
|
|
return -EINVAL;
|
|
return -EINVAL;
|
|
|
|
+ }
|
|
|
|
|
|
write_lock_bh(&tipc_net_lock);
|
|
write_lock_bh(&tipc_net_lock);
|
|
- if (!tipc_bearers)
|
|
|
|
- goto failed;
|
|
|
|
|
|
|
|
m_ptr = media_find(b_name.media_name);
|
|
m_ptr = media_find(b_name.media_name);
|
|
if (!m_ptr) {
|
|
if (!m_ptr) {
|
|
- warn("No media <%s>\n", b_name.media_name);
|
|
|
|
|
|
+ warn("Bearer <%s> rejected, media <%s> not registered\n", name,
|
|
|
|
+ b_name.media_name);
|
|
goto failed;
|
|
goto failed;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -510,23 +523,24 @@ restart:
|
|
continue;
|
|
continue;
|
|
}
|
|
}
|
|
if (!strcmp(name, tipc_bearers[i].publ.name)) {
|
|
if (!strcmp(name, tipc_bearers[i].publ.name)) {
|
|
- warn("Bearer <%s> already enabled\n", name);
|
|
|
|
|
|
+ warn("Bearer <%s> rejected, already enabled\n", name);
|
|
goto failed;
|
|
goto failed;
|
|
}
|
|
}
|
|
if ((tipc_bearers[i].priority == priority) &&
|
|
if ((tipc_bearers[i].priority == priority) &&
|
|
(++with_this_prio > 2)) {
|
|
(++with_this_prio > 2)) {
|
|
if (priority-- == 0) {
|
|
if (priority-- == 0) {
|
|
- warn("Third bearer <%s> with priority %u, unable to lower to %u\n",
|
|
|
|
- name, priority + 1, priority);
|
|
|
|
|
|
+ warn("Bearer <%s> rejected, duplicate priority\n",
|
|
|
|
+ name);
|
|
goto failed;
|
|
goto failed;
|
|
}
|
|
}
|
|
- warn("Third bearer <%s> with priority %u, lowering to %u\n",
|
|
|
|
|
|
+ warn("Bearer <%s> priority adjustment required %u->%u\n",
|
|
name, priority + 1, priority);
|
|
name, priority + 1, priority);
|
|
goto restart;
|
|
goto restart;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (bearer_id >= MAX_BEARERS) {
|
|
if (bearer_id >= MAX_BEARERS) {
|
|
- warn("Attempt to enable more than %d bearers\n", MAX_BEARERS);
|
|
|
|
|
|
+ warn("Bearer <%s> rejected, bearer limit reached (%u)\n",
|
|
|
|
+ name, MAX_BEARERS);
|
|
goto failed;
|
|
goto failed;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -536,7 +550,7 @@ restart:
|
|
strcpy(b_ptr->publ.name, name);
|
|
strcpy(b_ptr->publ.name, name);
|
|
res = m_ptr->enable_bearer(&b_ptr->publ);
|
|
res = m_ptr->enable_bearer(&b_ptr->publ);
|
|
if (res) {
|
|
if (res) {
|
|
- warn("Failed to enable bearer <%s>\n", name);
|
|
|
|
|
|
+ warn("Bearer <%s> rejected, enable failure (%d)\n", name, -res);
|
|
goto failed;
|
|
goto failed;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -573,9 +587,6 @@ int tipc_block_bearer(const char *name)
|
|
struct link *l_ptr;
|
|
struct link *l_ptr;
|
|
struct link *temp_l_ptr;
|
|
struct link *temp_l_ptr;
|
|
|
|
|
|
- if (tipc_mode != TIPC_NET_MODE)
|
|
|
|
- return -ENOPROTOOPT;
|
|
|
|
-
|
|
|
|
read_lock_bh(&tipc_net_lock);
|
|
read_lock_bh(&tipc_net_lock);
|
|
b_ptr = bearer_find(name);
|
|
b_ptr = bearer_find(name);
|
|
if (!b_ptr) {
|
|
if (!b_ptr) {
|
|
@@ -584,6 +595,7 @@ int tipc_block_bearer(const char *name)
|
|
return -EINVAL;
|
|
return -EINVAL;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ info("Blocking bearer <%s>\n", name);
|
|
spin_lock_bh(&b_ptr->publ.lock);
|
|
spin_lock_bh(&b_ptr->publ.lock);
|
|
b_ptr->publ.blocked = 1;
|
|
b_ptr->publ.blocked = 1;
|
|
list_for_each_entry_safe(l_ptr, temp_l_ptr, &b_ptr->links, link_list) {
|
|
list_for_each_entry_safe(l_ptr, temp_l_ptr, &b_ptr->links, link_list) {
|
|
@@ -595,7 +607,6 @@ int tipc_block_bearer(const char *name)
|
|
}
|
|
}
|
|
spin_unlock_bh(&b_ptr->publ.lock);
|
|
spin_unlock_bh(&b_ptr->publ.lock);
|
|
read_unlock_bh(&tipc_net_lock);
|
|
read_unlock_bh(&tipc_net_lock);
|
|
- info("Blocked bearer <%s>\n", name);
|
|
|
|
return TIPC_OK;
|
|
return TIPC_OK;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -611,15 +622,13 @@ static int bearer_disable(const char *name)
|
|
struct link *l_ptr;
|
|
struct link *l_ptr;
|
|
struct link *temp_l_ptr;
|
|
struct link *temp_l_ptr;
|
|
|
|
|
|
- if (tipc_mode != TIPC_NET_MODE)
|
|
|
|
- return -ENOPROTOOPT;
|
|
|
|
-
|
|
|
|
b_ptr = bearer_find(name);
|
|
b_ptr = bearer_find(name);
|
|
if (!b_ptr) {
|
|
if (!b_ptr) {
|
|
warn("Attempt to disable unknown bearer <%s>\n", name);
|
|
warn("Attempt to disable unknown bearer <%s>\n", name);
|
|
return -EINVAL;
|
|
return -EINVAL;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ info("Disabling bearer <%s>\n", name);
|
|
tipc_disc_stop_link_req(b_ptr->link_req);
|
|
tipc_disc_stop_link_req(b_ptr->link_req);
|
|
spin_lock_bh(&b_ptr->publ.lock);
|
|
spin_lock_bh(&b_ptr->publ.lock);
|
|
b_ptr->link_req = NULL;
|
|
b_ptr->link_req = NULL;
|
|
@@ -635,7 +644,6 @@ static int bearer_disable(const char *name)
|
|
tipc_link_delete(l_ptr);
|
|
tipc_link_delete(l_ptr);
|
|
}
|
|
}
|
|
spin_unlock_bh(&b_ptr->publ.lock);
|
|
spin_unlock_bh(&b_ptr->publ.lock);
|
|
- info("Disabled bearer <%s>\n", name);
|
|
|
|
memset(b_ptr, 0, sizeof(struct bearer));
|
|
memset(b_ptr, 0, sizeof(struct bearer));
|
|
return TIPC_OK;
|
|
return TIPC_OK;
|
|
}
|
|
}
|