Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 901271e0 authored by GhantaKrishnamurthy MohanKrishna's avatar GhantaKrishnamurthy MohanKrishna Committed by David S. Miller
Browse files

tipc: implement configuration of UDP media MTU



In previous commit, we changed the default emulated MTU for UDP bearers
to 14k.

This commit adds the functionality to set/change the default value
by configuring new MTU for UDP media. UDP bearer(s) have to be disabled
and enabled back for the new MTU to take effect.

Acked-by: default avatarYing Xue <ying.xue@windriver.com>
Acked-by: default avatarJon Maloy <jon.maloy@ericsson.com>
Signed-off-by: default avatarGhantaKrishnamurthy MohanKrishna <mohan.krishna.ghanta.krishnamurthy@ericsson.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent a4dfa72d
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -266,6 +266,7 @@ enum {
	TIPC_NLA_PROP_PRIO,		/* u32 */
	TIPC_NLA_PROP_PRIO,		/* u32 */
	TIPC_NLA_PROP_TOL,		/* u32 */
	TIPC_NLA_PROP_TOL,		/* u32 */
	TIPC_NLA_PROP_WIN,		/* u32 */
	TIPC_NLA_PROP_WIN,		/* u32 */
	TIPC_NLA_PROP_MTU,		/* u32 */


	__TIPC_NLA_PROP_MAX,
	__TIPC_NLA_PROP_MAX,
	TIPC_NLA_PROP_MAX = __TIPC_NLA_PROP_MAX - 1
	TIPC_NLA_PROP_MAX = __TIPC_NLA_PROP_MAX - 1
+13 −0
Original line number Original line Diff line number Diff line
@@ -1029,6 +1029,9 @@ static int __tipc_nl_add_media(struct tipc_nl_msg *msg,
		goto prop_msg_full;
		goto prop_msg_full;
	if (nla_put_u32(msg->skb, TIPC_NLA_PROP_WIN, media->window))
	if (nla_put_u32(msg->skb, TIPC_NLA_PROP_WIN, media->window))
		goto prop_msg_full;
		goto prop_msg_full;
	if (media->type_id == TIPC_MEDIA_TYPE_UDP)
		if (nla_put_u32(msg->skb, TIPC_NLA_PROP_MTU, media->mtu))
			goto prop_msg_full;


	nla_nest_end(msg->skb, prop);
	nla_nest_end(msg->skb, prop);
	nla_nest_end(msg->skb, attrs);
	nla_nest_end(msg->skb, attrs);
@@ -1158,6 +1161,16 @@ int __tipc_nl_media_set(struct sk_buff *skb, struct genl_info *info)
			m->priority = nla_get_u32(props[TIPC_NLA_PROP_PRIO]);
			m->priority = nla_get_u32(props[TIPC_NLA_PROP_PRIO]);
		if (props[TIPC_NLA_PROP_WIN])
		if (props[TIPC_NLA_PROP_WIN])
			m->window = nla_get_u32(props[TIPC_NLA_PROP_WIN]);
			m->window = nla_get_u32(props[TIPC_NLA_PROP_WIN]);
		if (props[TIPC_NLA_PROP_MTU]) {
			if (m->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;
			m->mtu = nla_get_u32(props[TIPC_NLA_PROP_MTU]);
#endif
		}
	}
	}


	return 0;
	return 0;
+3 −0
Original line number Original line Diff line number Diff line
@@ -94,6 +94,8 @@ struct tipc_bearer;
 * @priority: default link (and bearer) priority
 * @priority: default link (and bearer) priority
 * @tolerance: default time (in ms) before declaring link failure
 * @tolerance: default time (in ms) before declaring link failure
 * @window: default window (in packets) before declaring link congestion
 * @window: default window (in packets) before declaring link congestion
 * @mtu: max packet size bearer can support for media type not dependent on
 * underlying device MTU
 * @type_id: TIPC media identifier
 * @type_id: TIPC media identifier
 * @hwaddr_len: TIPC media address len
 * @hwaddr_len: TIPC media address len
 * @name: media name
 * @name: media name
@@ -118,6 +120,7 @@ struct tipc_media {
	u32 priority;
	u32 priority;
	u32 tolerance;
	u32 tolerance;
	u32 window;
	u32 window;
	u32 mtu;
	u32 type_id;
	u32 type_id;
	u32 hwaddr_len;
	u32 hwaddr_len;
	char name[TIPC_MAX_MEDIA_NAME];
	char name[TIPC_MAX_MEDIA_NAME];
+14 −0
Original line number Original line Diff line number Diff line
@@ -38,9 +38,23 @@
#ifndef _TIPC_UDP_MEDIA_H
#ifndef _TIPC_UDP_MEDIA_H
#define _TIPC_UDP_MEDIA_H
#define _TIPC_UDP_MEDIA_H


#include <linux/ip.h>
#include <linux/udp.h>

int tipc_udp_nl_bearer_add(struct tipc_bearer *b, struct nlattr *attr);
int tipc_udp_nl_bearer_add(struct tipc_bearer *b, struct nlattr *attr);
int tipc_udp_nl_add_bearer_data(struct tipc_nl_msg *msg, struct tipc_bearer *b);
int tipc_udp_nl_add_bearer_data(struct tipc_nl_msg *msg, struct tipc_bearer *b);
int tipc_udp_nl_dump_remoteip(struct sk_buff *skb, struct netlink_callback *cb);
int tipc_udp_nl_dump_remoteip(struct sk_buff *skb, struct netlink_callback *cb);


/* check if configured MTU is too low for tipc headers */
static inline bool tipc_udp_mtu_bad(u32 mtu)
{
	if (mtu >= (TIPC_MIN_BEARER_MTU + sizeof(struct iphdr) +
	    sizeof(struct udphdr)))
		return false;

	pr_warn("MTU too low for tipc bearer\n");
	return true;
}

#endif
#endif
#endif
#endif