1 /*
   2  * CDDL HEADER START
   3  *
   4  * The contents of this file are subject to the terms of the
   5  * Common Development and Distribution License, Version 1.0 only
   6  * (the "License").  You may not use this file except in compliance
   7  * with the License.
   8  *
   9  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
  10  * or http://www.opensolaris.org/os/licensing.
  11  * See the License for the specific language governing permissions
  12  * and limitations under the License.
  13  *
  14  * When distributing Covered Code, include this CDDL HEADER in each
  15  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  16  * If applicable, add the following below this CDDL HEADER, with the
  17  * fields enclosed by brackets "[]" replaced with your own identifying
  18  * information: Portions Copyright [yyyy] [name of copyright owner]
  19  *
  20  * CDDL HEADER END
  21  */
  22 /*
  23  * Copyright 2014 Garrett D'Amore <garrett@damore.org>
  24  *
  25  * Copyright 1998-2002 Sun Microsystems, Inc.  All rights reserved.
  26  * Use is subject to license terms.
  27  */
  28 
  29 #ifndef _SYS_CLADM_H
  30 #define _SYS_CLADM_H
  31 
  32 #ifdef  __cplusplus
  33 extern "C" {
  34 #endif
  35 
  36 #include <sys/types.h>
  37 #include <sys/clconf.h>
  38 #include <netinet/in.h>
  39 
  40 
  41 /*
  42  * This file defines interfaces which are private to Sun Clustering.
  43  * Others should not depend on this in any way as it may change or be
  44  * removed completely.
  45  */
  46 
  47 /*
  48  * cladm() facilities; see below for definitions pertinent to each of these
  49  * facilities.
  50  */
  51 #define CL_INITIALIZE           0       /* bootstrapping information */
  52 #define CL_CONFIG               1       /* configuration information */
  53 
  54 
  55 /*
  56  * Command definitions for each of the facilities.
  57  * The type of the data pointer and the direction of the data transfer
  58  * is listed for each command.
  59  */
  60 
  61 /*
  62  * CL_INITIALIZE facility commands.
  63  */
  64 #define CL_GET_BOOTFLAG         0       /* Return cluster config/boot status */
  65 
  66 /*
  67  * Definitions for the flag bits returned by CL_GET_BOOTFLAG.
  68  */
  69 #define CLUSTER_CONFIGURED      0x0001  /* system is configured as a cluster */
  70 #define CLUSTER_BOOTED          0x0002  /* system is booted as a cluster */
  71 
  72 #ifdef _KERNEL
  73 #define CLUSTER_INSTALLING      0x0004  /* cluster is being installed */
  74 #define CLUSTER_DCS_ENABLED     0x0008  /* cluster device framework enabled */
  75 #endif  /* _KERNEL */
  76 
  77 /*
  78  * CL_CONFIG facility commands.
  79  * The CL_GET_NETADDRS and CL_GET_NUM_NETADDRS are contract private interfaces
  80  * per PSARC/2001/579-01.
  81  */
  82 #define CL_NODEID               0       /* Return nodeid of this node. */
  83 #define CL_HIGHEST_NODEID       1       /* Return highest configured nodeid. */
  84 #define CL_GDEV_PREFIX          2       /* Return path to global namespace.  */
  85 #define CL_GET_NETADDRS         3       /* Get array of network addresses    */
  86                                         /* controlled by Sun Cluster. */
  87 #define CL_GET_NUM_NETADDRS     4       /* Get the number of data structure  */
  88                                         /* entries in the array that will be */
  89                                         /* returned  using CL_GET_NETADDRS.  */
  90 
  91 /*
  92  * The cladm system call can provide an array of cluster controlled
  93  * network addresses and associated netmasks.  The cladm arguments
  94  * must be as follows:  the argument fac is specified as CL_CONFIG,
  95  * the argument cmd is specified as CL_GET_NETADDRS, and argument arg
  96  * is the location of a structure of type cladm_netaddrs_t. The
  97  * cladm_num_netaddrs is used as input for the requested number
  98  * of array entries, and is used as ouput for the number of valid array
  99  * entries available.
 100  *
 101  * The caller must allocate sufficient memory for the array of
 102  * structures of type cladm_netaddr_entry_t and specify the starting
 103  * location as cladm_netaddrs_array.  The number of entries included
 104  * in the array is determined using cladm with argument fac specified
 105  * as CL_CONFIG, argument cmd specified as CL_GET_NUM_NETADDRS, and
 106  * argument arg is the location of a structure of type cladm_netaddrs_t.
 107  * The determined number of array entries is returned in
 108  * cladm_num_netaddrs.
 109  *
 110  * These commands support the yielding of DR operation control (by the
 111  * RCM Framework) to Sun Cluster for cluster controlled adapters.
 112  *
 113  * These data structures are contract private per PSARC/2001/579-01.
 114  */
 115 typedef struct {
 116         int32_t         cl_ipversion;   /* IPV4_VERSION or IPV6_VERSION */
 117         union {
 118                 struct {
 119                         ipaddr_t        ipv4_netaddr;
 120                         ipaddr_t        ipv4_netmask;
 121                         } cl_ipv4;
 122                 struct {
 123                         uint32_t        ipv6_netaddr[4];
 124                         uint32_t        ipv6_netmask[4];
 125                         } cl_ipv6;
 126         } cl_ipv_un;
 127 } cladm_netaddr_entry_t;
 128 
 129 typedef struct {
 130         uint32_t                cladm_num_netaddrs;
 131         cladm_netaddr_entry_t   *cladm_netaddrs_array;
 132 } cladm_netaddrs_t;
 133 
 134 #if defined(_SYSCALL32)
 135 typedef struct {
 136         uint32_t        cladm_num_netaddrs;
 137         caddr32_t       cladm_netaddrs_array;
 138 } cladm_netaddrs32_t;
 139 #endif /* defined(_SYSCALL32) */
 140 
 141 
 142 #ifdef _KERNEL
 143 extern int cladmin(int fac, int cmd, void *data);
 144 extern int cluster_bootflags;
 145 #else
 146 extern int _cladm(int fac, int cmd, void *data);
 147 #endif  /* _KERNEL */
 148 
 149 #ifdef  __cplusplus
 150 }
 151 #endif
 152 
 153 
 154 #endif  /* _SYS_CLADM_H */