1132718Skan/* SPDX-License-Identifier: GPL-2.0-or-later */
2169689Skan/*
3169689Skan * nodemanager.h
418334Speter *
590075Sobrien * Function prototypes
618334Speter *
790075Sobrien * Copyright (C) 2004 Oracle.  All rights reserved.
890075Sobrien */
990075Sobrien
1090075Sobrien#ifndef O2CLUSTER_NODEMANAGER_H
1118334Speter#define O2CLUSTER_NODEMANAGER_H
1290075Sobrien
1390075Sobrien#include "ocfs2_nodemanager.h"
1490075Sobrien
1590075Sobrien/* This totally doesn't belong here. */
1618334Speter#include <linux/configfs.h>
1718334Speter#include <linux/rbtree.h>
1890075Sobrien
19169689Skanenum o2nm_fence_method {
20169689Skan	O2NM_FENCE_RESET	= 0,
2118334Speter	O2NM_FENCE_PANIC,
2290075Sobrien	O2NM_FENCE_METHODS,	/* Number of fence methods */
2390075Sobrien};
2418334Speter
25223262Sbenlstruct o2nm_node {
26223262Sbenl	spinlock_t		nd_lock;
27223262Sbenl	struct config_item	nd_item;
28223262Sbenl	char			nd_name[O2NM_MAX_NAME_LEN+1]; /* replace? */
29223262Sbenl	__u8			nd_num;
30169689Skan	/* only one address per node, as attributes, for now. */
3118334Speter	__be32			nd_ipv4_address;
32132718Skan	__be16			nd_ipv4_port;
33169689Skan	struct rb_node		nd_ip_node;
34169689Skan	/* there can be only one local node for now */
3518334Speter	int			nd_local;
3618334Speter
3718334Speter	unsigned long		nd_set_attributes;
3818334Speter};
3918334Speter
4018334Speterstruct o2nm_cluster {
4190075Sobrien	struct config_group	cl_group;
4290075Sobrien	unsigned		cl_has_local:1;
4390075Sobrien	u8			cl_local_node;
4418334Speter	rwlock_t		cl_nodes_lock;
4518334Speter	struct o2nm_node  	*cl_nodes[O2NM_MAX_NODES];
4618334Speter	struct rb_root		cl_node_ip_tree;
4718334Speter	unsigned int		cl_idle_timeout_ms;
4818334Speter	unsigned int		cl_keepalive_delay_ms;
4918334Speter	unsigned int		cl_reconnect_delay_ms;
5018334Speter	enum o2nm_fence_method	cl_fence_method;
5118334Speter
5218334Speter	/* this bitmap is part of a hack for disk bitmap.. will go eventually. - zab */
5318334Speter	unsigned long	cl_nodes_bitmap[BITS_TO_LONGS(O2NM_MAX_NODES)];
5418334Speter};
5518334Speter
5618334Speterextern struct o2nm_cluster *o2nm_single_cluster;
5718334Speter
5890075Sobrienu8 o2nm_this_node(void);
5918334Speter
6018334Speterint o2nm_configured_node_map(unsigned long *map, unsigned bytes);
61169689Skanstruct o2nm_node *o2nm_get_node_by_num(u8 node_num);
62169689Skanstruct o2nm_node *o2nm_get_node_by_ip(__be32 addr);
63169689Skanvoid o2nm_node_get(struct o2nm_node *node);
64169689Skanvoid o2nm_node_put(struct o2nm_node *node);
65169689Skan
66169689Skanint o2nm_depend_item(struct config_item *item);
67169689Skanvoid o2nm_undepend_item(struct config_item *item);
68169689Skanint o2nm_depend_this_node(void);
69169689Skanvoid o2nm_undepend_this_node(void);
70169689Skan
71169689Skan#endif /* O2CLUSTER_NODEMANAGER_H */
72169689Skan