aboutsummaryrefslogtreecommitdiffstats
path: root/net/tipc
diff options
context:
space:
mode:
Diffstat (limited to 'net/tipc')
-rw-r--r--net/tipc/bearer.c47
-rw-r--r--net/tipc/bearer.h1
-rw-r--r--net/tipc/netlink.c5
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
1027int 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
187int tipc_nl_media_dump(struct sk_buff *skb, struct netlink_callback *cb); 187int tipc_nl_media_dump(struct sk_buff *skb, struct netlink_callback *cb);
188int tipc_nl_media_get(struct sk_buff *skb, struct genl_info *info); 188int tipc_nl_media_get(struct sk_buff *skb, struct genl_info *info);
189int tipc_nl_media_set(struct sk_buff *skb, struct genl_info *info);
189 190
190int tipc_media_set_priority(const char *name, u32 new_value); 191int tipc_media_set_priority(const char *name, u32 new_value);
191int tipc_media_set_window(const char *name, u32 new_value); 192int 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