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

Reply via email to