diff options
Diffstat (limited to 'net/tipc/bearer.c')
| -rw-r--r-- | net/tipc/bearer.c | 17 | 
1 files changed, 15 insertions, 2 deletions
diff --git a/net/tipc/bearer.c b/net/tipc/bearer.c index 35cac7733fd3..53881406e200 100644 --- a/net/tipc/bearer.c +++ b/net/tipc/bearer.c @@ -541,6 +541,19 @@ int tipc_bearer_mtu(struct net *net, u32 bearer_id)  	return mtu;  } +int tipc_bearer_min_mtu(struct net *net, u32 bearer_id) +{ +	int mtu = TIPC_MIN_BEARER_MTU; +	struct tipc_bearer *b; + +	rcu_read_lock(); +	b = bearer_get(net, bearer_id); +	if (b) +		mtu += b->encap_hlen; +	rcu_read_unlock(); +	return mtu; +} +  /* tipc_bearer_xmit_skb - sends buffer to destination over bearer   */  void tipc_bearer_xmit_skb(struct net *net, u32 bearer_id, @@ -1138,8 +1151,8 @@ int __tipc_nl_bearer_set(struct sk_buff *skb, struct genl_info *info)  				return -EINVAL;  			}  #ifdef CONFIG_TIPC_MEDIA_UDP -			if (tipc_udp_mtu_bad(nla_get_u32 -					     (props[TIPC_NLA_PROP_MTU]))) { +			if (nla_get_u32(props[TIPC_NLA_PROP_MTU]) < +			    b->encap_hlen + TIPC_MIN_BEARER_MTU) {  				NL_SET_ERR_MSG(info->extack,  					       "MTU value is out-of-range");  				return -EINVAL;  | 
