xref: /onnv-gate/usr/src/uts/common/sys/idm/idm_conn_sm.h (revision 11552:0f2c9eecfc60)
17978SPeter.Dunlap@Sun.COM /*
27978SPeter.Dunlap@Sun.COM  * CDDL HEADER START
37978SPeter.Dunlap@Sun.COM  *
47978SPeter.Dunlap@Sun.COM  * The contents of this file are subject to the terms of the
57978SPeter.Dunlap@Sun.COM  * Common Development and Distribution License (the "License").
67978SPeter.Dunlap@Sun.COM  * You may not use this file except in compliance with the License.
77978SPeter.Dunlap@Sun.COM  *
87978SPeter.Dunlap@Sun.COM  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
97978SPeter.Dunlap@Sun.COM  * or http://www.opensolaris.org/os/licensing.
107978SPeter.Dunlap@Sun.COM  * See the License for the specific language governing permissions
117978SPeter.Dunlap@Sun.COM  * and limitations under the License.
127978SPeter.Dunlap@Sun.COM  *
137978SPeter.Dunlap@Sun.COM  * When distributing Covered Code, include this CDDL HEADER in each
147978SPeter.Dunlap@Sun.COM  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
157978SPeter.Dunlap@Sun.COM  * If applicable, add the following below this CDDL HEADER, with the
167978SPeter.Dunlap@Sun.COM  * fields enclosed by brackets "[]" replaced with your own identifying
177978SPeter.Dunlap@Sun.COM  * information: Portions Copyright [yyyy] [name of copyright owner]
187978SPeter.Dunlap@Sun.COM  *
197978SPeter.Dunlap@Sun.COM  * CDDL HEADER END
207978SPeter.Dunlap@Sun.COM  */
217978SPeter.Dunlap@Sun.COM 
227978SPeter.Dunlap@Sun.COM /*
23*11552SPeter.Cudhea@Sun.COM  * Copyright 2010 Sun Microsystems, Inc.  All rights reserved.
247978SPeter.Dunlap@Sun.COM  * Use is subject to license terms.
257978SPeter.Dunlap@Sun.COM  */
267978SPeter.Dunlap@Sun.COM #ifndef	_IDM_CONN_SM_H_
277978SPeter.Dunlap@Sun.COM #define	_IDM_CONN_SM_H_
287978SPeter.Dunlap@Sun.COM 
297978SPeter.Dunlap@Sun.COM #ifdef	__cplusplus
307978SPeter.Dunlap@Sun.COM extern "C" {
317978SPeter.Dunlap@Sun.COM #endif
327978SPeter.Dunlap@Sun.COM 
337978SPeter.Dunlap@Sun.COM 
347978SPeter.Dunlap@Sun.COM /*
357978SPeter.Dunlap@Sun.COM  * IDM connection state machine events.  Most events get generated internally
367978SPeter.Dunlap@Sun.COM  * either by the state machine or by the IDM TX/RX code.  For example when IDM
377978SPeter.Dunlap@Sun.COM  * receives a login request for a target connectionit will generate a
387978SPeter.Dunlap@Sun.COM  * CE_LOGIN_RCV event.  Similarly when the target sends a successful login
397978SPeter.Dunlap@Sun.COM  * response IDM generate a "CE_LOGIN_SUCCESS_SND" event.  The following
407978SPeter.Dunlap@Sun.COM  * events are not detected on the TX/RX path and must be generated explicitly
417978SPeter.Dunlap@Sun.COM  * by the client when appropriate:
427978SPeter.Dunlap@Sun.COM  *
437978SPeter.Dunlap@Sun.COM  * CE_LOGOUT_OTHER_CONN_RCV
447978SPeter.Dunlap@Sun.COM  * CE_ASYNC_DROP_CONN_RCV   (Only because the message may be received on
457978SPeter.Dunlap@Sun.COM  * a different connection from the connection being dropped)
467978SPeter.Dunlap@Sun.COM  * CE_ASYNC_DROP_ALL_CONN_RCV
477978SPeter.Dunlap@Sun.COM  * CE_LOGOUT_OTHER_CONN_SND
487978SPeter.Dunlap@Sun.COM  * CE_ASYNC_DROP_ALL_CONN_SND
497978SPeter.Dunlap@Sun.COM  *
507978SPeter.Dunlap@Sun.COM  * The following events might occur in any state since they are driven
517978SPeter.Dunlap@Sun.COM  * by the PDU's that IDM receives:
527978SPeter.Dunlap@Sun.COM  *
537978SPeter.Dunlap@Sun.COM  * CE_LOGIN_RCV
547978SPeter.Dunlap@Sun.COM  * CE_LOGIN_SUCCESS_RCV
557978SPeter.Dunlap@Sun.COM  * CE_LOGIN_FAIL_RCV
567978SPeter.Dunlap@Sun.COM  * CE_LOGOUT_SUCCESS_RCV
577978SPeter.Dunlap@Sun.COM  * CE_LOGOUT_FAIL_RCV
587978SPeter.Dunlap@Sun.COM  * CE_ASYNC_LOGOUT_RCV
597978SPeter.Dunlap@Sun.COM  * CE_MISC_RCV
607978SPeter.Dunlap@Sun.COM  * CE_RX_PROTOCOL_ERROR
617978SPeter.Dunlap@Sun.COM  */
627978SPeter.Dunlap@Sun.COM 
637978SPeter.Dunlap@Sun.COM #define	IDM_LOGIN_SECONDS	20
647978SPeter.Dunlap@Sun.COM #define	IDM_LOGOUT_SECONDS	20
657978SPeter.Dunlap@Sun.COM #define	IDM_CLEANUP_SECONDS	0
667978SPeter.Dunlap@Sun.COM 
677978SPeter.Dunlap@Sun.COM /* Update idm_ce_name table whenever connection events are modified */
687978SPeter.Dunlap@Sun.COM typedef enum {
697978SPeter.Dunlap@Sun.COM 	CE_UNDEFINED = 0,
707978SPeter.Dunlap@Sun.COM 
717978SPeter.Dunlap@Sun.COM 	/* Initiator events */
727978SPeter.Dunlap@Sun.COM 	CE_CONNECT_REQ,
737978SPeter.Dunlap@Sun.COM 	CE_CONNECT_FAIL,
747978SPeter.Dunlap@Sun.COM 	CE_CONNECT_SUCCESS,
757978SPeter.Dunlap@Sun.COM 	CE_LOGIN_SND,
767978SPeter.Dunlap@Sun.COM 	CE_LOGIN_SUCCESS_RCV,
777978SPeter.Dunlap@Sun.COM 	CE_LOGIN_FAIL_RCV,
787978SPeter.Dunlap@Sun.COM 	CE_LOGOUT_THIS_CONN_SND,
797978SPeter.Dunlap@Sun.COM 	CE_LOGOUT_OTHER_CONN_SND,
807978SPeter.Dunlap@Sun.COM 	CE_LOGOUT_SESSION_SND,
817978SPeter.Dunlap@Sun.COM 	CE_LOGOUT_SUCCESS_RCV,
827978SPeter.Dunlap@Sun.COM 	CE_LOGOUT_FAIL_RCV,
837978SPeter.Dunlap@Sun.COM 	CE_ASYNC_LOGOUT_RCV,
847978SPeter.Dunlap@Sun.COM 	CE_ASYNC_DROP_CONN_RCV,
857978SPeter.Dunlap@Sun.COM 	CE_ASYNC_DROP_ALL_CONN_RCV,
867978SPeter.Dunlap@Sun.COM 
877978SPeter.Dunlap@Sun.COM 	/* Target events */
887978SPeter.Dunlap@Sun.COM 	CE_CONNECT_ACCEPT,
897978SPeter.Dunlap@Sun.COM 	CE_CONNECT_REJECT,
907978SPeter.Dunlap@Sun.COM 	CE_LOGIN_RCV,
917978SPeter.Dunlap@Sun.COM 	CE_LOGIN_TIMEOUT,
927978SPeter.Dunlap@Sun.COM 	CE_LOGIN_SUCCESS_SND,
937978SPeter.Dunlap@Sun.COM 	CE_LOGIN_FAIL_SND,
947978SPeter.Dunlap@Sun.COM 	CE_LOGIN_FAIL_SND_DONE,
957978SPeter.Dunlap@Sun.COM 	CE_LOGOUT_THIS_CONN_RCV,
967978SPeter.Dunlap@Sun.COM 	CE_LOGOUT_OTHER_CONN_RCV,
977978SPeter.Dunlap@Sun.COM 	CE_LOGOUT_SESSION_RCV,
987978SPeter.Dunlap@Sun.COM 	CE_LOGOUT_SUCCESS_SND,
997978SPeter.Dunlap@Sun.COM 	CE_LOGOUT_SUCCESS_SND_DONE,
1007978SPeter.Dunlap@Sun.COM 	CE_LOGOUT_FAIL_SND,
1017978SPeter.Dunlap@Sun.COM 	CE_LOGOUT_FAIL_SND_DONE,
1027978SPeter.Dunlap@Sun.COM 	CE_CLEANUP_TIMEOUT,
1037978SPeter.Dunlap@Sun.COM 	CE_ASYNC_LOGOUT_SND,
1047978SPeter.Dunlap@Sun.COM 	CE_ASYNC_DROP_CONN_SND,
1057978SPeter.Dunlap@Sun.COM 	CE_ASYNC_DROP_ALL_CONN_SND,
1067978SPeter.Dunlap@Sun.COM 	CE_LOGOUT_TIMEOUT,
1077978SPeter.Dunlap@Sun.COM 
1087978SPeter.Dunlap@Sun.COM 	/* Common events */
1097978SPeter.Dunlap@Sun.COM 	CE_TRANSPORT_FAIL,
1107978SPeter.Dunlap@Sun.COM 	CE_MISC_TX,
1117978SPeter.Dunlap@Sun.COM 	CE_TX_PROTOCOL_ERROR,
1127978SPeter.Dunlap@Sun.COM 	CE_MISC_RX,
1137978SPeter.Dunlap@Sun.COM 	CE_RX_PROTOCOL_ERROR,
1147978SPeter.Dunlap@Sun.COM 	CE_LOGOUT_SESSION_SUCCESS,
1157978SPeter.Dunlap@Sun.COM 	CE_CONN_REINSTATE,
1167978SPeter.Dunlap@Sun.COM 	CE_CONN_REINSTATE_SUCCESS,
1177978SPeter.Dunlap@Sun.COM 	CE_CONN_REINSTATE_FAIL,
1187978SPeter.Dunlap@Sun.COM 	CE_ENABLE_DM_SUCCESS,
1197978SPeter.Dunlap@Sun.COM 	CE_ENABLE_DM_FAIL,
1207978SPeter.Dunlap@Sun.COM 
1217978SPeter.Dunlap@Sun.COM 	/* Add new events above CE_MAX_EVENT */
1227978SPeter.Dunlap@Sun.COM 	CE_MAX_EVENT
1237978SPeter.Dunlap@Sun.COM } idm_conn_event_t;
1247978SPeter.Dunlap@Sun.COM 
1257978SPeter.Dunlap@Sun.COM #ifdef IDM_CONN_SM_STRINGS
1267978SPeter.Dunlap@Sun.COM /* An array of event text values, for use in logging events */
1277978SPeter.Dunlap@Sun.COM static const char *idm_ce_name[CE_MAX_EVENT+1] = {
1287978SPeter.Dunlap@Sun.COM 	"CE_UNDEFINED",
1297978SPeter.Dunlap@Sun.COM 	"CE_CONNECT_REQ",
1307978SPeter.Dunlap@Sun.COM 	"CE_CONNECT_FAIL",
1317978SPeter.Dunlap@Sun.COM 	"CE_CONNECT_SUCCESS",
1327978SPeter.Dunlap@Sun.COM 	"CE_LOGIN_SND",
1337978SPeter.Dunlap@Sun.COM 	"CE_LOGIN_SUCCESS_RCV",
1347978SPeter.Dunlap@Sun.COM 	"CE_LOGIN_FAIL_RCV",
1357978SPeter.Dunlap@Sun.COM 	"CE_LOGOUT_THIS_CONN_SND",
1367978SPeter.Dunlap@Sun.COM 	"CE_LOGOUT_OTHER_CONN_SND",
1377978SPeter.Dunlap@Sun.COM 	"CE_LOGOUT_SESSION_SND",
1387978SPeter.Dunlap@Sun.COM 	"CE_LOGOUT_SUCCESS_RCV",
1397978SPeter.Dunlap@Sun.COM 	"CE_LOGOUT_FAIL_RCV",
1407978SPeter.Dunlap@Sun.COM 	"CE_ASYNC_LOGOUT_RCV",
1417978SPeter.Dunlap@Sun.COM 	"CE_ASYNC_DROP_CONN_RCV",
1427978SPeter.Dunlap@Sun.COM 	"CE_ASYNC_DROP_ALL_CONN_RCV",
1437978SPeter.Dunlap@Sun.COM 	"CE_CONNECT_ACCEPT",
1447978SPeter.Dunlap@Sun.COM 	"CE_CONNECT_REJECT",
1457978SPeter.Dunlap@Sun.COM 	"CE_LOGIN_RCV",
1467978SPeter.Dunlap@Sun.COM 	"CE_LOGIN_TIMEOUT",
1477978SPeter.Dunlap@Sun.COM 	"CE_LOGIN_SUCCESS_SND",
1487978SPeter.Dunlap@Sun.COM 	"CE_LOGIN_FAIL_SND",
1497978SPeter.Dunlap@Sun.COM 	"CE_LOGIN_FAIL_SND_DONE",
1507978SPeter.Dunlap@Sun.COM 	"CE_LOGOUT_THIS_CONN_RCV",
1517978SPeter.Dunlap@Sun.COM 	"CE_LOGOUT_OTHER_CONN_RCV",
1527978SPeter.Dunlap@Sun.COM 	"CE_LOGOUT_SESSION_RCV",
1537978SPeter.Dunlap@Sun.COM 	"CE_LOGOUT_SUCCESS_SND",
1547978SPeter.Dunlap@Sun.COM 	"CE_LOGOUT_SUCCESS_SND_DONE",
1557978SPeter.Dunlap@Sun.COM 	"CE_LOGOUT_FAIL_SND",
1567978SPeter.Dunlap@Sun.COM 	"CE_LOGOUT_FAIL_SND_DONE",
1577978SPeter.Dunlap@Sun.COM 	"CE_CLEANUP_TIMEOUT",
1587978SPeter.Dunlap@Sun.COM 	"CE_ASYNC_LOGOUT_SND",
1597978SPeter.Dunlap@Sun.COM 	"CE_ASYNC_DROP_CONN_SND",
1607978SPeter.Dunlap@Sun.COM 	"CE_ASYNC_DROP_ALL_CONN_SND",
1617978SPeter.Dunlap@Sun.COM 	"CE_LOGOUT_TIMEOUT",
1627978SPeter.Dunlap@Sun.COM 	"CE_TRANSPORT_FAIL",
1637978SPeter.Dunlap@Sun.COM 	"CE_MISC_TX",
1647978SPeter.Dunlap@Sun.COM 	"CE_TX_PROTOCOL_ERROR",
1657978SPeter.Dunlap@Sun.COM 	"CE_MISC_RX",
1667978SPeter.Dunlap@Sun.COM 	"CE_RX_PROTOCOL_ERROR",
1677978SPeter.Dunlap@Sun.COM 	"CE_LOGOUT_SESSION_SUCCESS",
1687978SPeter.Dunlap@Sun.COM 	"CE_CONN_REINSTATE",
1697978SPeter.Dunlap@Sun.COM 	"CE_CONN_REINSTATE_SUCCESS",
1707978SPeter.Dunlap@Sun.COM 	"CE_CONN_REINSTATE_FAIL",
1717978SPeter.Dunlap@Sun.COM 	"CE_ENABLE_DM_SUCCESS",
1727978SPeter.Dunlap@Sun.COM 	"CE_ENABLE_DM_FAIL",
1737978SPeter.Dunlap@Sun.COM 	"CE_MAX_EVENT"
1747978SPeter.Dunlap@Sun.COM };
1757978SPeter.Dunlap@Sun.COM #endif
1767978SPeter.Dunlap@Sun.COM 
1777978SPeter.Dunlap@Sun.COM /* Update idm_cs_name table whenever connection states are modified */
1787978SPeter.Dunlap@Sun.COM typedef enum {
1797978SPeter.Dunlap@Sun.COM 	CS_S0_UNDEFINED = 0,
1807978SPeter.Dunlap@Sun.COM 
1817978SPeter.Dunlap@Sun.COM 	CS_S1_FREE,
1827978SPeter.Dunlap@Sun.COM 	CS_S2_XPT_WAIT,
1837978SPeter.Dunlap@Sun.COM 	CS_S3_XPT_UP,
1847978SPeter.Dunlap@Sun.COM 	CS_S4_IN_LOGIN,
1857978SPeter.Dunlap@Sun.COM 	CS_S5_LOGGED_IN,
1867978SPeter.Dunlap@Sun.COM 	CS_S6_IN_LOGOUT,
1877978SPeter.Dunlap@Sun.COM 	CS_S7_LOGOUT_REQ,
1887978SPeter.Dunlap@Sun.COM 	CS_S8_CLEANUP,
1897978SPeter.Dunlap@Sun.COM 	CS_S9_INIT_ERROR,
1907978SPeter.Dunlap@Sun.COM 	CS_S10_IN_CLEANUP,
1917978SPeter.Dunlap@Sun.COM 	CS_S11_COMPLETE,
1927978SPeter.Dunlap@Sun.COM 	CS_S12_ENABLE_DM,
193*11552SPeter.Cudhea@Sun.COM 	CS_S9A_REJECTED,
194*11552SPeter.Cudhea@Sun.COM 	CS_S9B_WAIT_SND_DONE,
1957978SPeter.Dunlap@Sun.COM 
1967978SPeter.Dunlap@Sun.COM 	/* Add new connection states above CS_MAX_STATE */
1977978SPeter.Dunlap@Sun.COM 	CS_MAX_STATE
1987978SPeter.Dunlap@Sun.COM } idm_conn_state_t;
1997978SPeter.Dunlap@Sun.COM 
2007978SPeter.Dunlap@Sun.COM #ifdef IDM_CONN_SM_STRINGS
2017978SPeter.Dunlap@Sun.COM /* An array of state text values, for use in logging state transitions */
2027978SPeter.Dunlap@Sun.COM static const char *idm_cs_name[CS_MAX_STATE+1] = {
2037978SPeter.Dunlap@Sun.COM 	"CS_S0_UNDEFINED",
2047978SPeter.Dunlap@Sun.COM 	"CS_S1_FREE",
2057978SPeter.Dunlap@Sun.COM 	"CS_S2_XPT_WAIT",
2067978SPeter.Dunlap@Sun.COM 	"CS_S3_XPT_UP",
2077978SPeter.Dunlap@Sun.COM 	"CS_S4_IN_LOGIN",
2087978SPeter.Dunlap@Sun.COM 	"CS_S5_LOGGED_IN",
2097978SPeter.Dunlap@Sun.COM 	"CS_S6_IN_LOGOUT",
2107978SPeter.Dunlap@Sun.COM 	"CS_S7_LOGOUT_REQ",
2117978SPeter.Dunlap@Sun.COM 	"CS_S8_CLEANUP",
2127978SPeter.Dunlap@Sun.COM 	"CS_S9_INIT_ERROR",
2137978SPeter.Dunlap@Sun.COM 	"CS_S10_IN_CLEANUP",
2147978SPeter.Dunlap@Sun.COM 	"CS_S11_COMPLETE",
2157978SPeter.Dunlap@Sun.COM 	"CS_S12_ENABLE_DM",
216*11552SPeter.Cudhea@Sun.COM 	"CS_S9A_REJECTED",
217*11552SPeter.Cudhea@Sun.COM 	"CS_S9B_WAIT_SND_DONE",
2187978SPeter.Dunlap@Sun.COM 	"CS_MAX_STATE"
2197978SPeter.Dunlap@Sun.COM };
2207978SPeter.Dunlap@Sun.COM #endif
2217978SPeter.Dunlap@Sun.COM 
2227978SPeter.Dunlap@Sun.COM typedef enum {
2237978SPeter.Dunlap@Sun.COM 	CT_NONE = 0,
2247978SPeter.Dunlap@Sun.COM 	CT_RX_PDU,
2257978SPeter.Dunlap@Sun.COM 	CT_TX_PDU
2267978SPeter.Dunlap@Sun.COM } idm_pdu_event_type_t;
2277978SPeter.Dunlap@Sun.COM 
2287978SPeter.Dunlap@Sun.COM typedef enum {
2297978SPeter.Dunlap@Sun.COM 	CA_TX_PROTOCOL_ERROR,	/* Send "protocol error" to state machine */
2307978SPeter.Dunlap@Sun.COM 	CA_RX_PROTOCOL_ERROR,	/* Send "protocol error" to state machine */
2319162SPeter.Dunlap@Sun.COM 	CA_FORWARD,		/* State machine event and forward to client */
2327978SPeter.Dunlap@Sun.COM 	CA_DROP			/* Drop PDU */
2337978SPeter.Dunlap@Sun.COM } idm_pdu_event_action_t;
2347978SPeter.Dunlap@Sun.COM 
2357978SPeter.Dunlap@Sun.COM typedef struct {
2367978SPeter.Dunlap@Sun.COM 	struct idm_conn_s	*iec_ic;
2377978SPeter.Dunlap@Sun.COM 	idm_conn_event_t	iec_event;
2387978SPeter.Dunlap@Sun.COM 	uintptr_t		iec_info;
2397978SPeter.Dunlap@Sun.COM 	idm_pdu_event_type_t	iec_pdu_event_type;
2409162SPeter.Dunlap@Sun.COM 	boolean_t		iec_pdu_forwarded;
2417978SPeter.Dunlap@Sun.COM } idm_conn_event_ctx_t;
2427978SPeter.Dunlap@Sun.COM 
2437978SPeter.Dunlap@Sun.COM idm_status_t
2447978SPeter.Dunlap@Sun.COM idm_conn_sm_init(struct idm_conn_s *ic);
2457978SPeter.Dunlap@Sun.COM 
2467978SPeter.Dunlap@Sun.COM void
2477978SPeter.Dunlap@Sun.COM idm_conn_sm_fini(struct idm_conn_s *ic);
2487978SPeter.Dunlap@Sun.COM 
2497978SPeter.Dunlap@Sun.COM idm_status_t
2507978SPeter.Dunlap@Sun.COM idm_notify_client(struct idm_conn_s *ic, idm_client_notify_t cn,
2517978SPeter.Dunlap@Sun.COM     uintptr_t data);
2527978SPeter.Dunlap@Sun.COM 
2537978SPeter.Dunlap@Sun.COM void
2547978SPeter.Dunlap@Sun.COM idm_conn_event(struct idm_conn_s *ic, idm_conn_event_t event, uintptr_t data);
2557978SPeter.Dunlap@Sun.COM 
2569162SPeter.Dunlap@Sun.COM void
2579162SPeter.Dunlap@Sun.COM idm_conn_event(struct idm_conn_s *ic, idm_conn_event_t event, uintptr_t data);
2589162SPeter.Dunlap@Sun.COM 
2599162SPeter.Dunlap@Sun.COM void
2609162SPeter.Dunlap@Sun.COM idm_conn_event_locked(struct idm_conn_s *ic, idm_conn_event_t event,
2619162SPeter.Dunlap@Sun.COM     uintptr_t event_info, idm_pdu_event_type_t pdu_event_type);
2629162SPeter.Dunlap@Sun.COM 
2637978SPeter.Dunlap@Sun.COM idm_status_t
2647978SPeter.Dunlap@Sun.COM idm_conn_reinstate_event(struct idm_conn_s *old_ic, struct idm_conn_s *new_ic);
2657978SPeter.Dunlap@Sun.COM 
2667978SPeter.Dunlap@Sun.COM void
2677978SPeter.Dunlap@Sun.COM idm_conn_tx_pdu_event(struct idm_conn_s *ic, idm_conn_event_t event,
2687978SPeter.Dunlap@Sun.COM     uintptr_t data);
2697978SPeter.Dunlap@Sun.COM 
2707978SPeter.Dunlap@Sun.COM void
2717978SPeter.Dunlap@Sun.COM idm_conn_rx_pdu_event(struct idm_conn_s *ic, idm_conn_event_t event,
2727978SPeter.Dunlap@Sun.COM     uintptr_t data);
2737978SPeter.Dunlap@Sun.COM 
2747978SPeter.Dunlap@Sun.COM char *
2757978SPeter.Dunlap@Sun.COM idm_conn_state_str(struct idm_conn_s *ic);
2767978SPeter.Dunlap@Sun.COM 
2777978SPeter.Dunlap@Sun.COM #ifdef	__cplusplus
2787978SPeter.Dunlap@Sun.COM }
2797978SPeter.Dunlap@Sun.COM #endif
2807978SPeter.Dunlap@Sun.COM 
2817978SPeter.Dunlap@Sun.COM #endif /* _IDM_CONN_SM_H_ */
282