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