Lines Matching defs:smc
20 #include "h/smc.h"
32 static void clear_all_rep(struct s_smc *smc);
33 static void clear_reported(struct s_smc *smc);
34 static void smt_send_srf(struct s_smc *smc);
35 static struct s_srf_evc *smt_get_evc(struct s_smc *smc, int code, int index);
37 #define MAX_EVCS ARRAY_SIZE(smc->evcs)
63 void smt_init_evc(struct s_smc *smc)
73 memset((char *)smc->evcs,0,sizeof(smc->evcs)) ;
75 evc = smc->evcs ;
92 if ((unsigned int) (evc - smc->evcs) > MAX_EVCS) {
93 SMT_PANIC(smc,SMT_E0127, SMT_E0127_MSG) ;
99 smc->evcs[0].evc_cond_state = &smc->mib.fddiSMTPeerWrapFlag ;
100 smc->evcs[1].evc_cond_state =
101 &smc->mib.m[MAC0].fddiMACDuplicateAddressCond ;
102 smc->evcs[2].evc_cond_state =
103 &smc->mib.m[MAC0].fddiMACFrameErrorFlag ;
104 smc->evcs[3].evc_cond_state =
105 &smc->mib.m[MAC0].fddiMACNotCopiedFlag ;
110 smc->evcs[4].evc_multiple = &smc->mib.m[MAC0].fddiMACMultiple_N ;
111 smc->evcs[5].evc_multiple = &smc->mib.m[MAC0].fddiMACMultiple_P ;
118 smc->evcs[offset + 0*NUMPHYS].evc_cond_state =
119 &smc->mib.p[i].fddiPORTLerFlag ;
120 smc->evcs[offset + 1*NUMPHYS].evc_cond_state =
121 &smc->mib.p[i].fddiPORTEB_Condition ;
126 smc->evcs[offset + 2*NUMPHYS].evc_multiple =
127 &smc->mib.p[i].fddiPORTMultiple_U ;
128 smc->evcs[offset + 3*NUMPHYS].evc_multiple =
129 &smc->mib.p[i].fddiPORTMultiple_P ;
133 for (i = 0, evc = smc->evcs ; i < MAX_EVCS ; i++, evc++) {
136 SMT_PANIC(smc,SMT_E0128, SMT_E0128_MSG) ;
142 SMT_PANIC(smc,SMT_E0129, SMT_E0129_MSG) ;
148 smc->srf.TSR = smt_get_time() ;
149 smc->srf.sr_state = SR0_WAIT ;
152 static struct s_srf_evc *smt_get_evc(struct s_smc *smc, int code, int index)
157 for (i = 0, evc = smc->evcs ; i < MAX_EVCS ; i++, evc++) {
176 void smt_srf_event(struct s_smc *smc, int code, int index, int cond)
186 RS_SET(smc,RS_DUPADDR) ;
192 if (!(evc = smt_get_evc(smc,code,index))) {
207 smt_set_timestamp(smc,smc->mib.fddiSMTTransitionTimeStamp) ;
213 smc->srf.any_report = TRUE ;
229 smc->srf.any_report = TRUE ;
233 snmp_srf_event(smc,evc) ;
236 tsr = smt_get_time() - smc->srf.TSR ;
238 switch (smc->srf.sr_state) {
242 smc->srf.SRThreshold = THRESHOLD_2 ;
243 smc->srf.sr_state = SR1_HOLDOFF ;
248 smc->srf.sr_state = SR1_HOLDOFF ;
253 smc->srf.sr_state = SR1_HOLDOFF ;
258 smc->srf.SRThreshold = THRESHOLD_2 ;
259 smc->srf.TSR = smt_get_time() ;
260 smt_send_srf(smc) ;
265 smc->srf.TSR = smt_get_time() ;
266 smt_send_srf(smc) ;
271 smc->srf.TSR = smt_get_time() ;
272 smt_send_srf(smc) ;
276 if (smc->srf.any_report && (u_long) tsr >=
277 smc->srf.SRThreshold) {
278 smc->srf.SRThreshold *= 2 ;
279 if (smc->srf.SRThreshold > THRESHOLD_32)
280 smc->srf.SRThreshold = THRESHOLD_32 ;
281 smc->srf.TSR = smt_get_time() ;
282 smt_send_srf(smc) ;
286 if (!smc->mib.fddiSMTStatRptPolicy) {
287 smc->srf.sr_state = SR2_DISABLED ;
294 smc->srf.sr_state = SR0_WAIT ;
295 smc->srf.TSR = smt_get_time() ;
296 smt_send_srf(smc) ;
301 smc->srf.SRThreshold = THRESHOLD_2 ;
307 if (!smc->mib.fddiSMTStatRptPolicy) {
308 smc->srf.sr_state = SR2_DISABLED ;
313 if (smc->mib.fddiSMTStatRptPolicy) {
314 smc->srf.sr_state = SR0_WAIT ;
315 smc->srf.TSR = smt_get_time() ;
316 smc->srf.SRThreshold = THRESHOLD_2 ;
317 clear_all_rep(smc) ;
324 static void clear_all_rep(struct s_smc *smc)
329 for (i = 0, evc = smc->evcs ; i < MAX_EVCS ; i++, evc++) {
334 smc->srf.any_report = FALSE ;
337 static void clear_reported(struct s_smc *smc)
342 smc->srf.any_report = FALSE ;
343 for (i = 0, evc = smc->evcs ; i < MAX_EVCS ; i++, evc++) {
348 smc->srf.any_report = TRUE ;
360 static void smt_send_srf(struct s_smc *smc)
376 if (!smc->r.sm_ma_avail)
378 if (!(mb = smt_build_frame(smc,SMT_SRF,SMT_ANNOUNCE,0)))
381 RS_SET(smc,RS_SOFTERROR) ;
394 smt_add_para(smc,&pcon,(u_short) SMT_P1033,0,0) ;
395 smt_add_para(smc,&pcon,(u_short) SMT_P1034,0,0) ;
397 for (i = 0, evc = smc->evcs ; i < MAX_EVCS ; i++, evc++) {
399 smt_add_para(smc,&pcon,evc->evc_para,
408 smc->srf.sr_state, smc->srf.SRThreshold / TICKS_PER_SECOND);
410 dump_smt(smc,smt,"SRF Send") ;
412 smt_send_frame(smc,mb,FC_SMT_INFO,0) ;
413 clear_reported(smc) ;