cladm.h revision ba3594ba9b5dd4c846c472a8d657edcb7c8109ac
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (the "License"). You may not use this file except in compliance
* with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* or http://www.opensolaris.org/os/licensing.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright 2014 Garrett D'Amore <garrett@damore.org>
*
* Copyright 1998-2002 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#ifndef _SYS_CLADM_H
#define _SYS_CLADM_H
#ifdef __cplusplus
extern "C" {
#endif
#include <sys/types.h>
#include <sys/clconf.h>
#include <netinet/in.h>
/*
* This file defines interfaces which are private to Sun Clustering.
* Others should not depend on this in any way as it may change or be
* removed completely.
*/
/*
* cladm() facilities; see below for definitions pertinent to each of these
* facilities.
*/
#define CL_INITIALIZE 0 /* bootstrapping information */
#define CL_CONFIG 1 /* configuration information */
/*
* Command definitions for each of the facilities.
* The type of the data pointer and the direction of the data transfer
* is listed for each command.
*/
/*
* CL_INITIALIZE facility commands.
*/
#define CL_GET_BOOTFLAG 0 /* Return cluster config/boot status */
/*
* Definitions for the flag bits returned by CL_GET_BOOTFLAG.
*/
#define CLUSTER_CONFIGURED 0x0001 /* system is configured as a cluster */
#define CLUSTER_BOOTED 0x0002 /* system is booted as a cluster */
#ifdef _KERNEL
#define CLUSTER_INSTALLING 0x0004 /* cluster is being installed */
#define CLUSTER_DCS_ENABLED 0x0008 /* cluster device framework enabled */
#endif /* _KERNEL */
/*
* CL_CONFIG facility commands.
* The CL_GET_NETADDRS and CL_GET_NUM_NETADDRS are contract private interfaces
* per PSARC/2001/579-01.
*/
#define CL_NODEID 0 /* Return nodeid of this node. */
#define CL_HIGHEST_NODEID 1 /* Return highest configured nodeid. */
#define CL_GDEV_PREFIX 2 /* Return path to global namespace. */
#define CL_GET_NETADDRS 3 /* Get array of network addresses */
/* controlled by Sun Cluster. */
#define CL_GET_NUM_NETADDRS 4 /* Get the number of data structure */
/* entries in the array that will be */
/* returned using CL_GET_NETADDRS. */
/*
* The cladm system call can provide an array of cluster controlled
* network addresses and associated netmasks. The cladm arguments
* must be as follows: the argument fac is specified as CL_CONFIG,
* the argument cmd is specified as CL_GET_NETADDRS, and argument arg
* is the location of a structure of type cladm_netaddrs_t. The
* cladm_num_netaddrs is used as input for the requested number
* of array entries, and is used as ouput for the number of valid array
* entries available.
*
* The caller must allocate sufficient memory for the array of
* structures of type cladm_netaddr_entry_t and specify the starting
* location as cladm_netaddrs_array. The number of entries included
* in the array is determined using cladm with argument fac specified
* as CL_CONFIG, argument cmd specified as CL_GET_NUM_NETADDRS, and
* argument arg is the location of a structure of type cladm_netaddrs_t.
* The determined number of array entries is returned in
* cladm_num_netaddrs.
*
* These commands support the yielding of DR operation control (by the
* RCM Framework) to Sun Cluster for cluster controlled adapters.
*
* These data structures are contract private per PSARC/2001/579-01.
*/
typedef struct {
int32_t cl_ipversion; /* IPV4_VERSION or IPV6_VERSION */
union {
struct {
ipaddr_t ipv4_netaddr;
ipaddr_t ipv4_netmask;
} cl_ipv4;
struct {
uint32_t ipv6_netaddr[4];
uint32_t ipv6_netmask[4];
} cl_ipv6;
} cl_ipv_un;
} cladm_netaddr_entry_t;
typedef struct {
uint32_t cladm_num_netaddrs;
cladm_netaddr_entry_t *cladm_netaddrs_array;
} cladm_netaddrs_t;
#if defined(_SYSCALL32)
typedef struct {
uint32_t cladm_num_netaddrs;
caddr32_t cladm_netaddrs_array;
} cladm_netaddrs32_t;
#endif /* defined(_SYSCALL32) */
#ifdef _KERNEL
extern int cladmin(int fac, int cmd, void *data);
extern int cluster_bootflags;
#else
extern int _cladm(int fac, int cmd, void *data);
#endif /* _KERNEL */
#ifdef __cplusplus
}
#endif
#endif /* _SYS_CLADM_H */