forked from mirrors/linux
		
	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: Ying Xue <ying.xue@windriver.com> Acked-by: Jon Maloy <jon.maloy@ericsson.com> Signed-off-by: GhantaKrishnamurthy MohanKrishna <mohan.krishna.ghanta.krishnamurthy@ericsson.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
		
							parent
							
								
									a4dfa72d0a
								
							
						
					
					
						commit
						901271e040
					
				
					 4 changed files with 31 additions and 0 deletions
				
			
		| 
						 | 
					@ -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
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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];
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue