1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-or-later */ 2*4882a593Smuzhiyun /* -*- mode: c; c-basic-offset: 8; -*- 3*4882a593Smuzhiyun * vim: noexpandtab sw=8 ts=8 sts=0: 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * nodemanager.h 6*4882a593Smuzhiyun * 7*4882a593Smuzhiyun * Function prototypes 8*4882a593Smuzhiyun * 9*4882a593Smuzhiyun * Copyright (C) 2004 Oracle. All rights reserved. 10*4882a593Smuzhiyun */ 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun #ifndef O2CLUSTER_NODEMANAGER_H 13*4882a593Smuzhiyun #define O2CLUSTER_NODEMANAGER_H 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun #include "ocfs2_nodemanager.h" 16*4882a593Smuzhiyun 17*4882a593Smuzhiyun /* This totally doesn't belong here. */ 18*4882a593Smuzhiyun #include <linux/configfs.h> 19*4882a593Smuzhiyun #include <linux/rbtree.h> 20*4882a593Smuzhiyun 21*4882a593Smuzhiyun enum o2nm_fence_method { 22*4882a593Smuzhiyun O2NM_FENCE_RESET = 0, 23*4882a593Smuzhiyun O2NM_FENCE_PANIC, 24*4882a593Smuzhiyun O2NM_FENCE_METHODS, /* Number of fence methods */ 25*4882a593Smuzhiyun }; 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun struct o2nm_node { 28*4882a593Smuzhiyun spinlock_t nd_lock; 29*4882a593Smuzhiyun struct config_item nd_item; 30*4882a593Smuzhiyun char nd_name[O2NM_MAX_NAME_LEN+1]; /* replace? */ 31*4882a593Smuzhiyun __u8 nd_num; 32*4882a593Smuzhiyun /* only one address per node, as attributes, for now. */ 33*4882a593Smuzhiyun __be32 nd_ipv4_address; 34*4882a593Smuzhiyun __be16 nd_ipv4_port; 35*4882a593Smuzhiyun struct rb_node nd_ip_node; 36*4882a593Smuzhiyun /* there can be only one local node for now */ 37*4882a593Smuzhiyun int nd_local; 38*4882a593Smuzhiyun 39*4882a593Smuzhiyun unsigned long nd_set_attributes; 40*4882a593Smuzhiyun }; 41*4882a593Smuzhiyun 42*4882a593Smuzhiyun struct o2nm_cluster { 43*4882a593Smuzhiyun struct config_group cl_group; 44*4882a593Smuzhiyun unsigned cl_has_local:1; 45*4882a593Smuzhiyun u8 cl_local_node; 46*4882a593Smuzhiyun rwlock_t cl_nodes_lock; 47*4882a593Smuzhiyun struct o2nm_node *cl_nodes[O2NM_MAX_NODES]; 48*4882a593Smuzhiyun struct rb_root cl_node_ip_tree; 49*4882a593Smuzhiyun unsigned int cl_idle_timeout_ms; 50*4882a593Smuzhiyun unsigned int cl_keepalive_delay_ms; 51*4882a593Smuzhiyun unsigned int cl_reconnect_delay_ms; 52*4882a593Smuzhiyun enum o2nm_fence_method cl_fence_method; 53*4882a593Smuzhiyun 54*4882a593Smuzhiyun /* this bitmap is part of a hack for disk bitmap.. will go eventually. - zab */ 55*4882a593Smuzhiyun unsigned long cl_nodes_bitmap[BITS_TO_LONGS(O2NM_MAX_NODES)]; 56*4882a593Smuzhiyun }; 57*4882a593Smuzhiyun 58*4882a593Smuzhiyun extern struct o2nm_cluster *o2nm_single_cluster; 59*4882a593Smuzhiyun 60*4882a593Smuzhiyun u8 o2nm_this_node(void); 61*4882a593Smuzhiyun 62*4882a593Smuzhiyun int o2nm_configured_node_map(unsigned long *map, unsigned bytes); 63*4882a593Smuzhiyun struct o2nm_node *o2nm_get_node_by_num(u8 node_num); 64*4882a593Smuzhiyun struct o2nm_node *o2nm_get_node_by_ip(__be32 addr); 65*4882a593Smuzhiyun void o2nm_node_get(struct o2nm_node *node); 66*4882a593Smuzhiyun void o2nm_node_put(struct o2nm_node *node); 67*4882a593Smuzhiyun 68*4882a593Smuzhiyun int o2nm_depend_item(struct config_item *item); 69*4882a593Smuzhiyun void o2nm_undepend_item(struct config_item *item); 70*4882a593Smuzhiyun int o2nm_depend_this_node(void); 71*4882a593Smuzhiyun void o2nm_undepend_this_node(void); 72*4882a593Smuzhiyun 73*4882a593Smuzhiyun #endif /* O2CLUSTER_NODEMANAGER_H */ 74