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 * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
23 * Use is subject to license terms.
24 */
25
26#ifndef _SYS_SYSEVENT_IPMP_H
27#define	_SYS_SYSEVENT_IPMP_H
28
29/*
30 * IPMP sysevent definitions.  Note that all of these definitions are
31 * Sun-private and are subject to change at any time.
32 */
33
34#ifdef __cplusplus
35extern "C" {
36#endif
37
38/*
39 * Event channel associated with these events
40 */
41#define	IPMP_EVENT_CHAN "com.sun:ipmp:events"
42
43/*
44 * Event type EC_IPMP/ESC_IPMP_GROUP_STATE event schema
45 *
46 *	Event Class     - EC_IPMP
47 *	Event Sub-Class - ESC_IPMP_GROUP_STATE
48 *	Event Vendor	- com.sun
49 *	Event Publisher - in.mpathd
50 *
51 * 	Attribute Name  - IPMP_EVENT_VERSION
52 *	Attribute Type  - SE_DATA_TYPE_UINT32
53 *	Attribute Value - <version>
54 *
55 *	Attribute Name  - IPMP_GROUP_NAME
56 *	Attribute Type  - SE_DATA_TYPE_STRING
57 *	Attribute Value - <group-name>
58 *
59 *	Attribute Name  - IPMP_GROUP_SIGNATURE
60 *	Attribute Type  - SE_DATA_TYPE_UINT64
61 * 	Attribute Value - <group-signature>
62 *
63 *	Attribute Name  - IPMP_GROUP_STATE
64 *	Attribute Type  - SE_DATA_TYPE_UINT32
65 *	Attribute Value - <group-state>
66 */
67
68#define	IPMP_EVENT_VERSION	"ipmp_event_version"
69#define	IPMP_GROUP_NAME		"ipmp_group_name"
70#define	IPMP_GROUP_SIGNATURE	"ipmp_group_signature"
71#define	IPMP_GROUP_STATE	"ipmp_group_state"
72
73typedef enum {
74	IPMP_GROUP_OK,		/* all interfaces in the group are ok */
75	IPMP_GROUP_FAILED,	/* all interfaces in the group are unusable */
76	IPMP_GROUP_DEGRADED	/* some interfaces in the group are unusable */
77} ipmp_group_state_t;
78
79#define	IPMP_EVENT_CUR_VERSION	2
80
81/*
82 * Event type EC_IPMP/ESC_IPMP_GROUP_CHANGE event schema
83 *
84 *	Event Class     - EC_IPMP
85 *	Event Sub-Class - ESC_IPMP_GROUP_CHANGE
86 *	Event Vendor	- com.sun
87 *	Event Publisher - in.mpathd
88 *
89 *	Attribute Name  - IPMP_GROUP_NAME
90 *	Attribute Type  - SE_DATA_TYPE_STRING
91 *	Attribute Value - <group-name>
92 *
93 *	Attribute Name  - IPMP_EVENT_VERSION
94 *	Attribute Type  - SE_DATA_TYPE_UINT32
95 *	Attribute Value - <version>
96 *
97 *	Attribute Name  - IPMP_GROUPLIST_SIGNATURE
98 *	Attribute Type  - SE_DATA_TYPE_UINT64
99 *	Attribute Value - <grouplist-signature>
100 *
101 *	Attribute Name  - IPMP_GROUP_OPERATION
102 *	Attribute Type  - SE_DATA_TYPE_UINT32
103 *	Attribute Value - <group-change-op>
104 */
105
106#define	IPMP_GROUPLIST_SIGNATURE	"ipmp_grouplist_signature"
107#define	IPMP_GROUP_OPERATION		"ipmp_group_operation"
108
109typedef enum {
110	IPMP_GROUP_ADD,		/* a new IPMP group has been created */
111	IPMP_GROUP_REMOVE	/* an existing IPMP group has been removed */
112} ipmp_group_op_t;
113
114/*
115 * Event type EC_IPMP/ESC_IPMP_GROUP_MEMBER event schema
116 *
117 *	Event Class     - EC_IPMP
118 *	Event Sub-Class - ESC_IPMP_GROUP_MEMBER_CHANGE
119 *	Event Vendor	- com.sun
120 *	Event Publisher - in.mpathd
121 *
122 *	Attribute Name  - IPMP_GROUP_NAME
123 *	Attribute Type  - SE_DATA_TYPE_STRING
124 *	Attribute Value - <group-name>
125 *
126 *	Attribute Name  - IPMP_EVENT_VERSION
127 *	Attribute Type  - SE_DATA_TYPE_UINT32
128 *	Attribute Value - <version>
129 *
130 *	Attribute Name  - IPMP_GROUP_SIGNATURE
131 *	Attribute Type  - SE_DATA_TYPE_UINT64
132 *	Attribute Value - <group-signature>
133 *
134 *	Attribute Name  - IPMP_IF_OPERATION
135 *	Attribute Type  - SE_DATA_TYPE_UINT32
136 *	Attribute Value - <interface-op>
137 *
138 *	Attribute Name  - IPMP_IF_NAME
139 *	Attribute Type  - SE_DATA_TYPE_STRING
140 *	Attribute Value - <if-name>
141 *
142 *	Attribute Name  - IPMP_IF_TYPE
143 *	Attribute Type  - SE_DATA_TYPE_UINT32
144 *	Attribute Value - <if-type>
145 *
146 *	Attribute Name  - IPMP_IF_STATE
147 *	Attribute Type  - SE_DATA_TYPE_UINT32
148 *	Attribute Value - <if-state>
149 */
150
151#define	IPMP_IF_OPERATION	"ipmp_if_operation"
152#define	IPMP_IF_NAME		"ipmp_if_name"
153#define	IPMP_IF_TYPE		"ipmp_if_type"
154#define	IPMP_IF_STATE		"ipmp_if_state"
155
156typedef enum {
157	IPMP_IF_ADD,		/* a new interface has joined the group */
158	IPMP_IF_REMOVE 		/* an existing interface has left the group */
159} ipmp_if_op_t;
160
161typedef enum {
162	IPMP_IF_STANDBY,	/* the interface is a standby */
163	IPMP_IF_NORMAL 		/* the interface is not a standby */
164} ipmp_if_type_t;
165
166typedef enum {
167	IPMP_IF_OK,		/* the interface is functional */
168	IPMP_IF_FAILED,		/* the interface is in a failed state */
169	IPMP_IF_OFFLINE,	/* the interface is offline */
170	IPMP_IF_UNKNOWN		/* the interface may or may not be ok */
171} ipmp_if_state_t;		/* (not enough probes have been sent) */
172
173/*
174 * Event type EC_IPMP/ESC_IPMP_IF_CHANGE event schema
175 *
176 *	Event Class     - EC_IPMP
177 *	Event Sub-Class - ESC_IPMP_IF_CHANGE
178 *	Event Vendor	- com.sun
179 *	Event Publisher - in.mpathd
180 *
181 *	Attribute Name  - IPMP_GROUP_NAME
182 *	Attribute Type  - SE_DATA_TYPE_STRING
183 *	Attribute Value - <group-name>
184 *
185 *	Attribute Name  - IPMP_EVENT_VERSION
186 *	Attribute Type  - SE_DATA_TYPE_UINT32
187 *	Attribute Value - <version>
188 *
189 *	Attribute Name  - IPMP_GROUP_SIGNATURE
190 *	Attribute Type  - SE_DATA_TYPE_UINT64
191 *	Attribute Value - <group-signature>
192 *
193 *	Attribute Name  - IPMP_IF_NAME
194 *	Attribute Type  - SE_DATA_TYPE_STRING
195 *	Attribute Value - <if-name>
196 *
197 *	Attribute Name  - IPMP_IF_STATE
198 *	Attribute Type  - SE_DATA_TYPE_UINT32
199 *	Attribute Value - <if-state>
200 *
201 *	Attribute Name  - IPMP_IF_TYPE
202 *	Attribute Type  - SE_DATA_TYPE_UINT32
203 *	Attribute Value - <if-type>
204 */
205
206#define	IPMP_PROBE_ID			"ipmp_probe_id"
207#define	IPMP_PROBE_STATE		"ipmp_probe_state"
208#define	IPMP_PROBE_START_TIME		"ipmp_probe_start_time"
209#define	IPMP_PROBE_SENT_TIME		"ipmp_probe_sent_time"
210#define	IPMP_PROBE_ACKRECV_TIME		"ipmp_probe_ackrecv_time"
211#define	IPMP_PROBE_ACKPROC_TIME		"ipmp_probe_ackproc_time"
212#define	IPMP_PROBE_TARGET		"ipmp_probe_target"
213#define	IPMP_PROBE_TARGET_RTTAVG	"ipmp_probe_target_rttavg"
214#define	IPMP_PROBE_TARGET_RTTDEV	"ipmp_probe_target_rttdev"
215
216typedef enum {
217	IPMP_PROBE_SENT,	/* the probe has been sent */
218	IPMP_PROBE_ACKED,	/* the probe has been acked */
219	IPMP_PROBE_LOST		/* the probe has been lost */
220} ipmp_probe_state_t;
221
222/*
223 * Event type EC_IPMP/ESC_IPMP_PROBE_STATE event schema
224 *
225 *	Event Class     - EC_IPMP
226 *	Event Sub-Class - ESC_IPMP_PROBE_STATE
227 *	Event Vendor	- com.sun
228 *	Event Publisher - in.mpathd
229 *
230 *	Attribute Name  - IPMP_PROBE_ID
231 *	Attribute Type  - SE_DATA_TYPE_UINT32
232 *	Attribute Value - <probe-id>
233 *
234 *	Attribute Name  - IPMP_EVENT_VERSION
235 *	Attribute Type  - SE_DATA_TYPE_UINT32
236 *	Attribute Value - <version>
237 *
238 *	Attribute Name  - IPMP_IF_NAME
239 *	Attribute Type  - SE_DATA_TYPE_STRING
240 *	Attribute Value - <if-name>
241 *
242 *	Attribute Name  - IPMP_PROBE_STATE
243 *	Attribute Type  - SE_DATA_TYPE_UINT32
244 *	Attribute Value - <probe-state>
245 *
246 *	Attribute Name  - IPMP_PROBE_START_TIME
247 *	Attribute Type  - SE_DATA_TYPE_TIME
248 *	Attribute Value - <probe-start-time>
249 *
250 *	Attribute Name  - IPMP_PROBE_SENT_TIME
251 *	Attribute Type  - SE_DATA_TYPE_TIME
252 *	Attribute Value - <probe-sent-time>
253 *
254 *	Attribute Name  - IPMP_PROBE_ACKRECV_TIME
255 *	Attribute Type  - SE_DATA_TYPE_TIME
256 *	Attribute Value - <probe-ackrecv-time>
257 *
258 *	Attribute Name  - IPMP_PROBE_ACKPROC_TIME
259 *	Attribute Type  - SE_DATA_TYPE_TIME
260 *	Attribute Value - <probe-ackproc-time>
261 *
262 *	Attribute Name  - IPMP_PROBE_TARGET
263 *	Attribute Type  - SE_DATA_TYPE_BYTES
264 *	Attribute Value - <probe-target-ip>
265 *
266 *	Attribute Name  - IPMP_PROBE_TARGET_RTTAVG
267 *	Attribute Type  - SE_DATA_TYPE_UINT32
268 *	Attribute Value - <probe-target-rttavg>
269 *
270 *	Attribute Name  - IPMP_PROBE_TARGET_RTTDEV
271 *	Attribute Type  - SE_DATA_TYPE_UINT32
272 *	Attribute Value - <probe-target-rttdev>
273 */
274
275#ifdef __cplusplus
276}
277#endif
278
279#endif /* _SYS_SYSEVENT_IPMP_H */
280