162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * nodemanager.h
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * Function prototypes
662306a36Sopenharmony_ci *
762306a36Sopenharmony_ci * Copyright (C) 2004 Oracle.  All rights reserved.
862306a36Sopenharmony_ci */
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ci#ifndef O2CLUSTER_NODEMANAGER_H
1162306a36Sopenharmony_ci#define O2CLUSTER_NODEMANAGER_H
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ci#include "ocfs2_nodemanager.h"
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ci/* This totally doesn't belong here. */
1662306a36Sopenharmony_ci#include <linux/configfs.h>
1762306a36Sopenharmony_ci#include <linux/rbtree.h>
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_cienum o2nm_fence_method {
2062306a36Sopenharmony_ci	O2NM_FENCE_RESET	= 0,
2162306a36Sopenharmony_ci	O2NM_FENCE_PANIC,
2262306a36Sopenharmony_ci	O2NM_FENCE_METHODS,	/* Number of fence methods */
2362306a36Sopenharmony_ci};
2462306a36Sopenharmony_ci
2562306a36Sopenharmony_cistruct o2nm_node {
2662306a36Sopenharmony_ci	spinlock_t		nd_lock;
2762306a36Sopenharmony_ci	struct config_item	nd_item;
2862306a36Sopenharmony_ci	char			nd_name[O2NM_MAX_NAME_LEN+1]; /* replace? */
2962306a36Sopenharmony_ci	__u8			nd_num;
3062306a36Sopenharmony_ci	/* only one address per node, as attributes, for now. */
3162306a36Sopenharmony_ci	__be32			nd_ipv4_address;
3262306a36Sopenharmony_ci	__be16			nd_ipv4_port;
3362306a36Sopenharmony_ci	struct rb_node		nd_ip_node;
3462306a36Sopenharmony_ci	/* there can be only one local node for now */
3562306a36Sopenharmony_ci	int			nd_local;
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_ci	unsigned long		nd_set_attributes;
3862306a36Sopenharmony_ci};
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_cistruct o2nm_cluster {
4162306a36Sopenharmony_ci	struct config_group	cl_group;
4262306a36Sopenharmony_ci	unsigned		cl_has_local:1;
4362306a36Sopenharmony_ci	u8			cl_local_node;
4462306a36Sopenharmony_ci	rwlock_t		cl_nodes_lock;
4562306a36Sopenharmony_ci	struct o2nm_node  	*cl_nodes[O2NM_MAX_NODES];
4662306a36Sopenharmony_ci	struct rb_root		cl_node_ip_tree;
4762306a36Sopenharmony_ci	unsigned int		cl_idle_timeout_ms;
4862306a36Sopenharmony_ci	unsigned int		cl_keepalive_delay_ms;
4962306a36Sopenharmony_ci	unsigned int		cl_reconnect_delay_ms;
5062306a36Sopenharmony_ci	enum o2nm_fence_method	cl_fence_method;
5162306a36Sopenharmony_ci
5262306a36Sopenharmony_ci	/* this bitmap is part of a hack for disk bitmap.. will go eventually. - zab */
5362306a36Sopenharmony_ci	unsigned long	cl_nodes_bitmap[BITS_TO_LONGS(O2NM_MAX_NODES)];
5462306a36Sopenharmony_ci};
5562306a36Sopenharmony_ci
5662306a36Sopenharmony_ciextern struct o2nm_cluster *o2nm_single_cluster;
5762306a36Sopenharmony_ci
5862306a36Sopenharmony_ciu8 o2nm_this_node(void);
5962306a36Sopenharmony_ci
6062306a36Sopenharmony_ciint o2nm_configured_node_map(unsigned long *map, unsigned bytes);
6162306a36Sopenharmony_cistruct o2nm_node *o2nm_get_node_by_num(u8 node_num);
6262306a36Sopenharmony_cistruct o2nm_node *o2nm_get_node_by_ip(__be32 addr);
6362306a36Sopenharmony_civoid o2nm_node_get(struct o2nm_node *node);
6462306a36Sopenharmony_civoid o2nm_node_put(struct o2nm_node *node);
6562306a36Sopenharmony_ci
6662306a36Sopenharmony_ciint o2nm_depend_item(struct config_item *item);
6762306a36Sopenharmony_civoid o2nm_undepend_item(struct config_item *item);
6862306a36Sopenharmony_ciint o2nm_depend_this_node(void);
6962306a36Sopenharmony_civoid o2nm_undepend_this_node(void);
7062306a36Sopenharmony_ci
7162306a36Sopenharmony_ci#endif /* O2CLUSTER_NODEMANAGER_H */
72