aboutsummaryrefslogtreecommitdiffstats
path: root/net/tipc
diff options
context:
space:
mode:
authorJon Paul Maloy <jon.maloy@ericsson.com>2014-01-07 17:02:41 -0500
committerDavid S. Miller <davem@davemloft.net>2014-01-07 18:44:25 -0500
commit170b3927b4c4f6e105964f81ae985fc9772b1f9b (patch)
tree96854cf2dc9b28a700f23c42c1251411fb0132cd /net/tipc
parentfd44b93cb5eee218231f6ce5883df937b3b9c3eb (diff)
tipc: rename functions related to link failover and improve comments
The functionality related to link addition and failover is unnecessarily hard to understand and maintain. We try to improve this by renaming some of the functions, at the same time adding or improving the explanatory comments around them. Names such as "tipc_rcv()" etc. also align better with what is used in other networking components. The changes in this commit are purely cosmetic, no functional changes are made. Signed-off-by: Jon Maloy <jon.maloy@ericsson.com> Reviewed-by: Ying Xue <ying.xue@windriver.com> Reviewed-by: Paul Gortmaker <paul.gortmaker@windriver.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/tipc')
-rw-r--r--net/tipc/bearer.c2
-rw-r--r--net/tipc/bearer.h3
-rw-r--r--net/tipc/link.c70
-rw-r--r--net/tipc/link.h15
-rw-r--r--net/tipc/node.c4
5 files changed, 56 insertions, 38 deletions
diff --git a/net/tipc/bearer.c b/net/tipc/bearer.c
index 07ed5cc8235d..2d456ab0e843 100644
--- a/net/tipc/bearer.c
+++ b/net/tipc/bearer.c
@@ -541,7 +541,7 @@ static int tipc_l2_rcv_msg(struct sk_buff *buf, struct net_device *dev,
541 if (likely(b_ptr)) { 541 if (likely(b_ptr)) {
542 if (likely(buf->pkt_type <= PACKET_BROADCAST)) { 542 if (likely(buf->pkt_type <= PACKET_BROADCAST)) {
543 buf->next = NULL; 543 buf->next = NULL;
544 tipc_recv_msg(buf, b_ptr); 544 tipc_rcv(buf, b_ptr);
545 rcu_read_unlock(); 545 rcu_read_unlock();
546 return NET_RX_SUCCESS; 546 return NET_RX_SUCCESS;
547 } 547 }
diff --git a/net/tipc/bearer.h b/net/tipc/bearer.h
index 410efb1e930b..4f5db9ad5bf6 100644
--- a/net/tipc/bearer.h
+++ b/net/tipc/bearer.h
@@ -161,8 +161,7 @@ extern struct tipc_bearer tipc_bearers[];
161 * TIPC routines available to supported media types 161 * TIPC routines available to supported media types
162 */ 162 */
163 163
164void tipc_recv_msg(struct sk_buff *buf, struct tipc_bearer *tb_ptr); 164void tipc_rcv(struct sk_buff *buf, struct tipc_bearer *tb_ptr);
165
166int tipc_enable_bearer(const char *bearer_name, u32 disc_domain, u32 priority); 165int tipc_enable_bearer(const char *bearer_name, u32 disc_domain, u32 priority);
167int tipc_disable_bearer(const char *name); 166int tipc_disable_bearer(const char *name);
168 167
diff --git a/net/tipc/link.c b/net/tipc/link.c
index 131a32a7b174..bb48b9685020 100644
--- a/net/tipc/link.c
+++ b/net/tipc/link.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * net/tipc/link.c: TIPC link code 2 * net/tipc/link.c: TIPC link code
3 * 3 *
4 * Copyright (c) 1996-2007, 2012, Ericsson AB 4 * Copyright (c) 1996-2007, 2012-2014, Ericsson AB
5 * Copyright (c) 2004-2007, 2010-2013, Wind River Systems 5 * Copyright (c) 2004-2007, 2010-2013, Wind River Systems
6 * All rights reserved. 6 * All rights reserved.
7 * 7 *
@@ -78,8 +78,8 @@ static const char *link_unk_evt = "Unknown link event ";
78static void link_handle_out_of_seq_msg(struct tipc_link *l_ptr, 78static void link_handle_out_of_seq_msg(struct tipc_link *l_ptr,
79 struct sk_buff *buf); 79 struct sk_buff *buf);
80static void link_recv_proto_msg(struct tipc_link *l_ptr, struct sk_buff *buf); 80static void link_recv_proto_msg(struct tipc_link *l_ptr, struct sk_buff *buf);
81static int link_recv_changeover_msg(struct tipc_link **l_ptr, 81static int tipc_link_tunnel_rcv(struct tipc_link **l_ptr,
82 struct sk_buff **buf); 82 struct sk_buff **buf);
83static void link_set_supervision_props(struct tipc_link *l_ptr, u32 tolerance); 83static void link_set_supervision_props(struct tipc_link *l_ptr, u32 tolerance);
84static int link_send_sections_long(struct tipc_port *sender, 84static int link_send_sections_long(struct tipc_port *sender,
85 struct iovec const *msg_sect, 85 struct iovec const *msg_sect,
@@ -278,7 +278,8 @@ struct tipc_link *tipc_link_create(struct tipc_node *n_ptr,
278 278
279 tipc_node_attach_link(n_ptr, l_ptr); 279 tipc_node_attach_link(n_ptr, l_ptr);
280 280
281 k_init_timer(&l_ptr->timer, (Handler)link_timeout, (unsigned long)l_ptr); 281 k_init_timer(&l_ptr->timer, (Handler)link_timeout,
282 (unsigned long)l_ptr);
282 list_add_tail(&l_ptr->link_list, &b_ptr->links); 283 list_add_tail(&l_ptr->link_list, &b_ptr->links);
283 tipc_k_signal((Handler)link_start, (unsigned long)l_ptr); 284 tipc_k_signal((Handler)link_start, (unsigned long)l_ptr);
284 285
@@ -1422,14 +1423,14 @@ static int link_recv_buf_validate(struct sk_buff *buf)
1422} 1423}
1423 1424
1424/** 1425/**
1425 * tipc_recv_msg - process TIPC messages arriving from off-node 1426 * tipc_rcv - process TIPC packets/messages arriving from off-node
1426 * @head: pointer to message buffer chain 1427 * @head: pointer to message buffer chain
1427 * @tb_ptr: pointer to bearer message arrived on 1428 * @tb_ptr: pointer to bearer message arrived on
1428 * 1429 *
1429 * Invoked with no locks held. Bearer pointer must point to a valid bearer 1430 * Invoked with no locks held. Bearer pointer must point to a valid bearer
1430 * structure (i.e. cannot be NULL), but bearer can be inactive. 1431 * structure (i.e. cannot be NULL), but bearer can be inactive.
1431 */ 1432 */
1432void tipc_recv_msg(struct sk_buff *head, struct tipc_bearer *b_ptr) 1433void tipc_rcv(struct sk_buff *head, struct tipc_bearer *b_ptr)
1433{ 1434{
1434 read_lock_bh(&tipc_net_lock); 1435 read_lock_bh(&tipc_net_lock);
1435 while (head) { 1436 while (head) {
@@ -1603,7 +1604,7 @@ deliver:
1603 continue; 1604 continue;
1604 case CHANGEOVER_PROTOCOL: 1605 case CHANGEOVER_PROTOCOL:
1605 type = msg_type(msg); 1606 type = msg_type(msg);
1606 if (link_recv_changeover_msg(&l_ptr, &buf)) { 1607 if (tipc_link_tunnel_rcv(&l_ptr, &buf)) {
1607 msg = buf_msg(buf); 1608 msg = buf_msg(buf);
1608 seq_no = msg_seqno(msg); 1609 seq_no = msg_seqno(msg);
1609 if (type == ORIGINAL_MSG) 1610 if (type == ORIGINAL_MSG)
@@ -1954,13 +1955,13 @@ exit:
1954} 1955}
1955 1956
1956 1957
1957/* 1958/* tipc_link_tunnel_xmit(): Tunnel one packet via a link belonging to
1958 * tipc_link_tunnel(): Send one message via a link belonging to 1959 * a different bearer. Owner node is locked.
1959 * another bearer. Owner node is locked.
1960 */ 1960 */
1961static void tipc_link_tunnel(struct tipc_link *l_ptr, 1961static void tipc_link_tunnel_xmit(struct tipc_link *l_ptr,
1962 struct tipc_msg *tunnel_hdr, struct tipc_msg *msg, 1962 struct tipc_msg *tunnel_hdr,
1963 u32 selector) 1963 struct tipc_msg *msg,
1964 u32 selector)
1964{ 1965{
1965 struct tipc_link *tunnel; 1966 struct tipc_link *tunnel;
1966 struct sk_buff *buf; 1967 struct sk_buff *buf;
@@ -1983,12 +1984,13 @@ static void tipc_link_tunnel(struct tipc_link *l_ptr,
1983} 1984}
1984 1985
1985 1986
1986 1987/* tipc_link_failover_send_queue(): A link has gone down, but a second
1987/* 1988 * link is still active. We can do failover. Tunnel the failing link's
1988 * changeover(): Send whole message queue via the remaining link 1989 * whole send queue via the remaining link. This way, we don't lose
1989 * Owner node is locked. 1990 * any packets, and sequence order is preserved for subsequent traffic
1991 * sent over the remaining link. Owner node is locked.
1990 */ 1992 */
1991void tipc_link_changeover(struct tipc_link *l_ptr) 1993void tipc_link_failover_send_queue(struct tipc_link *l_ptr)
1992{ 1994{
1993 u32 msgcount = l_ptr->out_queue_size; 1995 u32 msgcount = l_ptr->out_queue_size;
1994 struct sk_buff *crs = l_ptr->first_out; 1996 struct sk_buff *crs = l_ptr->first_out;
@@ -2037,20 +2039,30 @@ void tipc_link_changeover(struct tipc_link *l_ptr)
2037 msgcount = msg_msgcnt(msg); 2039 msgcount = msg_msgcnt(msg);
2038 while (msgcount--) { 2040 while (msgcount--) {
2039 msg_set_seqno(m, msg_seqno(msg)); 2041 msg_set_seqno(m, msg_seqno(msg));
2040 tipc_link_tunnel(l_ptr, &tunnel_hdr, m, 2042 tipc_link_tunnel_xmit(l_ptr, &tunnel_hdr, m,
2041 msg_link_selector(m)); 2043 msg_link_selector(m));
2042 pos += align(msg_size(m)); 2044 pos += align(msg_size(m));
2043 m = (struct tipc_msg *)pos; 2045 m = (struct tipc_msg *)pos;
2044 } 2046 }
2045 } else { 2047 } else {
2046 tipc_link_tunnel(l_ptr, &tunnel_hdr, msg, 2048 tipc_link_tunnel_xmit(l_ptr, &tunnel_hdr, msg,
2047 msg_link_selector(msg)); 2049 msg_link_selector(msg));
2048 } 2050 }
2049 crs = crs->next; 2051 crs = crs->next;
2050 } 2052 }
2051} 2053}
2052 2054
2053void tipc_link_send_duplicate(struct tipc_link *l_ptr, struct tipc_link *tunnel) 2055/* tipc_link_dup_send_queue(): A second link has become active. Tunnel a
2056 * duplicate of the first link's send queue via the new link. This way, we
2057 * are guaranteed that currently queued packets from a socket are delivered
2058 * before future traffic from the same socket, even if this is using the
2059 * new link. The last arriving copy of each duplicate packet is dropped at
2060 * the receiving end by the regular protocol check, so packet cardinality
2061 * and sequence order is preserved per sender/receiver socket pair.
2062 * Owner node is locked.
2063 */
2064void tipc_link_dup_send_queue(struct tipc_link *l_ptr,
2065 struct tipc_link *tunnel)
2054{ 2066{
2055 struct sk_buff *iter; 2067 struct sk_buff *iter;
2056 struct tipc_msg tunnel_hdr; 2068 struct tipc_msg tunnel_hdr;
@@ -2106,12 +2118,14 @@ static struct sk_buff *buf_extract(struct sk_buff *skb, u32 from_pos)
2106 return eb; 2118 return eb;
2107} 2119}
2108 2120
2109/* 2121/* tipc_link_tunnel_rcv(): Receive a tunneled packet, sent
2110 * link_recv_changeover_msg(): Receive tunneled packet sent 2122 * via other link as result of a failover (ORIGINAL_MSG) or
2111 * via other link. Node is locked. Return extracted buffer. 2123 * a new active link (DUPLICATE_MSG). Failover packets are
2124 * returned to the active link for delivery upwards.
2125 * Owner node is locked.
2112 */ 2126 */
2113static int link_recv_changeover_msg(struct tipc_link **l_ptr, 2127static int tipc_link_tunnel_rcv(struct tipc_link **l_ptr,
2114 struct sk_buff **buf) 2128 struct sk_buff **buf)
2115{ 2129{
2116 struct sk_buff *tunnel_buf = *buf; 2130 struct sk_buff *tunnel_buf = *buf;
2117 struct tipc_link *dest_link; 2131 struct tipc_link *dest_link;
diff --git a/net/tipc/link.h b/net/tipc/link.h
index 0636ca95be36..89ab89be848d 100644
--- a/net/tipc/link.h
+++ b/net/tipc/link.h
@@ -216,15 +216,20 @@ struct tipc_link *tipc_link_create(struct tipc_node *n_ptr,
216 struct tipc_bearer *b_ptr, 216 struct tipc_bearer *b_ptr,
217 const struct tipc_media_addr *media_addr); 217 const struct tipc_media_addr *media_addr);
218void tipc_link_delete(struct tipc_link *l_ptr); 218void tipc_link_delete(struct tipc_link *l_ptr);
219void tipc_link_changeover(struct tipc_link *l_ptr); 219void tipc_link_failover_send_queue(struct tipc_link *l_ptr);
220void tipc_link_send_duplicate(struct tipc_link *l_ptr, struct tipc_link *dest); 220void tipc_link_dup_send_queue(struct tipc_link *l_ptr,
221 struct tipc_link *dest);
221void tipc_link_reset_fragments(struct tipc_link *l_ptr); 222void tipc_link_reset_fragments(struct tipc_link *l_ptr);
222int tipc_link_is_up(struct tipc_link *l_ptr); 223int tipc_link_is_up(struct tipc_link *l_ptr);
223int tipc_link_is_active(struct tipc_link *l_ptr); 224int tipc_link_is_active(struct tipc_link *l_ptr);
224void tipc_link_stop(struct tipc_link *l_ptr); 225void tipc_link_stop(struct tipc_link *l_ptr);
225struct sk_buff *tipc_link_cmd_config(const void *req_tlv_area, int req_tlv_space, u16 cmd); 226struct sk_buff *tipc_link_cmd_config(const void *req_tlv_area,
226struct sk_buff *tipc_link_cmd_show_stats(const void *req_tlv_area, int req_tlv_space); 227 int req_tlv_space,
227struct sk_buff *tipc_link_cmd_reset_stats(const void *req_tlv_area, int req_tlv_space); 228 u16 cmd);
229struct sk_buff *tipc_link_cmd_show_stats(const void *req_tlv_area,
230 int req_tlv_space);
231struct sk_buff *tipc_link_cmd_reset_stats(const void *req_tlv_area,
232 int req_tlv_space);
228void tipc_link_reset(struct tipc_link *l_ptr); 233void tipc_link_reset(struct tipc_link *l_ptr);
229int tipc_link_send(struct sk_buff *buf, u32 dest, u32 selector); 234int tipc_link_send(struct sk_buff *buf, u32 dest, u32 selector);
230void tipc_link_send_names(struct list_head *message_list, u32 dest); 235void tipc_link_send_names(struct list_head *message_list, u32 dest);
diff --git a/net/tipc/node.c b/net/tipc/node.c
index e167d2615569..efe4d41bf11b 100644
--- a/net/tipc/node.c
+++ b/net/tipc/node.c
@@ -162,7 +162,7 @@ void tipc_node_link_up(struct tipc_node *n_ptr, struct tipc_link *l_ptr)
162 pr_info("New link <%s> becomes standby\n", l_ptr->name); 162 pr_info("New link <%s> becomes standby\n", l_ptr->name);
163 return; 163 return;
164 } 164 }
165 tipc_link_send_duplicate(active[0], l_ptr); 165 tipc_link_dup_send_queue(active[0], l_ptr);
166 if (l_ptr->priority == active[0]->priority) { 166 if (l_ptr->priority == active[0]->priority) {
167 active[0] = l_ptr; 167 active[0] = l_ptr;
168 return; 168 return;
@@ -225,7 +225,7 @@ void tipc_node_link_down(struct tipc_node *n_ptr, struct tipc_link *l_ptr)
225 if (active[0] == l_ptr) 225 if (active[0] == l_ptr)
226 node_select_active_links(n_ptr); 226 node_select_active_links(n_ptr);
227 if (tipc_node_is_up(n_ptr)) 227 if (tipc_node_is_up(n_ptr))
228 tipc_link_changeover(l_ptr); 228 tipc_link_failover_send_queue(l_ptr);
229 else 229 else
230 node_lost_contact(n_ptr); 230 node_lost_contact(n_ptr);
231} 231}