Lines Matching defs:f
93 #define PROTO_NAME(f) ((f)->callbacks->proto_name)
104 fsm_init(fsm *f)
106 f->state = LS_INITIAL;
107 f->flags = 0;
108 f->id = 0; /* XXX Start with random id? */
109 f->timeouttime = FSM_DEFTIMEOUT;
110 f->maxconfreqtransmits = FSM_DEFMAXCONFREQS;
111 f->maxtermtransmits = FSM_DEFMAXTERMREQS;
112 f->maxnakloops = FSM_DEFMAXNAKLOOPS;
113 f->term_reason_len = 0;
121 fsm_lowerup(fsm *f)
123 int oldState = f->state;
127 switch( f->state ) {
129 f->state = LS_CLOSED;
133 if( f->flags & OPT_SILENT ) {
134 f->state = LS_STOPPED;
137 fsm_sconfreq(f, 0);
138 f->state = LS_REQSENT;
144 PROTO_NAME(f), f->state, ppperr_strerr[f->state]));
148 PROTO_NAME(f), oldState, ppperr_strerr[oldState], f->state, ppperr_strerr[f->state]));
158 fsm_lowerdown(fsm *f)
160 int oldState = f->state;
164 switch( f->state ) {
166 f->state = LS_INITIAL;
170 f->state = LS_STARTING;
171 if( f->callbacks->starting ) {
172 (*f->callbacks->starting)(f);
177 f->state = LS_INITIAL;
178 UNTIMEOUT(fsm_timeout, f); /* Cancel timeout */
185 f->state = LS_STARTING;
186 UNTIMEOUT(fsm_timeout, f); /* Cancel timeout */
190 if( f->callbacks->down ) {
191 (*f->callbacks->down)(f);
193 f->state = LS_STARTING;
198 PROTO_NAME(f), f->state, ppperr_strerr[f->state]));
202 PROTO_NAME(f), oldState, ppperr_strerr[oldState], f->state, ppperr_strerr[f->state]));
210 fsm_open(fsm *f)
212 int oldState = f->state;
216 switch( f->state ) {
218 f->state = LS_STARTING;
219 if( f->callbacks->starting ) {
220 (*f->callbacks->starting)(f);
225 if( f->flags & OPT_SILENT ) {
226 f->state = LS_STOPPED;
229 fsm_sconfreq(f, 0);
230 f->state = LS_REQSENT;
235 f->state = LS_STOPPING;
239 if( f->flags & OPT_RESTART ) {
240 fsm_lowerdown(f);
241 fsm_lowerup(f);
247 PROTO_NAME(f), oldState, ppperr_strerr[oldState], f->state, ppperr_strerr[f->state]));
258 terminate_layer(fsm *f, int nextstate)
271 fsm_close(fsm *f, char *reason)
273 int oldState = f->state;
277 f->term_reason = reason;
278 f->term_reason_len = (reason == NULL ? 0 : (int)strlen(reason));
279 switch( f->state ) {
281 f->state = LS_INITIAL;
284 f->state = LS_CLOSED;
287 f->state = LS_CLOSING;
294 if( f->state != LS_OPENED ) {
295 UNTIMEOUT(fsm_timeout, f); /* Cancel timeout */
296 } else if( f->callbacks->down ) {
297 (*f->callbacks->down)(f); /* Inform upper layers we're down */
300 f->retransmits = f->maxtermtransmits;
301 fsm_sdata(f, TERMREQ, f->reqid = ++f->id,
302 (u_char *) f->term_reason, f->term_reason_len);
303 TIMEOUT(fsm_timeout, f, f->timeouttime);
304 --f->retransmits;
306 f->state = LS_CLOSING;
311 PROTO_NAME(f), reason, oldState, ppperr_strerr[oldState], f->state, ppperr_strerr[f->state]));
321 fsm *f = (fsm *) arg;
323 switch (f->state) {
326 if( f->retransmits <= 0 ) {
328 PROTO_NAME(f), f->state, ppperr_strerr[f->state]));
332 f->state = (f->state == LS_CLOSING)? LS_CLOSED: LS_STOPPED;
333 if( f->callbacks->finished ) {
334 (*f->callbacks->finished)(f);
338 PROTO_NAME(f), f->state, ppperr_strerr[f->state]));
340 fsm_sdata(f, TERMREQ, f->reqid = ++f->id,
341 (u_char *) f->term_reason, f->term_reason_len);
342 TIMEOUT(fsm_timeout, f, f->timeouttime);
343 --f->retransmits;
350 if (f->retransmits <= 0) {
352 PROTO_NAME(f), f->state, ppperr_strerr[f->state]));
353 f->state = LS_STOPPED;
354 if( (f->flags & OPT_PASSIVE) == 0 && f->callbacks->finished ) {
355 (*f->callbacks->finished)(f);
359 PROTO_NAME(f), f->state, ppperr_strerr[f->state]));
361 if (f->callbacks->retransmit) {
362 (*f->callbacks->retransmit)(f);
364 fsm_sconfreq(f, 1); /* Re-send Configure-Request */
365 if( f->state == LS_ACKRCVD ) {
366 f->state = LS_REQSENT;
373 PROTO_NAME(f), f->state, ppperr_strerr[f->state]));
382 fsm_input(fsm *f, u_char *inpacket, int l)
394 f->protocol));
402 f->protocol));
407 f->protocol));
412 if( f->state == LS_INITIAL || f->state == LS_STARTING ) {
414 f->protocol, f->state, ppperr_strerr[f->state]));
417 FSMDEBUG(LOG_INFO, ("fsm_input(%s):%d,%d,%d\n", PROTO_NAME(f), code, id, l));
423 fsm_rconfreq(f, id, inp, len);
427 fsm_rconfack(f, id, inp, len);
432 fsm_rconfnakrej(f, code, id, inp, len);
436 fsm_rtermreq(f, id, inp, len);
440 fsm_rtermack(f);
444 fsm_rcoderej(f, inp, len);
448 FSMDEBUG(LOG_INFO, ("fsm_input(%s): default: \n", PROTO_NAME(f)));
449 if( !f->callbacks->extcode ||
450 !(*f->callbacks->extcode)(f, code, id, inp, len) ) {
451 fsm_sdata(f, CODEREJ, ++f->id, inpacket, len + HEADERLEN);
462 fsm_rconfreq(fsm *f, u_char id, u_char *inp, int len)
467 PROTO_NAME(f), id, f->state, ppperr_strerr[f->state]));
468 switch( f->state ) {
471 fsm_sdata(f, TERMACK, id, NULL, 0);
479 if( f->callbacks->down ) {
480 (*f->callbacks->down)(f); /* Inform upper layers */
482 fsm_sconfreq(f, 0); /* Send initial Configure-Request */
487 fsm_sconfreq(f, 0); /* Send initial Configure-Request */
488 f->state = LS_REQSENT;
496 if (f->callbacks->reqci) { /* Check CI */
497 reject_if_disagree = (f->nakloops >= f->maxnakloops);
498 code = (*f->callbacks->reqci)(f, inp, &len, reject_if_disagree);
506 fsm_sdata(f, (u_char)code, id, inp, len);
509 if (f->state == LS_ACKRCVD) {
510 UNTIMEOUT(fsm_timeout, f); /* Cancel timeout */
511 f->state = LS_OPENED;
512 if (f->callbacks->up) {
513 (*f->callbacks->up)(f); /* Inform upper layers */
516 f->state = LS_ACKSENT;
518 f->nakloops = 0;
521 if (f->state != LS_ACKRCVD) {
522 f->state = LS_REQSENT;
525 ++f->nakloops;
535 fsm_rconfack(fsm *f, int id, u_char *inp, int len)
538 PROTO_NAME(f), id, f->state, ppperr_strerr[f->state]));
540 if (id != f->reqid || f->seen_ack) { /* Expected id? */
543 if( !(f->callbacks->ackci? (*f->callbacks->ackci)(f, inp, len): (len == 0)) ) {
546 PROTO_NAME(f), len));
549 f->seen_ack = 1;
551 switch (f->state) {
554 fsm_sdata(f, TERMACK, (u_char)id, NULL, 0);
558 f->state = LS_ACKRCVD;
559 f->retransmits = f->maxconfreqtransmits;
564 UNTIMEOUT(fsm_timeout, f); /* Cancel timeout */
565 fsm_sconfreq(f, 0);
566 f->state = LS_REQSENT;
570 UNTIMEOUT(fsm_timeout, f); /* Cancel timeout */
571 f->state = LS_OPENED;
572 f->retransmits = f->maxconfreqtransmits;
573 if (f->callbacks->up) {
574 (*f->callbacks->up)(f); /* Inform upper layers */
580 if (f->callbacks->down) {
581 (*f->callbacks->down)(f); /* Inform upper layers */
583 fsm_sconfreq(f, 0); /* Send initial Configure-Request */
584 f->state = LS_REQSENT;
594 fsm_rconfnakrej(fsm *f, int code, int id, u_char *inp, int len)
600 PROTO_NAME(f), id, f->state, ppperr_strerr[f->state]));
602 if (id != f->reqid || f->seen_ack) { /* Expected id? */
605 proc = (code == CONFNAK)? f->callbacks->nakci: f->callbacks->rejci;
606 if (!proc || !((ret = proc(f, inp, len)))) {
609 PROTO_NAME(f), (code==CONFNAK? "Nak": "reject"), len));
612 f->seen_ack = 1;
614 switch (f->state) {
617 fsm_sdata(f, TERMACK, (u_char)id, NULL, 0);
623 UNTIMEOUT(fsm_timeout, f); /* Cancel timeout */
625 f->state = LS_STOPPED; /* kludge for stopping CCP */
627 fsm_sconfreq(f, 0); /* Send Configure-Request */
633 UNTIMEOUT(fsm_timeout, f); /* Cancel timeout */
634 fsm_sconfreq(f, 0);
635 f->state = LS_REQSENT;
640 if (f->callbacks->down) {
641 (*f->callbacks->down)(f); /* Inform upper layers */
643 fsm_sconfreq(f, 0); /* Send initial Configure-Request */
644 f->state = LS_REQSENT;
654 fsm_rtermreq(fsm *f, int id, u_char *p, int len)
659 PROTO_NAME(f), id, f->state, ppperr_strerr[f->state]));
661 switch (f->state) {
664 f->state = LS_REQSENT; /* Start over but keep trying */
669 FSMDEBUG(LOG_INFO, ("%s terminated by peer (%p)\n", PROTO_NAME(f), p));
671 FSMDEBUG(LOG_INFO, ("%s terminated by peer\n", PROTO_NAME(f)));
673 if (f->callbacks->down) {
674 (*f->callbacks->down)(f); /* Inform upper layers */
676 f->retransmits = 0;
677 f->state = LS_STOPPING;
678 TIMEOUT(fsm_timeout, f, f->timeouttime);
682 fsm_sdata(f, TERMACK, (u_char)id, NULL, 0);
690 fsm_rtermack(fsm *f)
693 PROTO_NAME(f), f->state, ppperr_strerr[f->state]));
695 switch (f->state) {
697 UNTIMEOUT(fsm_timeout, f);
698 f->state = LS_CLOSED;
699 if( f->callbacks->finished ) {
700 (*f->callbacks->finished)(f);
705 UNTIMEOUT(fsm_timeout, f);
706 f->state = LS_STOPPED;
707 if( f->callbacks->finished ) {
708 (*f->callbacks->finished)(f);
713 f->state = LS_REQSENT;
717 if (f->callbacks->down) {
718 (*f->callbacks->down)(f); /* Inform upper layers */
720 fsm_sconfreq(f, 0);
724 PROTO_NAME(f), f->state, ppperr_strerr[f->state]));
733 fsm_rcoderej(fsm *f, u_char *inp, int len)
738 PROTO_NAME(f), f->state, ppperr_strerr[f->state]));
747 PROTO_NAME(f), code, id));
749 if( f->state == LS_ACKRCVD ) {
750 f->state = LS_REQSENT;
761 fsm_protreject(fsm *f)
763 switch( f->state ) {
765 UNTIMEOUT(fsm_timeout, f); /* Cancel timeout */
768 f->state = LS_CLOSED;
769 if( f->callbacks->finished ) {
770 (*f->callbacks->finished)(f);
778 UNTIMEOUT(fsm_timeout, f); /* Cancel timeout */
781 f->state = LS_STOPPED;
782 if( f->callbacks->finished ) {
783 (*f->callbacks->finished)(f);
788 if( f->callbacks->down ) {
789 (*f->callbacks->down)(f);
792 f->retransmits = f->maxtermtransmits;
793 fsm_sdata(f, TERMREQ, f->reqid = ++f->id,
794 (u_char *) f->term_reason, f->term_reason_len);
795 TIMEOUT(fsm_timeout, f, f->timeouttime);
796 --f->retransmits;
798 f->state = LS_STOPPING;
803 PROTO_NAME(f), f->state, ppperr_strerr[f->state]));
812 fsm_sconfreq(fsm *f, int retransmit)
817 if( f->state != LS_REQSENT && f->state != LS_ACKRCVD && f->state != LS_ACKSENT ) {
819 if( f->callbacks->resetci ) {
820 (*f->callbacks->resetci)(f);
822 f->nakloops = 0;
827 f->retransmits = f->maxconfreqtransmits;
828 f->reqid = ++f->id;
831 f->seen_ack = 0;
836 outp = outpacket_buf[f->unit] + PPP_HDRLEN + HEADERLEN;
837 if( f->callbacks->cilen && f->callbacks->addci ) {
838 cilen = (*f->callbacks->cilen)(f);
839 if( cilen > peer_mru[f->unit] - (int)HEADERLEN ) {
840 cilen = peer_mru[f->unit] - HEADERLEN;
842 if (f->callbacks->addci) {
843 (*f->callbacks->addci)(f, outp, &cilen);
850 fsm_sdata(f, CONFREQ, f->reqid, outp, cilen);
853 --f->retransmits;
854 TIMEOUT(fsm_timeout, f, f->timeouttime);
857 PROTO_NAME(f), f->reqid));
867 fsm_sdata( fsm *f, u_char code, u_char id, u_char *data, int datalen)
873 outp = outpacket_buf[f->unit];
874 if (datalen > peer_mru[f->unit] - (int)HEADERLEN) {
875 datalen = peer_mru[f->unit] - HEADERLEN;
881 MAKEHEADER(outp, f->protocol);
885 pppWrite(f->unit, outpacket_buf[f->unit], outlen + PPP_HDRLEN);
887 PROTO_NAME(f), code, id, outlen));