/************************************************************************/ /* */ /* ***** ***** */ /* ***** ***** */ /* ***** ***** */ /* ***** ***** */ /* *************** *************** */ /* ***************** ***************** */ /* *************** *************** */ /* ***** ***** TheNetNode */ /* ***** ***** Portable */ /* ***** ***** Network */ /* ***** ***** Software */ /* */ /* File src/l2stma.c (maintained by: DF6LN) */ /* */ /* This file is part of "TheNetNode" - Software Package */ /* */ /* Copyright (C) 1998 - 2008 NORD>state]; /* Zeiger auf den Zustandseintrag */ msg = st->msg; /* Meldung zum Layer */ st->func(); /* Zustandsuebergangsfunktion */ l2newstate(st->newstate); /* neuen State setzen */ if (msg != L2MNIX) { mftb[msg].func(); /* Meldungsfunktion */ #ifdef __WIN32__ l2tolx((short)msg); /* Ereignis melden */ #else l2tolx(msg); /* Ereignis melden */ #endif /* WIN32 */ } } /************************************************************************\ * * * "level 2 new state" * * * * In einen neuen Zustand uebergehen. Da hier die aktiven Links gezaehlt * * werden, duerfen Status-Wechel nur hier durchgefuehrt werden. * * * \************************************************************************/ void l2newstate(WORD newstate) { WORD oldstate; PORTINFO *p; int port; oldstate = lnkpoi->state; /* alten Status merken */ /****************************************************/ /* Konvertierung von 'short ' in 'unsigned char ',*/ /* moeglicher Datenverlust */ /* Modifiziert durch Oliver Kern */ /* Str. d. Zukunft 29 */ /* 01612 Glaubitz */ #ifdef __WIN32__ lnkpoi->state = (UBYTE)newstate; #else lnkpoi->state = newstate; #endif /****************************************************/ if (oldstate && !newstate) /* ein Link wird abgebaut */ { relink(ulink((LEHEAD *)lnkpoi), /* aus der aktiv-Liste nehmen */ (LEHEAD *)l2frel.tail); /* in die Freiliste haengen */ nmblks--; /* nun haben wir einen weniger */ (p = &portpar[port = lnkpoi->liport])->nmblks--; if (!multiconn(port, lnkpoi->realid)) /* letzter Connect? */ { p->nmbstn--; autopers(port); /* Port-Parameter anpassen */ } getMCs(); /* Veraenderung DAMA melden */ } if (!oldstate && newstate) /* ein Link wird aufgebaut */ { if (++nmblks > nmblks_max) /* Maximalwert fuer die Statistik */ nmblks_max = nmblks; (p = &portpar[port = lnkpoi->liport])->nmblks++; if (!multiconn(port, lnkpoi->realid)) /* erster Connect? */ { p->nmbstn++; autopers(port); /* Port-Parameter anpassen */ } relink(ulink((LEHEAD *)lnkpoi), /* Link aus der frei-Liste nehmen */ (LEHEAD *)l2actl[lnkpoi->liport].tail); getMCs(); /* Veraenderung DAMA melden */ } } /* End of src/l2stma.c */