/* cn_proc_mcast_ctl @data: message sent from userspace via the connector  */
static void cn_proc_mcast_ctl(struct cn_msg *msg, struct netlink_skb_parms *nsp)
/* cn_proc_mcast_ctl @data: message sent from userspace via the connector  */
static void cn_proc_mcast_ctl(struct cn_msg *msg, struct netlink_skb_parms *nsp)
{
	enum proc_cn_mcast_op *mc_op = NULL;
	int err = 0;
	if (msg->len != sizeof(*mc_op))
		return;
	mc_op = (enum proc_cn_mcast_op*)msg->data;
	switch (*mc_op) {
	case PROC_CN_MCAST_LISTEN:
		atomic_inc(&proc_event_num_listeners);
		break;
	case PROC_CN_MCAST_IGNORE:
		atomic_dec(&proc_event_num_listeners);
		break;
	default:
		err = EINVAL;
		break;
	}
	cn_proc_ack(err, msg->seq, msg->ack);
}