aboutsummaryrefslogtreecommitdiffstats
path: root/net/tipc/node.c
diff options
context:
space:
mode:
authorRichard Alpe <richard.alpe@ericsson.com>2016-02-01 02:19:56 -0500
committerDavid S. Miller <davem@davemloft.net>2016-02-06 02:45:27 -0500
commitd01332f1acacc0cb43a61f4244dd2b846d4cd585 (patch)
tree5be9acc08fdcae39457755390df34ae915538e16 /net/tipc/node.c
parent6247fd9f6a08029003c00633ac67a848077153d2 (diff)
tipc: fix link attribute propagation bug
Changing certain link attributes (link tolerance and link priority) from the TIPC management tool is supposed to automatically take effect at both endpoints of the affected link. Currently the media address is not instantiated for the link and is used uninstantiated when crafting protocol messages designated for the peer endpoint. This means that changing a link property currently results in the property being changed on the local machine but the protocol message designated for the peer gets lost. Resulting in property discrepancy between the endpoints. In this patch we resolve this by using the media address from the link entry and using the bearer transmit function to send it. Hence, we can now eliminate the redundant function tipc_link_prot_xmit() and the redundant field tipc_link::media_addr. Fixes: 2af5ae372a4b (tipc: clean up unused code and structures) Reviewed-by: Jon Maloy <jon.maloy@ericsson.com> Reported-by: Jason Hu <huzhijiang@gmail.com> Signed-off-by: Richard Alpe <richard.alpe@ericsson.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/tipc/node.c')
-rw-r--r--net/tipc/node.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/net/tipc/node.c b/net/tipc/node.c
index fa97d9649a28..f8a8255a7182 100644
--- a/net/tipc/node.c
+++ b/net/tipc/node.c
@@ -1637,9 +1637,12 @@ int tipc_nl_node_set_link(struct sk_buff *skb, struct genl_info *info)
1637 char *name; 1637 char *name;
1638 struct tipc_link *link; 1638 struct tipc_link *link;
1639 struct tipc_node *node; 1639 struct tipc_node *node;
1640 struct sk_buff_head xmitq;
1640 struct nlattr *attrs[TIPC_NLA_LINK_MAX + 1]; 1641 struct nlattr *attrs[TIPC_NLA_LINK_MAX + 1];
1641 struct net *net = sock_net(skb->sk); 1642 struct net *net = sock_net(skb->sk);
1642 1643
1644 __skb_queue_head_init(&xmitq);
1645
1643 if (!info->attrs[TIPC_NLA_LINK]) 1646 if (!info->attrs[TIPC_NLA_LINK])
1644 return -EINVAL; 1647 return -EINVAL;
1645 1648
@@ -1683,13 +1686,13 @@ int tipc_nl_node_set_link(struct sk_buff *skb, struct genl_info *info)
1683 u32 tol; 1686 u32 tol;
1684 1687
1685 tol = nla_get_u32(props[TIPC_NLA_PROP_TOL]); 1688 tol = nla_get_u32(props[TIPC_NLA_PROP_TOL]);
1686 tipc_link_set_tolerance(link, tol); 1689 tipc_link_set_tolerance(link, tol, &xmitq);
1687 } 1690 }
1688 if (props[TIPC_NLA_PROP_PRIO]) { 1691 if (props[TIPC_NLA_PROP_PRIO]) {
1689 u32 prio; 1692 u32 prio;
1690 1693
1691 prio = nla_get_u32(props[TIPC_NLA_PROP_PRIO]); 1694 prio = nla_get_u32(props[TIPC_NLA_PROP_PRIO]);
1692 tipc_link_set_prio(link, prio); 1695 tipc_link_set_prio(link, prio, &xmitq);
1693 } 1696 }
1694 if (props[TIPC_NLA_PROP_WIN]) { 1697 if (props[TIPC_NLA_PROP_WIN]) {
1695 u32 win; 1698 u32 win;
@@ -1701,7 +1704,7 @@ int tipc_nl_node_set_link(struct sk_buff *skb, struct genl_info *info)
1701 1704
1702out: 1705out:
1703 tipc_node_read_unlock(node); 1706 tipc_node_read_unlock(node);
1704 1707 tipc_bearer_xmit(net, bearer_id, &xmitq, &node->links[bearer_id].maddr);
1705 return res; 1708 return res;
1706} 1709}
1707 1710