On 14:41 Thu 10 Jun , Yevgeny Kliteynik wrote: > Hi Sasha, > > Adding new events that allow event plug-in to see > when SM finishes heavy sweep and routing configuration, > when it updates dump files, when it is no longer master, > and when SM port is down: > > OSM_EVENT_ID_HEAVY_SWEEP_DONE > OSM_EVENT_ID_UCAST_ROUTING_DONE
What is wrong with using Subnet Up event for those purposes? > OSM_EVENT_ID_ENTERING_STANDBY > OSM_EVENT_ID_SM_PORT_DOWN Instead I would suggest to make "state change" event. > OSM_EVENT_ID_SA_DB_DUMPED Again, "Subnet Up" indicates that all sweep stuff is done (including dump files). > > The last event is reported when SA DB is actually dumped. > > Signed-off-by: Yevgeny Kliteynik <klit...@dev.mellanox.co.il> > --- > > Changes from V2: > - reduced number of events that are reported > - rebased to latest master > > --- > opensm/include/opensm/osm_event_plugin.h | 7 ++++++- > opensm/opensm/osm_state_mgr.c | 16 +++++++++++++++- > opensm/osmeventplugin/src/osmeventplugin.c | 15 +++++++++++++++ > 3 files changed, 36 insertions(+), 2 deletions(-) > > diff --git a/opensm/include/opensm/osm_event_plugin.h > b/opensm/include/opensm/osm_event_plugin.h > index 33d1920..a565123 100644 > --- a/opensm/include/opensm/osm_event_plugin.h > +++ b/opensm/include/opensm/osm_event_plugin.h > @@ -72,7 +72,12 @@ typedef enum { > OSM_EVENT_ID_PORT_SELECT, > OSM_EVENT_ID_TRAP, > OSM_EVENT_ID_SUBNET_UP, > - OSM_EVENT_ID_MAX > + OSM_EVENT_ID_MAX, Likely you wanted to move OSM_EVENT_ID_MAX to be last in the list. Sasha > + OSM_EVENT_ID_HEAVY_SWEEP_DONE, > + OSM_EVENT_ID_UCAST_ROUTING_DONE, > + OSM_EVENT_ID_ENTERING_STANDBY, > + OSM_EVENT_ID_SM_PORT_DOWN, > + OSM_EVENT_ID_SA_DB_DUMPED > } osm_epi_event_id_t; > > typedef struct osm_epi_port_id { > diff --git a/opensm/opensm/osm_state_mgr.c b/opensm/opensm/osm_state_mgr.c > index 81c8f54..3231ae9 100644 > --- a/opensm/opensm/osm_state_mgr.c > +++ b/opensm/opensm/osm_state_mgr.c > @@ -1151,6 +1151,8 @@ static void do_sweep(osm_sm_t * sm) > if (!sm->p_subn->subnet_initialization_error) { > OSM_LOG_MSG_BOX(sm->p_log, OSM_LOG_VERBOSE, > "REROUTE COMPLETE"); > + osm_opensm_report_event(sm->p_subn->p_osm, > + OSM_EVENT_ID_UCAST_ROUTING_DONE, NULL); > return; > } > } > @@ -1185,6 +1187,8 @@ repeat_discovery: > > /* Move to DISCOVERING state */ > osm_sm_state_mgr_process(sm, OSM_SM_SIGNAL_DISCOVER); > + osm_opensm_report_event(sm->p_subn->p_osm, > + OSM_EVENT_ID_SM_PORT_DOWN, NULL); > return; > } > > @@ -1205,6 +1209,8 @@ repeat_discovery: > "ENTERING STANDBY STATE"); > /* notify master SM about us */ > osm_send_trap144(sm, 0); > + osm_opensm_report_event(sm->p_subn->p_osm, > + OSM_EVENT_ID_ENTERING_STANDBY, NULL); > return; > } > > @@ -1212,6 +1218,9 @@ repeat_discovery: > if (sm->p_subn->force_heavy_sweep) > goto repeat_discovery; > > + osm_opensm_report_event(sm->p_subn->p_osm, > + OSM_EVENT_ID_HEAVY_SWEEP_DONE, NULL); > + > OSM_LOG_MSG_BOX(sm->p_log, OSM_LOG_VERBOSE, "HEAVY SWEEP COMPLETE"); > > /* If we are MASTER - get the highest remote_sm, and > @@ -1314,6 +1323,8 @@ repeat_discovery: > > OSM_LOG_MSG_BOX(sm->p_log, OSM_LOG_VERBOSE, > "SWITCHES CONFIGURED FOR UNICAST"); > + osm_opensm_report_event(sm->p_subn->p_osm, > + OSM_EVENT_ID_UCAST_ROUTING_DONE, NULL); > > if (!sm->p_subn->opt.disable_multicast) { > osm_mcast_mgr_process(sm); > @@ -1375,7 +1386,10 @@ repeat_discovery: > > if (osm_log_is_active(sm->p_log, OSM_LOG_VERBOSE) || > sm->p_subn->opt.sa_db_dump) > - osm_sa_db_file_dump(sm->p_subn->p_osm); > + if (!osm_sa_db_file_dump(sm->p_subn->p_osm)) > + osm_opensm_report_event(sm->p_subn->p_osm, > + OSM_EVENT_ID_SA_DB_DUMPED, NULL); > + > } > > /* > diff --git a/opensm/osmeventplugin/src/osmeventplugin.c > b/opensm/osmeventplugin/src/osmeventplugin.c > index b4d9ce9..af68a5c 100644 > --- a/opensm/osmeventplugin/src/osmeventplugin.c > +++ b/opensm/osmeventplugin/src/osmeventplugin.c > @@ -176,6 +176,21 @@ static void report(void *_log, osm_epi_event_id_t > event_id, void *event_data) > case OSM_EVENT_ID_SUBNET_UP: > fprintf(log->log_file, "Subnet up reported\n"); > break; > + case OSM_EVENT_ID_HEAVY_SWEEP_DONE: > + fprintf(log->log_file, "Heavy sweep completed\n"); > + break; > + case OSM_EVENT_ID_UCAST_ROUTING_DONE: > + fprintf(log->log_file, "Unicast routing completed\n"); > + break; > + case OSM_EVENT_ID_ENTERING_STANDBY: > + fprintf(log->log_file, "Entering stand-by state\n"); > + break; > + case OSM_EVENT_ID_SM_PORT_DOWN: > + fprintf(log->log_file, "SM port is down\n"); > + break; > + case OSM_EVENT_ID_SA_DB_DUMPED: > + fprintf(log->log_file, "SA DB dump file updated\n"); > + break; > case OSM_EVENT_ID_MAX: > default: > osm_log(log->osmlog, OSM_LOG_ERROR, > -- > 1.5.1.4 > > > -- > To unsubscribe from this list: send the line "unsubscribe linux-rdma" in > the body of a message to majord...@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html