tipc: add media set to new netlink api
Add TIPC_NL_MEDIA_SET command to the new tipc netlink API.
This command can set one or more link properties for a particular
media.
Netlink logical layout of bearer set message:
-> media
    -> name
    -> link properties
        [ -> tolerance ]
        [ -> priority ]
        [ -> window ]
Signed-off-by: Richard Alpe <richard.alpe@ericsson.com>
Reviewed-by: Erik Hugne <erik.hugne@ericsson.com>
Reviewed-by: Jon Maloy <jon.maloy@ericsson.com>
Acked-by: Ying Xue <ying.xue@windriver.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
	
	
This commit is contained in:
		
					parent
					
						
							
								46f15c6794
							
						
					
				
			
			
				commit
				
					
						1e55417d8f
					
				
			
		
					 4 changed files with 54 additions and 0 deletions
				
			
		| 
						 | 
					@ -51,6 +51,7 @@ enum {
 | 
				
			||||||
	TIPC_NL_LINK_SET,
 | 
						TIPC_NL_LINK_SET,
 | 
				
			||||||
	TIPC_NL_LINK_RESET_STATS,
 | 
						TIPC_NL_LINK_RESET_STATS,
 | 
				
			||||||
	TIPC_NL_MEDIA_GET,
 | 
						TIPC_NL_MEDIA_GET,
 | 
				
			||||||
 | 
						TIPC_NL_MEDIA_SET,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	__TIPC_NL_CMD_MAX,
 | 
						__TIPC_NL_CMD_MAX,
 | 
				
			||||||
	TIPC_NL_CMD_MAX = __TIPC_NL_CMD_MAX - 1
 | 
						TIPC_NL_CMD_MAX = __TIPC_NL_CMD_MAX - 1
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1023,3 +1023,50 @@ err_out:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return err;
 | 
						return err;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int tipc_nl_media_set(struct sk_buff *skb, struct genl_info *info)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						int err;
 | 
				
			||||||
 | 
						char *name;
 | 
				
			||||||
 | 
						struct tipc_media *m;
 | 
				
			||||||
 | 
						struct nlattr *attrs[TIPC_NLA_BEARER_MAX + 1];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!info->attrs[TIPC_NLA_MEDIA])
 | 
				
			||||||
 | 
							return -EINVAL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						err = nla_parse_nested(attrs, TIPC_NLA_MEDIA_MAX,
 | 
				
			||||||
 | 
								       info->attrs[TIPC_NLA_MEDIA],
 | 
				
			||||||
 | 
								       tipc_nl_media_policy);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!attrs[TIPC_NLA_MEDIA_NAME])
 | 
				
			||||||
 | 
							return -EINVAL;
 | 
				
			||||||
 | 
						name = nla_data(attrs[TIPC_NLA_MEDIA_NAME]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						rtnl_lock();
 | 
				
			||||||
 | 
						m = tipc_media_find(name);
 | 
				
			||||||
 | 
						if (!m) {
 | 
				
			||||||
 | 
							rtnl_unlock();
 | 
				
			||||||
 | 
							return -EINVAL;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (attrs[TIPC_NLA_MEDIA_PROP]) {
 | 
				
			||||||
 | 
							struct nlattr *props[TIPC_NLA_PROP_MAX + 1];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							err = tipc_nl_parse_link_prop(attrs[TIPC_NLA_MEDIA_PROP],
 | 
				
			||||||
 | 
										      props);
 | 
				
			||||||
 | 
							if (err) {
 | 
				
			||||||
 | 
								rtnl_unlock();
 | 
				
			||||||
 | 
								return err;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (props[TIPC_NLA_PROP_TOL])
 | 
				
			||||||
 | 
								m->tolerance = nla_get_u32(props[TIPC_NLA_PROP_TOL]);
 | 
				
			||||||
 | 
							if (props[TIPC_NLA_PROP_PRIO])
 | 
				
			||||||
 | 
								m->priority = nla_get_u32(props[TIPC_NLA_PROP_PRIO]);
 | 
				
			||||||
 | 
							if (props[TIPC_NLA_PROP_WIN])
 | 
				
			||||||
 | 
								m->window = nla_get_u32(props[TIPC_NLA_PROP_WIN]);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						rtnl_unlock();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -186,6 +186,7 @@ int tipc_nl_bearer_set(struct sk_buff *skb, struct genl_info *info);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int tipc_nl_media_dump(struct sk_buff *skb, struct netlink_callback *cb);
 | 
					int tipc_nl_media_dump(struct sk_buff *skb, struct netlink_callback *cb);
 | 
				
			||||||
int tipc_nl_media_get(struct sk_buff *skb, struct genl_info *info);
 | 
					int tipc_nl_media_get(struct sk_buff *skb, struct genl_info *info);
 | 
				
			||||||
 | 
					int tipc_nl_media_set(struct sk_buff *skb, struct genl_info *info);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int tipc_media_set_priority(const char *name, u32 new_value);
 | 
					int tipc_media_set_priority(const char *name, u32 new_value);
 | 
				
			||||||
int tipc_media_set_window(const char *name, u32 new_value);
 | 
					int tipc_media_set_window(const char *name, u32 new_value);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -161,6 +161,11 @@ static const struct genl_ops tipc_genl_v2_ops[] = {
 | 
				
			||||||
		.doit	= tipc_nl_media_get,
 | 
							.doit	= tipc_nl_media_get,
 | 
				
			||||||
		.dumpit	= tipc_nl_media_dump,
 | 
							.dumpit	= tipc_nl_media_dump,
 | 
				
			||||||
		.policy = tipc_nl_policy,
 | 
							.policy = tipc_nl_policy,
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							.cmd	= TIPC_NL_MEDIA_SET,
 | 
				
			||||||
 | 
							.doit	= tipc_nl_media_set,
 | 
				
			||||||
 | 
							.policy = tipc_nl_policy,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue