Skip to content

Commit

Permalink
tipc: make cluster size threshold for monitoring configurable
Browse files Browse the repository at this point in the history
In this commit, we introduce support to configure the minimum
threshold to activate the new link monitoring algorithm.

Reviewed-by: Jon Maloy <[email protected]>
Signed-off-by: Parthasarathy Bhuvaragan <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
  • Loading branch information
Parthasarathy Bhuvaragan authored and davem330 committed Jul 26, 2016
1 parent 9ff26e9 commit 7b3f522
Show file tree
Hide file tree
Showing 7 changed files with 66 additions and 2 deletions.
11 changes: 11 additions & 0 deletions include/uapi/linux/tipc_netlink.h
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ enum {
TIPC_NL_NET_GET,
TIPC_NL_NET_SET,
TIPC_NL_NAME_TABLE_GET,
TIPC_NL_MON_SET,

__TIPC_NL_CMD_MAX,
TIPC_NL_CMD_MAX = __TIPC_NL_CMD_MAX - 1
Expand All @@ -72,6 +73,7 @@ enum {
TIPC_NLA_NODE, /* nest */
TIPC_NLA_NET, /* nest */
TIPC_NLA_NAME_TABLE, /* nest */
TIPC_NLA_MON, /* nest */

__TIPC_NLA_MAX,
TIPC_NLA_MAX = __TIPC_NLA_MAX - 1
Expand Down Expand Up @@ -166,6 +168,15 @@ enum {
TIPC_NLA_NAME_TABLE_MAX = __TIPC_NLA_NAME_TABLE_MAX - 1
};

/* Monitor info */
enum {
TIPC_NLA_MON_UNSPEC,
TIPC_NLA_MON_ACTIVATION_THRESHOLD, /* u32 */

__TIPC_NLA_MON_MAX,
TIPC_NLA_MON_MAX = __TIPC_NLA_MON_MAX - 1
};

/* Publication info */
enum {
TIPC_NLA_PUBL_UNSPEC,
Expand Down
12 changes: 12 additions & 0 deletions net/tipc/monitor.c
Original file line number Diff line number Diff line change
Expand Up @@ -649,3 +649,15 @@ void tipc_mon_delete(struct net *net, int bearer_id)
kfree(self);
kfree(mon);
}

int tipc_nl_monitor_set_threshold(struct net *net, u32 cluster_size)
{
struct tipc_net *tn = tipc_net(net);

if (cluster_size > TIPC_CLUSTER_SIZE)
return -EINVAL;

tn->mon_threshold = cluster_size;

return 0;
}
1 change: 1 addition & 0 deletions net/tipc/monitor.h
Original file line number Diff line number Diff line change
Expand Up @@ -69,5 +69,6 @@ void tipc_mon_get_state(struct net *net, u32 addr,
int bearer_id);
void tipc_mon_remove_peer(struct net *net, u32 addr, int bearer_id);

int tipc_nl_monitor_set_threshold(struct net *net, u32 cluster_size);
extern const int tipc_max_domain_size;
#endif
15 changes: 13 additions & 2 deletions net/tipc/netlink.c
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,8 @@ static const struct nla_policy tipc_nl_policy[TIPC_NLA_MAX + 1] = {
[TIPC_NLA_MEDIA] = { .type = NLA_NESTED, },
[TIPC_NLA_NODE] = { .type = NLA_NESTED, },
[TIPC_NLA_NET] = { .type = NLA_NESTED, },
[TIPC_NLA_NAME_TABLE] = { .type = NLA_NESTED, }
[TIPC_NLA_NAME_TABLE] = { .type = NLA_NESTED, },
[TIPC_NLA_MON] = { .type = NLA_NESTED, },
};

const struct nla_policy
Expand All @@ -61,6 +62,11 @@ tipc_nl_name_table_policy[TIPC_NLA_NAME_TABLE_MAX + 1] = {
[TIPC_NLA_NAME_TABLE_PUBL] = { .type = NLA_NESTED }
};

const struct nla_policy tipc_nl_monitor_policy[TIPC_NLA_MON_MAX + 1] = {
[TIPC_NLA_MON_UNSPEC] = { .type = NLA_UNSPEC },
[TIPC_NLA_MON_ACTIVATION_THRESHOLD] = { .type = NLA_U32 },
};

const struct nla_policy tipc_nl_sock_policy[TIPC_NLA_SOCK_MAX + 1] = {
[TIPC_NLA_SOCK_UNSPEC] = { .type = NLA_UNSPEC },
[TIPC_NLA_SOCK_ADDR] = { .type = NLA_U32 },
Expand Down Expand Up @@ -214,7 +220,12 @@ static const struct genl_ops tipc_genl_v2_ops[] = {
.cmd = TIPC_NL_NAME_TABLE_GET,
.dumpit = tipc_nl_name_table_dump,
.policy = tipc_nl_policy,
}
},
{
.cmd = TIPC_NL_MON_SET,
.doit = tipc_nl_node_set_monitor,
.policy = tipc_nl_policy,
},
};

int tipc_nlmsg_parse(const struct nlmsghdr *nlh, struct nlattr ***attr)
Expand Down
1 change: 1 addition & 0 deletions net/tipc/netlink.h
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ extern const struct nla_policy tipc_nl_prop_policy[];
extern const struct nla_policy tipc_nl_bearer_policy[];
extern const struct nla_policy tipc_nl_media_policy[];
extern const struct nla_policy tipc_nl_udp_policy[];
extern const struct nla_policy tipc_nl_monitor_policy[];

int tipc_netlink_start(void);
int tipc_netlink_compat_start(void);
Expand Down
27 changes: 27 additions & 0 deletions net/tipc/node.c
Original file line number Diff line number Diff line change
Expand Up @@ -1928,3 +1928,30 @@ int tipc_nl_node_dump_link(struct sk_buff *skb, struct netlink_callback *cb)

return skb->len;
}

int tipc_nl_node_set_monitor(struct sk_buff *skb, struct genl_info *info)
{
struct nlattr *attrs[TIPC_NLA_MON_MAX + 1];
struct net *net = sock_net(skb->sk);
int err;

if (!info->attrs[TIPC_NLA_MON])
return -EINVAL;

err = nla_parse_nested(attrs, TIPC_NLA_MON_MAX,
info->attrs[TIPC_NLA_MON],
tipc_nl_monitor_policy);
if (err)
return err;

if (attrs[TIPC_NLA_MON_ACTIVATION_THRESHOLD]) {
u32 val;

val = nla_get_u32(attrs[TIPC_NLA_MON_ACTIVATION_THRESHOLD]);
err = tipc_nl_monitor_set_threshold(net, val);
if (err)
return err;
}

return 0;
}
1 change: 1 addition & 0 deletions net/tipc/node.h
Original file line number Diff line number Diff line change
Expand Up @@ -78,4 +78,5 @@ int tipc_nl_node_reset_link_stats(struct sk_buff *skb, struct genl_info *info);
int tipc_nl_node_get_link(struct sk_buff *skb, struct genl_info *info);
int tipc_nl_node_set_link(struct sk_buff *skb, struct genl_info *info);

int tipc_nl_node_set_monitor(struct sk_buff *skb, struct genl_info *info);
#endif

0 comments on commit 7b3f522

Please sign in to comment.