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 (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21
22/*
23 * Copyright 2010 Sun Microsystems, Inc.  All rights reserved.
24 * Use is subject to license terms.
25 */
26
27#ifndef	_SNMPPLUGIN_H
28#define	_SNMPPLUGIN_H
29
30#ifdef	__cplusplus
31extern "C" {
32#endif
33
34/*
35 * The /physical-platform node
36 */
37#define	PICL_NODE_PHYSPLAT		"physical-platform"
38
39/*
40 * List of volatile property OIDs to lookup and update when needed
41 */
42typedef struct {
43	picl_prophdl_t  prop;
44	char		*oidstr;
45	int		row;
46	int		proptype;
47} vol_prophdl_t;
48
49/*
50 * Types of volatile properties (proptype values)
51 */
52#define	VPT_PLATOPSTATE		1
53#define	VPT_NUMSENSOR		2
54#define	VPT_BINSENSOR		3
55#define	VPT_ALARMSTATE		4
56#define	VPT_BATTERYSTATUS	5
57
58/*
59 * Storage related and miscellaneous definitions
60 */
61#define	N_ELEMS_IN_VOLPROP_BLOCK	512
62#define	N_ELEMS_IN_NODE_BLOCK		256
63#define	NODE_BLOCK_SHIFT		8
64#define	DEFAULT_SLOT_TYPE		"slot"
65
66/*
67 * Local macros and property ids
68 */
69#define	ADD_NODE(cl)							\
70{									\
71	if (ptree_create_and_add_node(parenth, node_name, cl,		\
72	    &nodeh) != PICL_SUCCESS) {					\
73		log_msg(LOG_ERR, SNMPP_ADD_NODE_FAIL, node_name, cl);	\
74		return (NULL);						\
75	}								\
76}
77
78#define	CHECK_LINKRESET(errp, retval)		\
79	if ((errp) && (*errp == ECANCELED)) {	\
80		return (retval);		\
81	}
82
83#define	CHECK_LINKRESET_VOID(errp)		\
84	if ((errp) && (*errp == ECANCELED)) {	\
85		return;				\
86	}
87
88#define	min(x, y)	((x) < (y) ? (x) : (y))
89
90typedef enum {
91	PP_SERIAL_NUM = 1,
92	PP_SLOT_TYPE,
93	PP_STATE,
94	PP_OPSTATUS,
95	PP_BATT_STATUS,
96	PP_TEMPERATURE,
97	PP_VOLTAGE,
98	PP_CURRENT,
99	PP_SPEED,
100	PP_SENSOR_VALUE,
101	PP_BASE_UNITS,
102	PP_EXPONENT,
103	PP_RATE_UNITS,
104	PP_CONDITION,
105	PP_EXPECTED,
106	PP_REPLACEABLE,
107	PP_HOTSWAPPABLE,
108	PP_IS_FRU,
109	PP_HW_REVISION,
110	PP_FW_REVISION,
111	PP_MFG_NAME,
112	PP_MODEL_NAME,
113	PP_DESCRIPTION,
114	PP_LABEL
115} sp_propid_t;
116
117/*
118 * Plugin global routines
119 */
120void snmpplugin_init(void);
121void snmpplugin_fini(void);
122
123/*
124 * Plugin messages
125 */
126#define	SNMPP_NO_ROOT			\
127    gettext("PICL snmpplugin: cannot get picl tree root (ret=%d)\n")
128
129#define	SNMPP_CANT_INIT			\
130    gettext("PICL snmpplugin: cannot initialize snmp service\n")
131
132#define	SNMPP_CANT_CREATE_PHYSPLAT	\
133    gettext("PICL snmpplugin: cannot create physical-platform root (ret=%d)\n")
134
135#define	SNMPP_CANT_CREATE_TREE_BUILDER	\
136    gettext("PICL snmpplugin: cannot create thr to handle hotplugs (ret=%d)\n")
137
138#define	SNMPP_NO_ENTPHYSNAME		\
139    gettext("PICL snmpplugin: cannot get entPhysicalName (row=%d)\n")
140
141#define	SNMPP_ADD_NODE_FAIL		\
142    gettext("PICL snmpplugin: couldn't add node %s (class=%d)\n")
143
144#define	SNMPP_UNSUPP_SENSOR_CLASS	\
145    gettext("PICL snmpplugin: sunPlatSensorClass %d unsupported (row=%d)\n")
146
147#define	SNMPP_UNKNOWN_ENTPHYSCLASS	\
148    gettext("PICL snmpplugin: entPhysicalClass %d unknown (row=%d)\n")
149
150#define	SNMPP_NO_MEM			\
151    gettext("PICL snmpplugin: failed to allocate %d bytes\n")
152
153#define	SNMPP_CANT_FIND_VOLPROP		\
154    gettext("PICL snmpplugin: cannot find volatile property (proph=%lx)\n")
155
156#define	SNMPP_INV_PLAT_EQUIP_OPSTATE	\
157    gettext("PICL snmpplugin: invalid sunPlatEquipmentOpState %d (row=%d)\n")
158
159#define	SNMPP_INV_PLAT_BINSNSR_CURRENT	\
160    gettext("PICL snmpplugin: invalid sunPlatBinarySensorCurrent %d (row=%d)\n")
161
162#define	SNMPP_NO_SLOT_TYPE		\
163    gettext("PICL snmpplugin: no acceptable slot types (row=%d)\n")
164
165#define	SNMPP_CANT_INIT_PROPINFO	\
166    gettext("PICL snmpplugin: cannot init picl propinfo (err=%d)\n")
167
168#define	SNMPP_CANT_ADD_PROP		\
169    gettext("PICL snmpplugin: cannot add property, err=%d (node=%lx)\n")
170
171#define	SNMPP_CANT_INIT_STR_PROPINFO	\
172    gettext("PICL snmpplugin: cannot init picl str propinfo (err=%d)\n")
173
174#define	SNMPP_CANT_ADD_STR_PROP		\
175    gettext("PICL snmpplugin: cannot add string property (err=%d, node=%lx)\n")
176
177#define	SNMPP_CANT_INIT_VOID_PROPINFO	\
178    gettext("PICL snmpplugin: cannot init picl void propinfo (err=%d)\n")
179
180#define	SNMPP_CANT_ADD_VOID_PROP	\
181    gettext("PICL snmpplugin: cannot add void property (err=%d, node=%lx)\n")
182
183#define	SNMPP_CANT_INIT_INT_PROPINFO	\
184    gettext("PICL snmpplugin: cannot init picl int propinfo (err=%d)\n")
185
186#define	SNMPP_CANT_ADD_INT_PROP	\
187    gettext("PICL snmpplugin: cannot add int property (err=%d, node=%lx)\n")
188
189#define	SNMPP_CANT_FETCH_OBJECT_VAL	\
190    gettext("PICL snmpplugin: cannot fetch object value " \
191	"(err=%d, OID=<%s>, row=%d)\n")
192
193#define	SNMPP_LINK_RESET	\
194    gettext("PICL snmpplugin: snmp ds reset happened, rebuilding tree\n")
195
196#define	SIGACT_FAILED	\
197    gettext("PICL snmpplugin: Failed to install signal handler for %s: %s\n")
198
199#ifdef SNMPPLUGIN_DEBUG
200#define	SNMPPLUGIN_DBLOCK_SZ		4096
201#define	SNMPPLUGIN_DMAX_LINE		80
202#define	LOGINIT()			snmpplugin_log_init()
203#define	LOGPRINTF(s)			snmpplugin_log(s)
204#define	LOGPRINTF1(s, a1)		snmpplugin_log(s, a1)
205#define	LOGPRINTF2(s, a1, a2)		snmpplugin_log(s, a1, a2)
206#else
207#define	LOGINIT()
208#define	LOGPRINTF(s)
209#define	LOGPRINTF1(s, a1)
210#define	LOGPRINTF2(s, a1, a2)
211#endif
212
213#ifdef	__cplusplus
214}
215#endif
216
217#endif	/* _SNMPPLUGIN_H */
218