Minor changes: coding style (tabs, ident, etc...).

This commit is contained in:
fbernon 2007-12-02 23:24:59 +00:00
parent 6bce832060
commit 325d6e7cfa
3 changed files with 704 additions and 683 deletions

View File

@ -126,7 +126,8 @@ int peer_mru[NUM_PPP];
* *
* Initialize fsm state. * Initialize fsm state.
*/ */
void fsm_init(fsm *f) void
fsm_init(fsm *f)
{ {
f->state = LS_INITIAL; f->state = LS_INITIAL;
f->flags = 0; f->flags = 0;
@ -142,19 +143,20 @@ void fsm_init(fsm *f)
/* /*
* fsm_lowerup - The lower layer is up. * fsm_lowerup - The lower layer is up.
*/ */
void fsm_lowerup(fsm *f) void
fsm_lowerup(fsm *f)
{ {
int oldState = f->state; int oldState = f->state;
switch( f->state ){ switch( f->state ) {
case LS_INITIAL: case LS_INITIAL:
f->state = LS_CLOSED; f->state = LS_CLOSED;
break; break;
case LS_STARTING: case LS_STARTING:
if( f->flags & OPT_SILENT ) if( f->flags & OPT_SILENT ) {
f->state = LS_STOPPED; f->state = LS_STOPPED;
else { } else {
/* Send an initial configure-request */ /* Send an initial configure-request */
fsm_sconfreq(f, 0); fsm_sconfreq(f, 0);
f->state = LS_REQSENT; f->state = LS_REQSENT;
@ -176,19 +178,21 @@ void fsm_lowerup(fsm *f)
* *
* Cancel all timeouts and inform upper layers. * Cancel all timeouts and inform upper layers.
*/ */
void fsm_lowerdown(fsm *f) void
fsm_lowerdown(fsm *f)
{ {
int oldState = f->state; int oldState = f->state;
switch( f->state ){ switch( f->state ) {
case LS_CLOSED: case LS_CLOSED:
f->state = LS_INITIAL; f->state = LS_INITIAL;
break; break;
case LS_STOPPED: case LS_STOPPED:
f->state = LS_STARTING; f->state = LS_STARTING;
if( f->callbacks->starting ) if( f->callbacks->starting ) {
(*f->callbacks->starting)(f); (*f->callbacks->starting)(f);
}
break; break;
case LS_CLOSING: case LS_CLOSING:
@ -205,8 +209,9 @@ void fsm_lowerdown(fsm *f)
break; break;
case LS_OPENED: case LS_OPENED:
if( f->callbacks->down ) if( f->callbacks->down ) {
(*f->callbacks->down)(f); (*f->callbacks->down)(f);
}
f->state = LS_STARTING; f->state = LS_STARTING;
break; break;
@ -223,21 +228,23 @@ void fsm_lowerdown(fsm *f)
/* /*
* fsm_open - Link is allowed to come up. * fsm_open - Link is allowed to come up.
*/ */
void fsm_open(fsm *f) void
fsm_open(fsm *f)
{ {
int oldState = f->state; int oldState = f->state;
switch( f->state ){ switch( f->state ) {
case LS_INITIAL: case LS_INITIAL:
f->state = LS_STARTING; f->state = LS_STARTING;
if( f->callbacks->starting ) if( f->callbacks->starting ) {
(*f->callbacks->starting)(f); (*f->callbacks->starting)(f);
}
break; break;
case LS_CLOSED: case LS_CLOSED:
if( f->flags & OPT_SILENT ) if( f->flags & OPT_SILENT ) {
f->state = LS_STOPPED; f->state = LS_STOPPED;
else { } else {
/* Send an initial configure-request */ /* Send an initial configure-request */
fsm_sconfreq(f, 0); fsm_sconfreq(f, 0);
f->state = LS_REQSENT; f->state = LS_REQSENT;
@ -249,7 +256,7 @@ void fsm_open(fsm *f)
/* fall through */ /* fall through */
case LS_STOPPED: case LS_STOPPED:
case LS_OPENED: case LS_OPENED:
if( f->flags & OPT_RESTART ){ if( f->flags & OPT_RESTART ) {
fsm_lowerdown(f); fsm_lowerdown(f);
fsm_lowerup(f); fsm_lowerup(f);
} }
@ -267,13 +274,14 @@ void fsm_open(fsm *f)
* Cancel timeouts and either initiate close or possibly go directly to * Cancel timeouts and either initiate close or possibly go directly to
* the LS_CLOSED state. * the LS_CLOSED state.
*/ */
void fsm_close(fsm *f, char *reason) void
fsm_close(fsm *f, char *reason)
{ {
int oldState = f->state; int oldState = f->state;
f->term_reason = reason; f->term_reason = reason;
f->term_reason_len = (reason == NULL? 0: strlen(reason)); f->term_reason_len = (reason == NULL? 0: strlen(reason));
switch( f->state ){ switch( f->state ) {
case LS_STARTING: case LS_STARTING:
f->state = LS_INITIAL; f->state = LS_INITIAL;
break; break;
@ -288,11 +296,11 @@ void fsm_close(fsm *f, char *reason)
case LS_ACKRCVD: case LS_ACKRCVD:
case LS_ACKSENT: case LS_ACKSENT:
case LS_OPENED: case LS_OPENED:
if( f->state != LS_OPENED ) if( f->state != LS_OPENED ) {
UNTIMEOUT(fsm_timeout, f); /* Cancel timeout */ UNTIMEOUT(fsm_timeout, f); /* Cancel timeout */
else if( f->callbacks->down ) } else if( f->callbacks->down ) {
(*f->callbacks->down)(f); /* Inform upper layers we're down */ (*f->callbacks->down)(f); /* Inform upper layers we're down */
}
/* Init restart counter, send Terminate-Request */ /* Init restart counter, send Terminate-Request */
f->retransmits = f->maxtermtransmits; f->retransmits = f->maxtermtransmits;
fsm_sdata(f, TERMREQ, f->reqid = ++f->id, fsm_sdata(f, TERMREQ, f->reqid = ++f->id,
@ -314,23 +322,20 @@ void fsm_close(fsm *f, char *reason)
* *
* Used for all packets sent to our peer by this module. * Used for all packets sent to our peer by this module.
*/ */
void fsm_sdata( void
fsm *f, fsm_sdata( fsm *f, u_char code, u_char id, u_char *data, int datalen)
u_char code,
u_char id,
u_char *data,
int datalen
)
{ {
u_char *outp; u_char *outp;
int outlen; int outlen;
/* Adjust length to be smaller than MTU */ /* Adjust length to be smaller than MTU */
outp = outpacket_buf[f->unit]; outp = outpacket_buf[f->unit];
if (datalen > peer_mru[f->unit] - (int)HEADERLEN) if (datalen > peer_mru[f->unit] - (int)HEADERLEN) {
datalen = peer_mru[f->unit] - HEADERLEN; datalen = peer_mru[f->unit] - HEADERLEN;
if (datalen && data != outp + PPP_HDRLEN + HEADERLEN) }
if (datalen && data != outp + PPP_HDRLEN + HEADERLEN) {
BCOPY(data, outp + PPP_HDRLEN + HEADERLEN, datalen); BCOPY(data, outp + PPP_HDRLEN + HEADERLEN, datalen);
}
outlen = datalen + HEADERLEN; outlen = datalen + HEADERLEN;
MAKEHEADER(outp, f->protocol); MAKEHEADER(outp, f->protocol);
PUTCHAR(code, outp); PUTCHAR(code, outp);
@ -345,7 +350,8 @@ void fsm_sdata(
/* /*
* fsm_input - Input packet. * fsm_input - Input packet.
*/ */
void fsm_input(fsm *f, u_char *inpacket, int l) void
fsm_input(fsm *f, u_char *inpacket, int l)
{ {
u_char *inp = inpacket; u_char *inp = inpacket;
u_char code, id; u_char code, id;
@ -375,7 +381,7 @@ void fsm_input(fsm *f, u_char *inpacket, int l)
} }
len -= HEADERLEN; /* subtract header length */ len -= HEADERLEN; /* subtract header length */
if( f->state == LS_INITIAL || f->state == LS_STARTING ){ if( f->state == LS_INITIAL || f->state == LS_STARTING ) {
FSMDEBUG((LOG_INFO, "fsm_input(%x): Rcvd packet in state %d (%s).\n", FSMDEBUG((LOG_INFO, "fsm_input(%x): Rcvd packet in state %d (%s).\n",
f->protocol, f->state, ppperr_strerr[f->state])); f->protocol, f->state, ppperr_strerr[f->state]));
return; return;
@ -411,9 +417,10 @@ void fsm_input(fsm *f, u_char *inpacket, int l)
break; break;
default: default:
if( !f->callbacks->extcode if( !f->callbacks->extcode ||
|| !(*f->callbacks->extcode)(f, code, id, inp, len) ) !(*f->callbacks->extcode)(f, code, id, inp, len) ) {
fsm_sdata(f, CODEREJ, ++f->id, inpacket, len + HEADERLEN); fsm_sdata(f, CODEREJ, ++f->id, inpacket, len + HEADERLEN);
}
break; break;
} }
} }
@ -424,16 +431,18 @@ void fsm_input(fsm *f, u_char *inpacket, int l)
* *
* Treat this as a catastrophic error (RXJ-). * Treat this as a catastrophic error (RXJ-).
*/ */
void fsm_protreject(fsm *f) void
fsm_protreject(fsm *f)
{ {
switch( f->state ){ switch( f->state ) {
case LS_CLOSING: case LS_CLOSING:
UNTIMEOUT(fsm_timeout, f); /* Cancel timeout */ UNTIMEOUT(fsm_timeout, f); /* Cancel timeout */
/* fall through */ /* fall through */
case LS_CLOSED: case LS_CLOSED:
f->state = LS_CLOSED; f->state = LS_CLOSED;
if( f->callbacks->finished ) if( f->callbacks->finished ) {
(*f->callbacks->finished)(f); (*f->callbacks->finished)(f);
}
break; break;
case LS_STOPPING: case LS_STOPPING:
@ -444,14 +453,15 @@ void fsm_protreject(fsm *f)
/* fall through */ /* fall through */
case LS_STOPPED: case LS_STOPPED:
f->state = LS_STOPPED; f->state = LS_STOPPED;
if( f->callbacks->finished ) if( f->callbacks->finished ) {
(*f->callbacks->finished)(f); (*f->callbacks->finished)(f);
}
break; break;
case LS_OPENED: case LS_OPENED:
if( f->callbacks->down ) if( f->callbacks->down ) {
(*f->callbacks->down)(f); (*f->callbacks->down)(f);
}
/* Init restart counter, send Terminate-Request */ /* Init restart counter, send Terminate-Request */
f->retransmits = f->maxtermtransmits; f->retransmits = f->maxtermtransmits;
fsm_sdata(f, TERMREQ, f->reqid = ++f->id, fsm_sdata(f, TERMREQ, f->reqid = ++f->id,
@ -479,22 +489,24 @@ void fsm_protreject(fsm *f)
/* /*
* fsm_timeout - Timeout expired. * fsm_timeout - Timeout expired.
*/ */
static void fsm_timeout(void *arg) static void
fsm_timeout(void *arg)
{ {
fsm *f = (fsm *) arg; fsm *f = (fsm *) arg;
switch (f->state) { switch (f->state) {
case LS_CLOSING: case LS_CLOSING:
case LS_STOPPING: case LS_STOPPING:
if( f->retransmits <= 0 ){ if( f->retransmits <= 0 ) {
FSMDEBUG((LOG_WARNING, "%s: timeout sending Terminate-Request state=%d (%s)\n", FSMDEBUG((LOG_WARNING, "%s: timeout sending Terminate-Request state=%d (%s)\n",
PROTO_NAME(f), f->state, ppperr_strerr[f->state])); PROTO_NAME(f), f->state, ppperr_strerr[f->state]));
/* /*
* We've waited for an ack long enough. Peer probably heard us. * We've waited for an ack long enough. Peer probably heard us.
*/ */
f->state = (f->state == LS_CLOSING)? LS_CLOSED: LS_STOPPED; f->state = (f->state == LS_CLOSING)? LS_CLOSED: LS_STOPPED;
if( f->callbacks->finished ) if( f->callbacks->finished ) {
(*f->callbacks->finished)(f); (*f->callbacks->finished)(f);
}
} else { } else {
FSMDEBUG((LOG_WARNING, "%s: timeout resending Terminate-Requests state=%d (%s)\n", FSMDEBUG((LOG_WARNING, "%s: timeout resending Terminate-Requests state=%d (%s)\n",
PROTO_NAME(f), f->state, ppperr_strerr[f->state])); PROTO_NAME(f), f->state, ppperr_strerr[f->state]));
@ -513,19 +525,21 @@ static void fsm_timeout(void *arg)
FSMDEBUG((LOG_WARNING, "%s: timeout sending Config-Requests state=%d (%s)\n", FSMDEBUG((LOG_WARNING, "%s: timeout sending Config-Requests state=%d (%s)\n",
PROTO_NAME(f), f->state, ppperr_strerr[f->state])); PROTO_NAME(f), f->state, ppperr_strerr[f->state]));
f->state = LS_STOPPED; f->state = LS_STOPPED;
if( (f->flags & OPT_PASSIVE) == 0 && f->callbacks->finished ) if( (f->flags & OPT_PASSIVE) == 0 && f->callbacks->finished ) {
(*f->callbacks->finished)(f); (*f->callbacks->finished)(f);
}
} else { } else {
FSMDEBUG((LOG_WARNING, "%s: timeout resending Config-Request state=%d (%s)\n", FSMDEBUG((LOG_WARNING, "%s: timeout resending Config-Request state=%d (%s)\n",
PROTO_NAME(f), f->state, ppperr_strerr[f->state])); PROTO_NAME(f), f->state, ppperr_strerr[f->state]));
/* Retransmit the configure-request */ /* Retransmit the configure-request */
if (f->callbacks->retransmit) if (f->callbacks->retransmit) {
(*f->callbacks->retransmit)(f); (*f->callbacks->retransmit)(f);
}
fsm_sconfreq(f, 1); /* Re-send Configure-Request */ fsm_sconfreq(f, 1); /* Re-send Configure-Request */
if( f->state == LS_ACKRCVD ) if( f->state == LS_ACKRCVD ) {
f->state = LS_REQSENT; f->state = LS_REQSENT;
} }
}
break; break;
default: default:
@ -538,13 +552,14 @@ static void fsm_timeout(void *arg)
/* /*
* fsm_rconfreq - Receive Configure-Request. * fsm_rconfreq - Receive Configure-Request.
*/ */
static void fsm_rconfreq(fsm *f, u_char id, u_char *inp, int len) static void
fsm_rconfreq(fsm *f, u_char id, u_char *inp, int len)
{ {
int code, reject_if_disagree; int code, reject_if_disagree;
FSMDEBUG((LOG_INFO, "fsm_rconfreq(%s): Rcvd id %d state=%d (%s)\n", FSMDEBUG((LOG_INFO, "fsm_rconfreq(%s): Rcvd id %d state=%d (%s)\n",
PROTO_NAME(f), id, f->state, ppperr_strerr[f->state])); PROTO_NAME(f), id, f->state, ppperr_strerr[f->state]));
switch( f->state ){ switch( f->state ) {
case LS_CLOSED: case LS_CLOSED:
/* Go away, we're closed */ /* Go away, we're closed */
fsm_sdata(f, TERMACK, id, NULL, 0); fsm_sdata(f, TERMACK, id, NULL, 0);
@ -555,8 +570,9 @@ static void fsm_rconfreq(fsm *f, u_char id, u_char *inp, int len)
case LS_OPENED: case LS_OPENED:
/* Go down and restart negotiation */ /* Go down and restart negotiation */
if( f->callbacks->down ) if( f->callbacks->down ) {
(*f->callbacks->down)(f); /* Inform upper layers */ (*f->callbacks->down)(f); /* Inform upper layers */
}
fsm_sconfreq(f, 0); /* Send initial Configure-Request */ fsm_sconfreq(f, 0); /* Send initial Configure-Request */
break; break;
@ -571,14 +587,14 @@ static void fsm_rconfreq(fsm *f, u_char id, u_char *inp, int len)
* Pass the requested configuration options * Pass the requested configuration options
* to protocol-specific code for checking. * to protocol-specific code for checking.
*/ */
if (f->callbacks->reqci){ /* Check CI */ if (f->callbacks->reqci) { /* Check CI */
reject_if_disagree = (f->nakloops >= f->maxnakloops); reject_if_disagree = (f->nakloops >= f->maxnakloops);
code = (*f->callbacks->reqci)(f, inp, &len, reject_if_disagree); code = (*f->callbacks->reqci)(f, inp, &len, reject_if_disagree);
} } else if (len) {
else if (len)
code = CONFREJ; /* Reject all CI */ code = CONFREJ; /* Reject all CI */
else } else {
code = CONFACK; code = CONFACK;
}
/* send the Ack, Nak or Rej to the peer */ /* send the Ack, Nak or Rej to the peer */
fsm_sdata(f, (u_char)code, id, inp, len); fsm_sdata(f, (u_char)code, id, inp, len);
@ -587,35 +603,38 @@ static void fsm_rconfreq(fsm *f, u_char id, u_char *inp, int len)
if (f->state == LS_ACKRCVD) { if (f->state == LS_ACKRCVD) {
UNTIMEOUT(fsm_timeout, f); /* Cancel timeout */ UNTIMEOUT(fsm_timeout, f); /* Cancel timeout */
f->state = LS_OPENED; f->state = LS_OPENED;
if (f->callbacks->up) if (f->callbacks->up) {
(*f->callbacks->up)(f); /* Inform upper layers */ (*f->callbacks->up)(f); /* Inform upper layers */
} }
else } else {
f->state = LS_ACKSENT; f->state = LS_ACKSENT;
f->nakloops = 0;
} }
else { f->nakloops = 0;
} else {
/* we sent CONFACK or CONFREJ */ /* we sent CONFACK or CONFREJ */
if (f->state != LS_ACKRCVD) if (f->state != LS_ACKRCVD) {
f->state = LS_REQSENT; f->state = LS_REQSENT;
if( code == CONFNAK ) }
if( code == CONFNAK ) {
++f->nakloops; ++f->nakloops;
} }
}
} }
/* /*
* fsm_rconfack - Receive Configure-Ack. * fsm_rconfack - Receive Configure-Ack.
*/ */
static void fsm_rconfack(fsm *f, int id, u_char *inp, int len) static void
fsm_rconfack(fsm *f, int id, u_char *inp, int len)
{ {
FSMDEBUG((LOG_INFO, "fsm_rconfack(%s): Rcvd id %d state=%d (%s)\n", FSMDEBUG((LOG_INFO, "fsm_rconfack(%s): Rcvd id %d state=%d (%s)\n",
PROTO_NAME(f), id, f->state, ppperr_strerr[f->state])); PROTO_NAME(f), id, f->state, ppperr_strerr[f->state]));
if (id != f->reqid || f->seen_ack) /* Expected id? */ if (id != f->reqid || f->seen_ack) { /* Expected id? */
return; /* Nope, toss... */ return; /* Nope, toss... */
if( !(f->callbacks->ackci? (*f->callbacks->ackci)(f, inp, len): }
(len == 0)) ){ if( !(f->callbacks->ackci? (*f->callbacks->ackci)(f, inp, len): (len == 0)) ) {
/* Ack is bad - ignore it */ /* Ack is bad - ignore it */
FSMDEBUG((LOG_INFO, "%s: received bad Ack (length %d)\n", FSMDEBUG((LOG_INFO, "%s: received bad Ack (length %d)\n",
PROTO_NAME(f), len)); PROTO_NAME(f), len));
@ -645,14 +664,16 @@ static void fsm_rconfack(fsm *f, int id, u_char *inp, int len)
UNTIMEOUT(fsm_timeout, f); /* Cancel timeout */ UNTIMEOUT(fsm_timeout, f); /* Cancel timeout */
f->state = LS_OPENED; f->state = LS_OPENED;
f->retransmits = f->maxconfreqtransmits; f->retransmits = f->maxconfreqtransmits;
if (f->callbacks->up) if (f->callbacks->up) {
(*f->callbacks->up)(f); /* Inform upper layers */ (*f->callbacks->up)(f); /* Inform upper layers */
}
break; break;
case LS_OPENED: case LS_OPENED:
/* Go down and restart negotiation */ /* Go down and restart negotiation */
if (f->callbacks->down) if (f->callbacks->down) {
(*f->callbacks->down)(f); /* Inform upper layers */ (*f->callbacks->down)(f); /* Inform upper layers */
}
fsm_sconfreq(f, 0); /* Send initial Configure-Request */ fsm_sconfreq(f, 0); /* Send initial Configure-Request */
f->state = LS_REQSENT; f->state = LS_REQSENT;
break; break;
@ -663,7 +684,8 @@ static void fsm_rconfack(fsm *f, int id, u_char *inp, int len)
/* /*
* fsm_rconfnakrej - Receive Configure-Nak or Configure-Reject. * fsm_rconfnakrej - Receive Configure-Nak or Configure-Reject.
*/ */
static void fsm_rconfnakrej(fsm *f, int code, int id, u_char *inp, int len) static void
fsm_rconfnakrej(fsm *f, int code, int id, u_char *inp, int len)
{ {
int (*proc) (fsm *, u_char *, int); int (*proc) (fsm *, u_char *, int);
int ret; int ret;
@ -671,8 +693,9 @@ static void fsm_rconfnakrej(fsm *f, int code, int id, u_char *inp, int len)
FSMDEBUG((LOG_INFO, "fsm_rconfnakrej(%s): Rcvd id %d state=%d (%s)\n", FSMDEBUG((LOG_INFO, "fsm_rconfnakrej(%s): Rcvd id %d state=%d (%s)\n",
PROTO_NAME(f), id, f->state, ppperr_strerr[f->state])); PROTO_NAME(f), id, f->state, ppperr_strerr[f->state]));
if (id != f->reqid || f->seen_ack) /* Expected id? */ if (id != f->reqid || f->seen_ack) { /* Expected id? */
return; /* Nope, toss... */ return; /* Nope, toss... */
}
proc = (code == CONFNAK)? f->callbacks->nakci: f->callbacks->rejci; proc = (code == CONFNAK)? f->callbacks->nakci: f->callbacks->rejci;
if (!proc || !((ret = proc(f, inp, len)))) { if (!proc || !((ret = proc(f, inp, len)))) {
/* Nak/reject is bad - ignore it */ /* Nak/reject is bad - ignore it */
@ -692,10 +715,11 @@ static void fsm_rconfnakrej(fsm *f, int code, int id, u_char *inp, int len)
case LS_ACKSENT: case LS_ACKSENT:
/* They didn't agree to what we wanted - try another request */ /* They didn't agree to what we wanted - try another request */
UNTIMEOUT(fsm_timeout, f); /* Cancel timeout */ UNTIMEOUT(fsm_timeout, f); /* Cancel timeout */
if (ret < 0) if (ret < 0) {
f->state = LS_STOPPED; /* kludge for stopping CCP */ f->state = LS_STOPPED; /* kludge for stopping CCP */
else } else {
fsm_sconfreq(f, 0); /* Send Configure-Request */ fsm_sconfreq(f, 0); /* Send Configure-Request */
}
break; break;
case LS_ACKRCVD: case LS_ACKRCVD:
@ -707,8 +731,9 @@ static void fsm_rconfnakrej(fsm *f, int code, int id, u_char *inp, int len)
case LS_OPENED: case LS_OPENED:
/* Go down and restart negotiation */ /* Go down and restart negotiation */
if (f->callbacks->down) if (f->callbacks->down) {
(*f->callbacks->down)(f); /* Inform upper layers */ (*f->callbacks->down)(f); /* Inform upper layers */
}
fsm_sconfreq(f, 0); /* Send initial Configure-Request */ fsm_sconfreq(f, 0); /* Send initial Configure-Request */
f->state = LS_REQSENT; f->state = LS_REQSENT;
break; break;
@ -719,7 +744,8 @@ static void fsm_rconfnakrej(fsm *f, int code, int id, u_char *inp, int len)
/* /*
* fsm_rtermreq - Receive Terminate-Req. * fsm_rtermreq - Receive Terminate-Req.
*/ */
static void fsm_rtermreq(fsm *f, int id, u_char *p, int len) static void
fsm_rtermreq(fsm *f, int id, u_char *p, int len)
{ {
FSMDEBUG((LOG_INFO, "fsm_rtermreq(%s): Rcvd id %d state=%d (%s)\n", FSMDEBUG((LOG_INFO, "fsm_rtermreq(%s): Rcvd id %d state=%d (%s)\n",
PROTO_NAME(f), id, f->state, ppperr_strerr[f->state])); PROTO_NAME(f), id, f->state, ppperr_strerr[f->state]));
@ -736,8 +762,9 @@ static void fsm_rtermreq(fsm *f, int id, u_char *p, int len)
} else { } else {
FSMDEBUG((LOG_INFO, "%s terminated by peer\n", PROTO_NAME(f))); FSMDEBUG((LOG_INFO, "%s terminated by peer\n", PROTO_NAME(f)));
} }
if (f->callbacks->down) if (f->callbacks->down) {
(*f->callbacks->down)(f); /* Inform upper layers */ (*f->callbacks->down)(f); /* Inform upper layers */
}
f->retransmits = 0; f->retransmits = 0;
f->state = LS_STOPPING; f->state = LS_STOPPING;
TIMEOUT(fsm_timeout, f, f->timeouttime); TIMEOUT(fsm_timeout, f, f->timeouttime);
@ -751,7 +778,8 @@ static void fsm_rtermreq(fsm *f, int id, u_char *p, int len)
/* /*
* fsm_rtermack - Receive Terminate-Ack. * fsm_rtermack - Receive Terminate-Ack.
*/ */
static void fsm_rtermack(fsm *f) static void
fsm_rtermack(fsm *f)
{ {
FSMDEBUG((LOG_INFO, "fsm_rtermack(%s): state=%d (%s)\n", FSMDEBUG((LOG_INFO, "fsm_rtermack(%s): state=%d (%s)\n",
PROTO_NAME(f), f->state, ppperr_strerr[f->state])); PROTO_NAME(f), f->state, ppperr_strerr[f->state]));
@ -760,14 +788,17 @@ static void fsm_rtermack(fsm *f)
case LS_CLOSING: case LS_CLOSING:
UNTIMEOUT(fsm_timeout, f); UNTIMEOUT(fsm_timeout, f);
f->state = LS_CLOSED; f->state = LS_CLOSED;
if( f->callbacks->finished ) if( f->callbacks->finished ) {
(*f->callbacks->finished)(f); (*f->callbacks->finished)(f);
}
break; break;
case LS_STOPPING: case LS_STOPPING:
UNTIMEOUT(fsm_timeout, f); UNTIMEOUT(fsm_timeout, f);
f->state = LS_STOPPED; f->state = LS_STOPPED;
if( f->callbacks->finished ) if( f->callbacks->finished ) {
(*f->callbacks->finished)(f); (*f->callbacks->finished)(f);
}
break; break;
case LS_ACKRCVD: case LS_ACKRCVD:
@ -775,8 +806,9 @@ static void fsm_rtermack(fsm *f)
break; break;
case LS_OPENED: case LS_OPENED:
if (f->callbacks->down) if (f->callbacks->down) {
(*f->callbacks->down)(f); /* Inform upper layers */ (*f->callbacks->down)(f); /* Inform upper layers */
}
fsm_sconfreq(f, 0); fsm_sconfreq(f, 0);
break; break;
} }
@ -786,7 +818,8 @@ static void fsm_rtermack(fsm *f)
/* /*
* fsm_rcoderej - Receive an Code-Reject. * fsm_rcoderej - Receive an Code-Reject.
*/ */
static void fsm_rcoderej(fsm *f, u_char *inp, int len) static void
fsm_rcoderej(fsm *f, u_char *inp, int len)
{ {
u_char code, id; u_char code, id;
@ -802,27 +835,30 @@ static void fsm_rcoderej(fsm *f, u_char *inp, int len)
FSMDEBUG((LOG_WARNING, "%s: Rcvd Code-Reject for code %d, id %d\n", FSMDEBUG((LOG_WARNING, "%s: Rcvd Code-Reject for code %d, id %d\n",
PROTO_NAME(f), code, id)); PROTO_NAME(f), code, id));
if( f->state == LS_ACKRCVD ) if( f->state == LS_ACKRCVD ) {
f->state = LS_REQSENT; f->state = LS_REQSENT;
}
} }
/* /*
* fsm_sconfreq - Send a Configure-Request. * fsm_sconfreq - Send a Configure-Request.
*/ */
static void fsm_sconfreq(fsm *f, int retransmit) static void
fsm_sconfreq(fsm *f, int retransmit)
{ {
u_char *outp; u_char *outp;
int cilen; int cilen;
if( f->state != LS_REQSENT && f->state != LS_ACKRCVD && f->state != LS_ACKSENT ){ if( f->state != LS_REQSENT && f->state != LS_ACKRCVD && f->state != LS_ACKSENT ) {
/* Not currently negotiating - reset options */ /* Not currently negotiating - reset options */
if( f->callbacks->resetci ) if( f->callbacks->resetci ) {
(*f->callbacks->resetci)(f); (*f->callbacks->resetci)(f);
}
f->nakloops = 0; f->nakloops = 0;
} }
if( !retransmit ){ if( !retransmit ) {
/* New request - reset retransmission counter, use new ID */ /* New request - reset retransmission counter, use new ID */
f->retransmits = f->maxconfreqtransmits; f->retransmits = f->maxconfreqtransmits;
f->reqid = ++f->id; f->reqid = ++f->id;
@ -834,14 +870,17 @@ static void fsm_sconfreq(fsm *f, int retransmit)
* Make up the request packet * Make up the request packet
*/ */
outp = outpacket_buf[f->unit] + PPP_HDRLEN + HEADERLEN; outp = outpacket_buf[f->unit] + PPP_HDRLEN + HEADERLEN;
if( f->callbacks->cilen && f->callbacks->addci ){ if( f->callbacks->cilen && f->callbacks->addci ) {
cilen = (*f->callbacks->cilen)(f); cilen = (*f->callbacks->cilen)(f);
if( cilen > peer_mru[f->unit] - (int)HEADERLEN ) if( cilen > peer_mru[f->unit] - (int)HEADERLEN ) {
cilen = peer_mru[f->unit] - HEADERLEN; cilen = peer_mru[f->unit] - HEADERLEN;
if (f->callbacks->addci) }
if (f->callbacks->addci) {
(*f->callbacks->addci)(f, outp, &cilen); (*f->callbacks->addci)(f, outp, &cilen);
} else }
} else {
cilen = 0; cilen = 0;
}
/* send the request to our peer */ /* send the request to our peer */
fsm_sdata(f, CONFREQ, f->reqid, outp, cilen); fsm_sdata(f, CONFREQ, f->reqid, outp, cilen);

View File

@ -48,7 +48,7 @@
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
* *
* $Id: fsm.h,v 1.2 2007/11/29 22:19:57 fbernon Exp $ * $Id: fsm.h,v 1.3 2007/12/02 23:24:59 fbernon Exp $
*/ */
#ifndef FSM_H #ifndef FSM_H
@ -88,7 +88,6 @@
#define LS_ACKSENT 8 /* We've sent a Config Ack */ #define LS_ACKSENT 8 /* We've sent a Config Ack */
#define LS_OPENED 9 /* Connection available */ #define LS_OPENED 9 /* Connection available */
/* /*
* Flags - indicate options controlling FSM operation * Flags - indicate options controlling FSM operation
*/ */
@ -112,46 +111,32 @@ typedef struct fsm {
u_char reqid; /* Current request id */ u_char reqid; /* Current request id */
u_char seen_ack; /* Have received valid Ack/Nak/Rej to Req */ u_char seen_ack; /* Have received valid Ack/Nak/Rej to Req */
int timeouttime; /* Timeout time in milliseconds */ int timeouttime; /* Timeout time in milliseconds */
int maxconfreqtransmits;/* Maximum Configure-Request transmissions */ int maxconfreqtransmits; /* Maximum Configure-Request transmissions */
int retransmits; /* Number of retransmissions left */ int retransmits; /* Number of retransmissions left */
int maxtermtransmits; /* Maximum Terminate-Request transmissions */ int maxtermtransmits; /* Maximum Terminate-Request transmissions */
int nakloops; /* Number of nak loops since last ack */ int nakloops; /* Number of nak loops since last ack */
int maxnakloops; /* Maximum number of nak loops tolerated */ int maxnakloops; /* Maximum number of nak loops tolerated */
struct fsm_callbacks* callbacks;/* Callback routines */ struct fsm_callbacks* callbacks; /* Callback routines */
char* term_reason; /* Reason for closing protocol */ char* term_reason; /* Reason for closing protocol */
int term_reason_len; /* Length of term_reason */ int term_reason_len; /* Length of term_reason */
} fsm; } fsm;
typedef struct fsm_callbacks { typedef struct fsm_callbacks {
void (*resetci) /* Reset our Configuration Information */ void (*resetci)(fsm*); /* Reset our Configuration Information */
(fsm*); int (*cilen)(fsm*); /* Length of our Configuration Information */
int (*cilen) /* Length of our Configuration Information */ void (*addci)(fsm*, u_char*, int*); /* Add our Configuration Information */
(fsm*); int (*ackci)(fsm*, u_char*, int); /* ACK our Configuration Information */
void (*addci) /* Add our Configuration Information */ int (*nakci)(fsm*, u_char*, int); /* NAK our Configuration Information */
(fsm*, u_char*, int*); int (*rejci)(fsm*, u_char*, int); /* Reject our Configuration Information */
int (*ackci) /* ACK our Configuration Information */ int (*reqci)(fsm*, u_char*, int*, int); /* Request peer's Configuration Information */
(fsm*, u_char*, int); void (*up)(fsm*); /* Called when fsm reaches LS_OPENED state */
int (*nakci) /* NAK our Configuration Information */ void (*down)(fsm*); /* Called when fsm leaves LS_OPENED state */
(fsm*, u_char*, int); void (*starting)(fsm*); /* Called when we want the lower layer */
int (*rejci) /* Reject our Configuration Information */ void (*finished)(fsm*); /* Called when we don't want the lower layer */
(fsm*, u_char*, int); void (*protreject)(int); /* Called when Protocol-Reject received */
int (*reqci) /* Request peer's Configuration Information */ void (*retransmit)(fsm*); /* Retransmission is necessary */
(fsm*, u_char*, int*, int); int (*extcode)(fsm*, int, u_char, u_char*, int); /* Called when unknown code received */
void (*up) /* Called when fsm reaches LS_OPENED state */
(fsm*);
void (*down) /* Called when fsm leaves LS_OPENED state */
(fsm*);
void (*starting) /* Called when we want the lower layer */
(fsm*);
void (*finished) /* Called when we don't want the lower layer */
(fsm*);
void (*protreject) /* Called when Protocol-Reject received */
(int);
void (*retransmit) /* Retransmission is necessary */
(fsm*);
int (*extcode) /* Called when unknown code received */
(fsm*, int, u_char, u_char*, int);
char *proto_name; /* String name for protocol (for messages) */ char *proto_name; /* String name for protocol (for messages) */
} fsm_callbacks; } fsm_callbacks;

View File

@ -41,13 +41,13 @@
************************/ ************************/
/* Trace levels. */ /* Trace levels. */
typedef enum { typedef enum {
LOG_CRITICAL = 0, LOG_CRITICAL = 0,
LOG_ERR = 1, LOG_ERR = 1,
LOG_NOTICE = 2, LOG_NOTICE = 2,
LOG_WARNING = 3, LOG_WARNING = 3,
LOG_INFO = 5, LOG_INFO = 5,
LOG_DETAIL = 6, LOG_DETAIL = 6,
LOG_DEBUG = 7 LOG_DEBUG = 7
} LogCodes; } LogCodes;
@ -59,6 +59,8 @@ typedef enum {
*/ */
void ppp_trace(int level, const char *format,...); void ppp_trace(int level, const char *format,...);
#define TRACELCP PPP_DEBUG
#if PPP_DEBUG #if PPP_DEBUG
#define AUTHDEBUG(a) ppp_trace a #define AUTHDEBUG(a) ppp_trace a
@ -69,8 +71,6 @@ void ppp_trace(int level, const char *format,...);
#define CHAPDEBUG(a) ppp_trace a #define CHAPDEBUG(a) ppp_trace a
#define PPPDEBUG(a) ppp_trace a #define PPPDEBUG(a) ppp_trace a
#define TRACELCP 1
#else /* PPP_DEBUG */ #else /* PPP_DEBUG */
#define AUTHDEBUG(a) #define AUTHDEBUG(a)
@ -79,11 +79,8 @@ void ppp_trace(int level, const char *format,...);
#define LCPDEBUG(a) #define LCPDEBUG(a)
#define FSMDEBUG(a) #define FSMDEBUG(a)
#define CHAPDEBUG(a) #define CHAPDEBUG(a)
#define PPPDEBUG(a) #define PPPDEBUG(a)
#define TRACELCP 0
#endif /* PPP_DEBUG */ #endif /* PPP_DEBUG */
#endif /* PPPDEBUG_H */ #endif /* PPPDEBUG_H */