Skip to content

Commit

Permalink
tipc: get monitor threshold for the cluster
Browse files Browse the repository at this point in the history
In this commit, we add support to fetch the configured
cluster monitoring threshold.

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 7b3f522 commit bf1035b
Show file tree
Hide file tree
Showing 6 changed files with 68 additions and 0 deletions.
1 change: 1 addition & 0 deletions include/uapi/linux/tipc_netlink.h
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ enum {
TIPC_NL_NET_SET,
TIPC_NL_NAME_TABLE_GET,
TIPC_NL_MON_SET,
TIPC_NL_MON_GET,

__TIPC_NL_CMD_MAX,
TIPC_NL_CMD_MAX = __TIPC_NL_CMD_MAX - 1
Expand Down
7 changes: 7 additions & 0 deletions net/tipc/monitor.c
Original file line number Diff line number Diff line change
Expand Up @@ -661,3 +661,10 @@ int tipc_nl_monitor_set_threshold(struct net *net, u32 cluster_size)

return 0;
}

int tipc_nl_monitor_get_threshold(struct net *net)
{
struct tipc_net *tn = tipc_net(net);

return tn->mon_threshold;
}
2 changes: 2 additions & 0 deletions net/tipc/monitor.h
Original file line number Diff line number Diff line change
Expand Up @@ -70,5 +70,7 @@ void tipc_mon_get_state(struct net *net, u32 addr,
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);
int tipc_nl_monitor_get_threshold(struct net *net);

extern const int tipc_max_domain_size;
#endif
5 changes: 5 additions & 0 deletions net/tipc/netlink.c
Original file line number Diff line number Diff line change
Expand Up @@ -226,6 +226,11 @@ static const struct genl_ops tipc_genl_v2_ops[] = {
.doit = tipc_nl_node_set_monitor,
.policy = tipc_nl_policy,
},
{
.cmd = TIPC_NL_MON_GET,
.doit = tipc_nl_node_get_monitor,
.policy = tipc_nl_policy,
},
};

int tipc_nlmsg_parse(const struct nlmsghdr *nlh, struct nlattr ***attr)
Expand Down
52 changes: 52 additions & 0 deletions net/tipc/node.c
Original file line number Diff line number Diff line change
Expand Up @@ -1955,3 +1955,55 @@ int tipc_nl_node_set_monitor(struct sk_buff *skb, struct genl_info *info)

return 0;
}

static int __tipc_nl_add_monitor_prop(struct net *net, struct tipc_nl_msg *msg)
{
struct nlattr *attrs;
void *hdr;
u32 val;

hdr = genlmsg_put(msg->skb, msg->portid, msg->seq, &tipc_genl_family,
0, TIPC_NL_MON_GET);
if (!hdr)
return -EMSGSIZE;

attrs = nla_nest_start(msg->skb, TIPC_NLA_MON);
if (!attrs)
goto msg_full;

val = tipc_nl_monitor_get_threshold(net);

if (nla_put_u32(msg->skb, TIPC_NLA_MON_ACTIVATION_THRESHOLD, val))
goto attr_msg_full;

nla_nest_end(msg->skb, attrs);
genlmsg_end(msg->skb, hdr);

return 0;

attr_msg_full:
nla_nest_cancel(msg->skb, attrs);
msg_full:
genlmsg_cancel(msg->skb, hdr);

return -EMSGSIZE;
}

int tipc_nl_node_get_monitor(struct sk_buff *skb, struct genl_info *info)
{
struct net *net = sock_net(skb->sk);
struct tipc_nl_msg msg;
int err;

msg.skb = nlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL);
msg.portid = info->snd_portid;
msg.seq = info->snd_seq;

err = __tipc_nl_add_monitor_prop(net, &msg);
if (err) {
nlmsg_free(msg.skb);
return err;
}

return genlmsg_reply(msg.skb, info);
}
1 change: 1 addition & 0 deletions net/tipc/node.h
Original file line number Diff line number Diff line change
Expand Up @@ -79,4 +79,5 @@ 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);
int tipc_nl_node_get_monitor(struct sk_buff *skb, struct genl_info *info);
#endif

0 comments on commit bf1035b

Please sign in to comment.