diff options
author | Richard Alpe <richard.alpe@ericsson.com> | 2014-11-20 04:29:16 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-11-21 15:01:31 -0500 |
commit | 1e55417d8fc6f6d93b1cc6995b911d48ded2adfb (patch) | |
tree | d26540f2e2907589932f9cd6e3b2474d80cdfe69 /net/tipc | |
parent | 46f15c6794fb744bb7741d26143a85b9012c10d4 (diff) |
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>
Diffstat (limited to 'net/tipc')
-rw-r--r-- | net/tipc/bearer.c | 47 | ||||
-rw-r--r-- | net/tipc/bearer.h | 1 | ||||
-rw-r--r-- | net/tipc/netlink.c | 5 |
3 files changed, 53 insertions, 0 deletions
diff --git a/net/tipc/bearer.c b/net/tipc/bearer.c index 26630a51fcae..5f6f32369c16 100644 --- a/net/tipc/bearer.c +++ b/net/tipc/bearer.c | |||
@@ -1023,3 +1023,50 @@ err_out: | |||
1023 | 1023 | ||
1024 | return err; | 1024 | return err; |
1025 | } | 1025 | } |
1026 | |||
1027 | int tipc_nl_media_set(struct sk_buff *skb, struct genl_info *info) | ||
1028 | { | ||
1029 | int err; | ||
1030 | char *name; | ||
1031 | struct tipc_media *m; | ||
1032 | struct nlattr *attrs[TIPC_NLA_BEARER_MAX + 1]; | ||
1033 | |||
1034 | if (!info->attrs[TIPC_NLA_MEDIA]) | ||
1035 | return -EINVAL; | ||
1036 | |||
1037 | err = nla_parse_nested(attrs, TIPC_NLA_MEDIA_MAX, | ||
1038 | info->attrs[TIPC_NLA_MEDIA], | ||
1039 | tipc_nl_media_policy); | ||
1040 | |||
1041 | if (!attrs[TIPC_NLA_MEDIA_NAME]) | ||
1042 | return -EINVAL; | ||
1043 | name = nla_data(attrs[TIPC_NLA_MEDIA_NAME]); | ||
1044 | |||
1045 | rtnl_lock(); | ||
1046 | m = tipc_media_find(name); | ||
1047 | if (!m) { | ||
1048 | rtnl_unlock(); | ||
1049 | return -EINVAL; | ||
1050 | } | ||
1051 | |||
1052 | if (attrs[TIPC_NLA_MEDIA_PROP]) { | ||
1053 | struct nlattr *props[TIPC_NLA_PROP_MAX + 1]; | ||
1054 | |||
1055 | err = tipc_nl_parse_link_prop(attrs[TIPC_NLA_MEDIA_PROP], | ||
1056 | props); | ||
1057 | if (err) { | ||
1058 | rtnl_unlock(); | ||
1059 | return err; | ||
1060 | } | ||
1061 | |||
1062 | if (props[TIPC_NLA_PROP_TOL]) | ||
1063 | m->tolerance = nla_get_u32(props[TIPC_NLA_PROP_TOL]); | ||
1064 | if (props[TIPC_NLA_PROP_PRIO]) | ||
1065 | m->priority = nla_get_u32(props[TIPC_NLA_PROP_PRIO]); | ||
1066 | if (props[TIPC_NLA_PROP_WIN]) | ||
1067 | m->window = nla_get_u32(props[TIPC_NLA_PROP_WIN]); | ||
1068 | } | ||
1069 | rtnl_unlock(); | ||
1070 | |||
1071 | return 0; | ||
1072 | } | ||
diff --git a/net/tipc/bearer.h b/net/tipc/bearer.h index bacd225bccfb..b1d905209e83 100644 --- a/net/tipc/bearer.h +++ b/net/tipc/bearer.h | |||
@@ -186,6 +186,7 @@ int tipc_nl_bearer_set(struct sk_buff *skb, struct genl_info *info); | |||
186 | 186 | ||
187 | int tipc_nl_media_dump(struct sk_buff *skb, struct netlink_callback *cb); | 187 | int tipc_nl_media_dump(struct sk_buff *skb, struct netlink_callback *cb); |
188 | int tipc_nl_media_get(struct sk_buff *skb, struct genl_info *info); | 188 | int tipc_nl_media_get(struct sk_buff *skb, struct genl_info *info); |
189 | int tipc_nl_media_set(struct sk_buff *skb, struct genl_info *info); | ||
189 | 190 | ||
190 | int tipc_media_set_priority(const char *name, u32 new_value); | 191 | int tipc_media_set_priority(const char *name, u32 new_value); |
191 | int tipc_media_set_window(const char *name, u32 new_value); | 192 | int tipc_media_set_window(const char *name, u32 new_value); |
diff --git a/net/tipc/netlink.c b/net/tipc/netlink.c index 742e51a0afbb..8673e370b7ed 100644 --- a/net/tipc/netlink.c +++ b/net/tipc/netlink.c | |||
@@ -161,6 +161,11 @@ static const struct genl_ops tipc_genl_v2_ops[] = { | |||
161 | .doit = tipc_nl_media_get, | 161 | .doit = tipc_nl_media_get, |
162 | .dumpit = tipc_nl_media_dump, | 162 | .dumpit = tipc_nl_media_dump, |
163 | .policy = tipc_nl_policy, | 163 | .policy = tipc_nl_policy, |
164 | }, | ||
165 | { | ||
166 | .cmd = TIPC_NL_MEDIA_SET, | ||
167 | .doit = tipc_nl_media_set, | ||
168 | .policy = tipc_nl_policy, | ||
164 | } | 169 | } |
165 | }; | 170 | }; |
166 | 171 | ||