Acked-by: me ///jon
> -----Original Message----- > From: Mohan Krishna Ghanta Krishnamurthy > Sent: Monday, April 09, 2018 12:24 > To: [email protected]; Jon Maloy > <[email protected]>; [email protected]; > [email protected]; Mohan Krishna Ghanta Krishnamurthy > <[email protected]> > Subject: [net-next 3/3] tipc: confgiure and apply UDP bearer MTU on running > links > > Currently, we have option to configure MTU of UDP media. The configured > MTU takes effect on the links going up after that moment. I.e, a user has to > reset bearer to have new value applied across its links. This is confusing and > disturbing on a running cluster. > > We now introduce the functionality to change the default UDP bearer MTU > in struct tipc_bearer. Additionally, the links are updated dynamically, > without > any need for a reset, when bearer value is changed. We leverage the existing > per-link functionality and the design being symetrical to the confguration of > link tolerance. > > Signed-off-by: GhantaKrishnamurthy MohanKrishna > <[email protected]> > --- > net/tipc/bearer.c | 16 +++++++++++++++- > net/tipc/node.c | 12 +++++++++--- > net/tipc/node.h | 2 +- > 3 files changed, 25 insertions(+), 5 deletions(-) > > diff --git a/net/tipc/bearer.c b/net/tipc/bearer.c index > a22caf9e5a18..2dfb492a7c94 100644 > --- a/net/tipc/bearer.c > +++ b/net/tipc/bearer.c > @@ -697,6 +697,9 @@ static int __tipc_nl_add_bearer(struct tipc_nl_msg > *msg, > goto prop_msg_full; > if (nla_put_u32(msg->skb, TIPC_NLA_PROP_WIN, bearer->window)) > goto prop_msg_full; > + if (bearer->media->type_id == TIPC_MEDIA_TYPE_UDP) > + if (nla_put_u32(msg->skb, TIPC_NLA_PROP_MTU, bearer- > >mtu)) > + goto prop_msg_full; > > nla_nest_end(msg->skb, prop); > > @@ -979,12 +982,23 @@ int __tipc_nl_bearer_set(struct sk_buff *skb, > struct genl_info *info) > > if (props[TIPC_NLA_PROP_TOL]) { > b->tolerance = > nla_get_u32(props[TIPC_NLA_PROP_TOL]); > - tipc_node_apply_tolerance(net, b); > + tipc_node_apply_property(net, b, > TIPC_NLA_PROP_TOL); > } > if (props[TIPC_NLA_PROP_PRIO]) > b->priority = > nla_get_u32(props[TIPC_NLA_PROP_PRIO]); > if (props[TIPC_NLA_PROP_WIN]) > b->window = > nla_get_u32(props[TIPC_NLA_PROP_WIN]); > + if (props[TIPC_NLA_PROP_MTU]) { > + if (b->media->type_id != TIPC_MEDIA_TYPE_UDP) > + return -EINVAL; > +#ifdef CONFIG_TIPC_MEDIA_UDP > + if (tipc_udp_mtu_bad(nla_get_u32 > + (props[TIPC_NLA_PROP_MTU]))) > + return -EINVAL; > + b->mtu = > nla_get_u32(props[TIPC_NLA_PROP_MTU]); > + tipc_node_apply_property(net, b, > TIPC_NLA_PROP_MTU); #endif > + } > } > > return 0; > diff --git a/net/tipc/node.c b/net/tipc/node.c index > c77dd2f3c589..b71e4e376bb9 100644 > --- a/net/tipc/node.c > +++ b/net/tipc/node.c > @@ -1681,7 +1681,8 @@ void tipc_rcv(struct net *net, struct sk_buff *skb, > struct tipc_bearer *b) > kfree_skb(skb); > } > > -void tipc_node_apply_tolerance(struct net *net, struct tipc_bearer *b) > +void tipc_node_apply_property(struct net *net, struct tipc_bearer *b, > + int prop) > { > struct tipc_net *tn = tipc_net(net); > int bearer_id = b->identity; > @@ -1696,8 +1697,13 @@ void tipc_node_apply_tolerance(struct net *net, > struct tipc_bearer *b) > list_for_each_entry_rcu(n, &tn->node_list, list) { > tipc_node_write_lock(n); > e = &n->links[bearer_id]; > - if (e->link) > - tipc_link_set_tolerance(e->link, b->tolerance, > &xmitq); > + if (e->link) { > + if (prop == TIPC_NLA_PROP_TOL) > + tipc_link_set_tolerance(e->link, b- > >tolerance, > + &xmitq); > + else if (prop == TIPC_NLA_PROP_MTU) > + tipc_link_set_mtu(e->link, b->mtu); > + } > tipc_node_write_unlock(n); > tipc_bearer_xmit(net, bearer_id, &xmitq, &e->maddr); > } > diff --git a/net/tipc/node.h b/net/tipc/node.h index > f24b83500df1..bb271a37c93f 100644 > --- a/net/tipc/node.h > +++ b/net/tipc/node.h > @@ -67,7 +67,7 @@ void tipc_node_check_dest(struct net *net, u32 onode, > u8 *peer_id128, > struct tipc_media_addr *maddr, > bool *respond, bool *dupl_addr); > void tipc_node_delete_links(struct net *net, int bearer_id); -void > tipc_node_apply_tolerance(struct net *net, struct tipc_bearer *b); > +void tipc_node_apply_property(struct net *net, struct tipc_bearer *b, > +int prop); > int tipc_node_get_linkname(struct net *net, u32 bearer_id, u32 node, > char *linkname, size_t len); > int tipc_node_xmit(struct net *net, struct sk_buff_head *list, u32 dnode, > -- > 2.1.4 ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ tipc-discussion mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/tipc-discussion
