Print this page
NEX-3177 enums and string arrays required to be in sync.
Reviewed by: Rob Gittins <rob.gittins@nexenta.com>
Reviewed by: Steve Peng <steve.peng@nexenta.com>
SUP-930 Freed and reused idm_conn_t buffer leads to system panic.
Reviewed by: Rob Gittins <rob.gittins@nexenta.com>
Reviewed by: Steve Ping <steve.ping@nexenta.com>

*** 63,224 **** #define IDM_LOGIN_SECONDS 20 #define IDM_LOGOUT_SECONDS 20 #define IDM_CLEANUP_SECONDS 0 /* Update idm_ce_name table whenever connection events are modified */ typedef enum { ! CE_UNDEFINED = 0, ! ! /* Initiator events */ ! CE_CONNECT_REQ, ! CE_CONNECT_FAIL, ! CE_CONNECT_SUCCESS, ! CE_LOGIN_SND, ! CE_LOGIN_SUCCESS_RCV, ! CE_LOGIN_FAIL_RCV, ! CE_LOGOUT_THIS_CONN_SND, ! CE_LOGOUT_OTHER_CONN_SND, ! CE_LOGOUT_SESSION_SND, ! CE_LOGOUT_SUCCESS_RCV, ! CE_LOGOUT_FAIL_RCV, ! CE_ASYNC_LOGOUT_RCV, ! CE_ASYNC_DROP_CONN_RCV, ! CE_ASYNC_DROP_ALL_CONN_RCV, ! ! /* Target events */ ! CE_CONNECT_ACCEPT, ! CE_CONNECT_REJECT, ! CE_LOGIN_RCV, ! CE_LOGIN_TIMEOUT, ! CE_LOGIN_SUCCESS_SND, ! CE_LOGIN_FAIL_SND, ! CE_LOGIN_FAIL_SND_DONE, ! CE_LOGOUT_THIS_CONN_RCV, ! CE_LOGOUT_OTHER_CONN_RCV, ! CE_LOGOUT_SESSION_RCV, ! CE_LOGOUT_SUCCESS_SND, ! CE_LOGOUT_SUCCESS_SND_DONE, ! CE_LOGOUT_FAIL_SND, ! CE_LOGOUT_FAIL_SND_DONE, ! CE_CLEANUP_TIMEOUT, ! CE_ASYNC_LOGOUT_SND, ! CE_ASYNC_DROP_CONN_SND, ! CE_ASYNC_DROP_ALL_CONN_SND, ! CE_LOGOUT_TIMEOUT, ! ! /* Common events */ ! CE_TRANSPORT_FAIL, ! CE_MISC_TX, ! CE_TX_PROTOCOL_ERROR, ! CE_MISC_RX, ! CE_RX_PROTOCOL_ERROR, ! CE_LOGOUT_SESSION_SUCCESS, ! CE_CONN_REINSTATE, ! CE_CONN_REINSTATE_SUCCESS, ! CE_CONN_REINSTATE_FAIL, ! CE_ENABLE_DM_SUCCESS, ! CE_ENABLE_DM_FAIL, ! ! /* Add new events above CE_MAX_EVENT */ ! CE_MAX_EVENT } idm_conn_event_t; #ifdef IDM_CONN_SM_STRINGS /* An array of event text values, for use in logging events */ static const char *idm_ce_name[CE_MAX_EVENT+1] = { ! "CE_UNDEFINED", ! "CE_CONNECT_REQ", ! "CE_CONNECT_FAIL", ! "CE_CONNECT_SUCCESS", ! "CE_LOGIN_SND", ! "CE_LOGIN_SUCCESS_RCV", ! "CE_LOGIN_FAIL_RCV", ! "CE_LOGOUT_THIS_CONN_SND", ! "CE_LOGOUT_OTHER_CONN_SND", ! "CE_LOGOUT_SESSION_SND", ! "CE_LOGOUT_SUCCESS_RCV", ! "CE_LOGOUT_FAIL_RCV", ! "CE_ASYNC_LOGOUT_RCV", ! "CE_ASYNC_DROP_CONN_RCV", ! "CE_ASYNC_DROP_ALL_CONN_RCV", ! "CE_CONNECT_ACCEPT", ! "CE_CONNECT_REJECT", ! "CE_LOGIN_RCV", ! "CE_LOGIN_TIMEOUT", ! "CE_LOGIN_SUCCESS_SND", ! "CE_LOGIN_FAIL_SND", ! "CE_LOGIN_FAIL_SND_DONE", ! "CE_LOGOUT_THIS_CONN_RCV", ! "CE_LOGOUT_OTHER_CONN_RCV", ! "CE_LOGOUT_SESSION_RCV", ! "CE_LOGOUT_SUCCESS_SND", ! "CE_LOGOUT_SUCCESS_SND_DONE", ! "CE_LOGOUT_FAIL_SND", ! "CE_LOGOUT_FAIL_SND_DONE", ! "CE_CLEANUP_TIMEOUT", ! "CE_ASYNC_LOGOUT_SND", ! "CE_ASYNC_DROP_CONN_SND", ! "CE_ASYNC_DROP_ALL_CONN_SND", ! "CE_LOGOUT_TIMEOUT", ! "CE_TRANSPORT_FAIL", ! "CE_MISC_TX", ! "CE_TX_PROTOCOL_ERROR", ! "CE_MISC_RX", ! "CE_RX_PROTOCOL_ERROR", ! "CE_LOGOUT_SESSION_SUCCESS", ! "CE_CONN_REINSTATE", ! "CE_CONN_REINSTATE_SUCCESS", ! "CE_CONN_REINSTATE_FAIL", ! "CE_ENABLE_DM_SUCCESS", ! "CE_ENABLE_DM_FAIL", ! "CE_MAX_EVENT" }; #endif /* Update idm_cs_name table whenever connection states are modified */ typedef enum { ! CS_S0_UNDEFINED = 0, ! ! CS_S1_FREE, ! CS_S2_XPT_WAIT, ! CS_S3_XPT_UP, ! CS_S4_IN_LOGIN, ! CS_S5_LOGGED_IN, ! CS_S6_IN_LOGOUT, ! CS_S7_LOGOUT_REQ, ! CS_S8_CLEANUP, ! CS_S9_INIT_ERROR, ! CS_S10_IN_CLEANUP, ! CS_S11_COMPLETE, ! CS_S12_ENABLE_DM, ! CS_S9A_REJECTED, ! CS_S9B_WAIT_SND_DONE, ! ! /* Add new connection states above CS_MAX_STATE */ ! CS_MAX_STATE } idm_conn_state_t; #ifdef IDM_CONN_SM_STRINGS /* An array of state text values, for use in logging state transitions */ static const char *idm_cs_name[CS_MAX_STATE+1] = { ! "CS_S0_UNDEFINED", ! "CS_S1_FREE", ! "CS_S2_XPT_WAIT", ! "CS_S3_XPT_UP", ! "CS_S4_IN_LOGIN", ! "CS_S5_LOGGED_IN", ! "CS_S6_IN_LOGOUT", ! "CS_S7_LOGOUT_REQ", ! "CS_S8_CLEANUP", ! "CS_S9_INIT_ERROR", ! "CS_S10_IN_CLEANUP", ! "CS_S11_COMPLETE", ! "CS_S12_ENABLE_DM", ! "CS_S9A_REJECTED", ! "CS_S9B_WAIT_SND_DONE", ! "CS_MAX_STATE" }; #endif /* * Currently the state machine has a condition where idm_login_timeout() is --- 63,172 ---- #define IDM_LOGIN_SECONDS 20 #define IDM_LOGOUT_SECONDS 20 #define IDM_CLEANUP_SECONDS 0 + #define IDM_CONN_EVENT_LIST() \ + item(CE_UNDEFINED) \ + /* Initiator events */ \ + item(CE_CONNECT_REQ) \ + item(CE_CONNECT_FAIL) \ + item(CE_CONNECT_SUCCESS) \ + item(CE_LOGIN_SND) \ + item(CE_LOGIN_SUCCESS_RCV) \ + item(CE_LOGIN_FAIL_RCV) \ + item(CE_LOGOUT_THIS_CONN_SND) \ + item(CE_LOGOUT_OTHER_CONN_SND) \ + item(CE_LOGOUT_SESSION_SND) \ + item(CE_LOGOUT_SUCCESS_RCV) \ + item(CE_LOGOUT_FAIL_RCV) \ + item(CE_ASYNC_LOGOUT_RCV) \ + item(CE_ASYNC_DROP_CONN_RCV) \ + item(CE_ASYNC_DROP_ALL_CONN_RCV) \ + /* Target events */ \ + item(CE_CONNECT_ACCEPT) \ + item(CE_CONNECT_REJECT) \ + item(CE_LOGIN_RCV) \ + item(CE_LOGIN_TIMEOUT) \ + item(CE_LOGIN_SUCCESS_SND) \ + item(CE_LOGIN_FAIL_SND) \ + item(CE_LOGIN_FAIL_SND_DONE) \ + item(CE_LOGOUT_THIS_CONN_RCV) \ + item(CE_LOGOUT_OTHER_CONN_RCV) \ + item(CE_LOGOUT_SESSION_RCV) \ + item(CE_LOGOUT_SUCCESS_SND) \ + item(CE_LOGOUT_SUCCESS_SND_DONE) \ + item(CE_LOGOUT_FAIL_SND) \ + item(CE_LOGOUT_FAIL_SND_DONE) \ + item(CE_CLEANUP_TIMEOUT) \ + item(CE_ASYNC_LOGOUT_SND) \ + item(CE_ASYNC_DROP_CONN_SND) \ + item(CE_ASYNC_DROP_ALL_CONN_SND) \ + item(CE_LOGOUT_TIMEOUT) \ + /* Common events */ \ + item(CE_TRANSPORT_FAIL) \ + item(CE_MISC_TX) \ + item(CE_TX_PROTOCOL_ERROR) \ + item(CE_MISC_RX) \ + item(CE_RX_PROTOCOL_ERROR) \ + item(CE_LOGOUT_SESSION_SUCCESS) \ + item(CE_CONN_REINSTATE) \ + item(CE_CONN_REINSTATE_SUCCESS) \ + item(CE_CONN_REINSTATE_FAIL) \ + item(CE_ENABLE_DM_SUCCESS) \ + item(CE_ENABLE_DM_FAIL) \ + /* Add new events above CE_MAX_EVENT */ \ + item(CE_MAX_EVENT) + /* Update idm_ce_name table whenever connection events are modified */ typedef enum { ! #define item(a) a, ! IDM_CONN_EVENT_LIST() ! #undef item } idm_conn_event_t; #ifdef IDM_CONN_SM_STRINGS /* An array of event text values, for use in logging events */ static const char *idm_ce_name[CE_MAX_EVENT+1] = { ! #define item(a) #a, ! IDM_CONN_EVENT_LIST() ! #undef item }; #endif + #define CONN_STATE_LIST() \ + item(CS_S0_UNDEFINED) \ + item(CS_S1_FREE) \ + item(CS_S2_XPT_WAIT) \ + item(CS_S3_XPT_UP) \ + item(CS_S4_IN_LOGIN) \ + item(CS_S5_LOGGED_IN) \ + item(CS_S6_IN_LOGOUT) \ + item(CS_S7_LOGOUT_REQ) \ + item(CS_S8_CLEANUP) \ + item(CS_S9_INIT_ERROR) \ + item(CS_S10_IN_CLEANUP) \ + item(CS_S11_COMPLETE) \ + item(CS_S12_ENABLE_DM) \ + item(CS_S9A_REJECTED) \ + item(CS_S9B_WAIT_SND_DONE) \ + /* Add new connection states above CS_MAX_STATE */ \ + item(CS_MAX_STATE) + /* Update idm_cs_name table whenever connection states are modified */ typedef enum { ! #define item(a) a, ! CONN_STATE_LIST() ! #undef item } idm_conn_state_t; #ifdef IDM_CONN_SM_STRINGS /* An array of state text values, for use in logging state transitions */ static const char *idm_cs_name[CS_MAX_STATE+1] = { ! #define item(a) #a, ! CONN_STATE_LIST() ! #undef item }; #endif /* * Currently the state machine has a condition where idm_login_timeout() is