Remove more globals
This commit is contained in:
parent
5828db6d2d
commit
30c2f2ffe2
@ -17,7 +17,7 @@
|
||||
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* $Id: ccp.c,v 1.30.2.19 1998/03/13 00:44:39 brian Exp $
|
||||
* $Id: ccp.c,v 1.30.2.20 1998/03/13 21:07:28 brian Exp $
|
||||
*
|
||||
* TODO:
|
||||
* o Support other compression protocols
|
||||
@ -59,7 +59,8 @@
|
||||
static void CcpSendConfigReq(struct fsm *);
|
||||
static void CcpSendTerminateReq(struct fsm *);
|
||||
static void CcpSendTerminateAck(struct fsm *);
|
||||
static void CcpDecodeConfig(struct fsm *, u_char *, int, int);
|
||||
static void CcpDecodeConfig(struct fsm *, u_char *, int, int,
|
||||
struct fsm_decode *);
|
||||
static void CcpLayerStart(struct fsm *);
|
||||
static void CcpLayerFinish(struct fsm *);
|
||||
static void CcpLayerUp(struct fsm *);
|
||||
@ -176,11 +177,11 @@ CcpSendConfigReq(struct fsm *fp)
|
||||
{
|
||||
/* Send config REQ please */
|
||||
struct ccp *ccp = fsm2ccp(fp);
|
||||
u_char *cp;
|
||||
u_char *cp, buff[100];
|
||||
int f;
|
||||
|
||||
LogPrintf(LogCCP, "CcpSendConfigReq\n");
|
||||
cp = ReqBuff;
|
||||
cp = buff;
|
||||
ccp->my_proto = -1;
|
||||
ccp->out_algorithm = -1;
|
||||
for (f = 0; f < NALGORITHMS; f++)
|
||||
@ -188,12 +189,16 @@ CcpSendConfigReq(struct fsm *fp)
|
||||
struct lcp_opt o;
|
||||
|
||||
(*algorithm[f]->o.Get)(&o);
|
||||
if (cp + o.len > buff + sizeof buff) {
|
||||
LogPrintf(LogERROR, "CCP REQ buffer overrun !\n");
|
||||
break;
|
||||
}
|
||||
cp += LcpPutConf(LogCCP, cp, &o, cftypes[o.id],
|
||||
(*algorithm[f]->Disp)(&o));
|
||||
ccp->my_proto = o.id;
|
||||
ccp->out_algorithm = f;
|
||||
}
|
||||
FsmOutput(fp, CODE_CONFIGREQ, fp->reqid++, ReqBuff, cp - ReqBuff);
|
||||
FsmOutput(fp, CODE_CONFIGREQ, fp->reqid++, buff, cp - buff);
|
||||
}
|
||||
|
||||
void
|
||||
@ -295,17 +300,14 @@ CcpLayerUp(struct fsm *fp)
|
||||
}
|
||||
|
||||
static void
|
||||
CcpDecodeConfig(struct fsm *fp, u_char *cp, int plen, int mode_type)
|
||||
CcpDecodeConfig(struct fsm *fp, u_char *cp, int plen, int mode_type,
|
||||
struct fsm_decode *dec)
|
||||
{
|
||||
/* Deal with incoming data */
|
||||
struct ccp *ccp = fsm2ccp(fp);
|
||||
int type, length;
|
||||
int f;
|
||||
|
||||
ackp = AckBuff;
|
||||
nakp = NakBuff;
|
||||
rejp = RejBuff;
|
||||
|
||||
while (plen >= sizeof(struct fsmconfig)) {
|
||||
type = *cp;
|
||||
length = cp[1];
|
||||
@ -322,8 +324,8 @@ CcpDecodeConfig(struct fsm *fp, u_char *cp, int plen, int mode_type)
|
||||
/* Don't understand that :-( */
|
||||
if (mode_type == MODE_REQ) {
|
||||
ccp->my_reject |= (1 << type);
|
||||
memcpy(rejp, cp, length);
|
||||
rejp += length;
|
||||
memcpy(dec->rejend, cp, length);
|
||||
dec->rejend += length;
|
||||
}
|
||||
} else {
|
||||
struct lcp_opt o;
|
||||
@ -334,23 +336,23 @@ CcpDecodeConfig(struct fsm *fp, u_char *cp, int plen, int mode_type)
|
||||
memcpy(&o, cp, length);
|
||||
switch ((*algorithm[f]->i.Set)(&o)) {
|
||||
case MODE_REJ:
|
||||
memcpy(rejp, &o, o.len);
|
||||
rejp += o.len;
|
||||
memcpy(dec->rejend, &o, o.len);
|
||||
dec->rejend += o.len;
|
||||
break;
|
||||
case MODE_NAK:
|
||||
memcpy(nakp, &o, o.len);
|
||||
nakp += o.len;
|
||||
memcpy(dec->nakend, &o, o.len);
|
||||
dec->nakend += o.len;
|
||||
break;
|
||||
case MODE_ACK:
|
||||
memcpy(ackp, cp, length);
|
||||
ackp += length;
|
||||
memcpy(dec->ackend, cp, length);
|
||||
dec->ackend += length;
|
||||
ccp->his_proto = type;
|
||||
ccp->in_algorithm = f; /* This one'll do ! */
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
memcpy(rejp, cp, length);
|
||||
rejp += length;
|
||||
memcpy(dec->rejend, cp, length);
|
||||
dec->rejend += length;
|
||||
}
|
||||
break;
|
||||
case MODE_NAK:
|
||||
@ -373,8 +375,8 @@ CcpDecodeConfig(struct fsm *fp, u_char *cp, int plen, int mode_type)
|
||||
cp += length;
|
||||
}
|
||||
|
||||
if (rejp != RejBuff) {
|
||||
ackp = AckBuff; /* let's not send both ! */
|
||||
if (mode_type != MODE_NOP && dec->rejend != dec->rej) {
|
||||
dec->ackend = dec->ack; /* let's not send both ! */
|
||||
if (!ccp->in_init) {
|
||||
ccp->his_proto = -1;
|
||||
ccp->in_algorithm = -1;
|
||||
|
@ -23,7 +23,7 @@
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $Id: chat.c,v 1.44.2.14 1998/03/09 19:25:33 brian Exp $
|
||||
* $Id: chat.c,v 1.44.2.15 1998/03/13 00:43:55 brian Exp $
|
||||
*/
|
||||
|
||||
#include <sys/param.h>
|
||||
@ -65,7 +65,6 @@
|
||||
#define BUFLEFT(c) (sizeof (c)->buf - ((c)->bufend - (c)->buf))
|
||||
#define issep(c) ((c) == '\t' || (c) == ' ')
|
||||
|
||||
struct chat chat;
|
||||
static void ExecStr(struct physical *, char *, char *, int);
|
||||
static char *ExpandString(struct chat *, const char *, char *, int, int);
|
||||
|
||||
|
@ -23,7 +23,7 @@
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $Id: chat.h,v 1.9.2.4 1998/03/09 19:24:52 brian Exp $
|
||||
* $Id: chat.h,v 1.9.2.5 1998/03/09 19:25:34 brian Exp $
|
||||
*/
|
||||
|
||||
#define CHAT_EXPECT 0
|
||||
@ -78,8 +78,6 @@ void chat_Init(struct chat *, struct physical *, const char *, int,
|
||||
const char *);
|
||||
void chat_Destroy(struct chat *);
|
||||
|
||||
extern struct chat chat;
|
||||
|
||||
#define VECSIZE(v) (sizeof(v) / sizeof(v[0]))
|
||||
|
||||
extern int MakeArgs(char *, char **, int); /* Mangles the first arg ! */
|
||||
|
@ -17,7 +17,7 @@
|
||||
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* $Id: command.c,v 1.131.2.36 1998/03/13 21:07:01 brian Exp $
|
||||
* $Id: command.c,v 1.131.2.37 1998/03/13 21:07:29 brian Exp $
|
||||
*
|
||||
*/
|
||||
#include <sys/param.h>
|
||||
@ -82,7 +82,6 @@
|
||||
#include "chap.h"
|
||||
#include "datalink.h"
|
||||
|
||||
struct in_addr ifnetmask;
|
||||
static const char *HIDDEN = "********";
|
||||
|
||||
static int ShowCommand(struct cmdargs const *);
|
||||
@ -1192,7 +1191,7 @@ SetInterfaceAddr(struct cmdargs const *arg)
|
||||
return -1;
|
||||
|
||||
ipcp->cfg.HaveTriggerAddress = 0;
|
||||
ifnetmask.s_addr = 0;
|
||||
ipcp->cfg.netmask.s_addr = INADDR_ANY;
|
||||
iplist_reset(&ipcp->cfg.peer_list);
|
||||
|
||||
if (arg->argc > 0) {
|
||||
@ -1202,7 +1201,7 @@ SetInterfaceAddr(struct cmdargs const *arg)
|
||||
if (arg->argc > 1) {
|
||||
hisaddr = arg->argv[1];
|
||||
if (arg->argc > 2) {
|
||||
ifnetmask = GetIpAddr(arg->argv[2]);
|
||||
ipcp->cfg.netmask = GetIpAddr(arg->argv[2]);
|
||||
if (arg->argc > 3) {
|
||||
ipcp->cfg.TriggerAddress = GetIpAddr(arg->argv[3]);
|
||||
ipcp->cfg.HaveTriggerAddress = 1;
|
||||
|
@ -17,7 +17,7 @@
|
||||
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* $Id: fsm.c,v 1.27.2.18 1998/03/13 00:44:43 brian Exp $
|
||||
* $Id: fsm.c,v 1.27.2.19 1998/03/13 21:07:32 brian Exp $
|
||||
*
|
||||
* TODO:
|
||||
* o Refer loglevel for log output
|
||||
@ -58,14 +58,6 @@
|
||||
#include "pap.h"
|
||||
#include "datalink.h"
|
||||
|
||||
u_char AckBuff[200];
|
||||
u_char NakBuff[200];
|
||||
u_char RejBuff[100];
|
||||
u_char ReqBuff[200];
|
||||
u_char *ackp = NULL;
|
||||
u_char *nakp = NULL;
|
||||
u_char *rejp = NULL;
|
||||
|
||||
static void FsmSendConfigReq(struct fsm *);
|
||||
static void FsmSendTerminateReq(struct fsm *);
|
||||
static void FsmInitRestartCounter(struct fsm *);
|
||||
@ -312,7 +304,9 @@ FsmSendConfigAck(struct fsm *fp, struct fsmheader *lhp,
|
||||
u_char *option, int count)
|
||||
{
|
||||
LogPrintf(fp->LogLevel, "SendConfigAck(%s)\n", StateNames[fp->state]);
|
||||
(*fp->fn->DecodeConfig)(fp, option, count, MODE_NOP);
|
||||
(*fp->fn->DecodeConfig)(fp, option, count, MODE_NOP, NULL);
|
||||
if (count < sizeof(struct fsmconfig))
|
||||
LogPrintf(fp->LogLevel, " [EMPTY]\n");
|
||||
FsmOutput(fp, CODE_CONFIGACK, lhp->id, option, count);
|
||||
}
|
||||
|
||||
@ -321,7 +315,9 @@ FsmSendConfigRej(struct fsm *fp, struct fsmheader *lhp,
|
||||
u_char *option, int count)
|
||||
{
|
||||
LogPrintf(fp->LogLevel, "SendConfigRej(%s)\n", StateNames[fp->state]);
|
||||
(*fp->fn->DecodeConfig)(fp, option, count, MODE_NOP);
|
||||
(*fp->fn->DecodeConfig)(fp, option, count, MODE_NOP, NULL);
|
||||
if (count < sizeof(struct fsmconfig))
|
||||
LogPrintf(fp->LogLevel, " [EMPTY]\n");
|
||||
FsmOutput(fp, CODE_CONFIGREJ, lhp->id, option, count);
|
||||
}
|
||||
|
||||
@ -330,7 +326,9 @@ FsmSendConfigNak(struct fsm *fp, struct fsmheader *lhp,
|
||||
u_char *option, int count)
|
||||
{
|
||||
LogPrintf(fp->LogLevel, "SendConfigNak(%s)\n", StateNames[fp->state]);
|
||||
(*fp->fn->DecodeConfig)(fp, option, count, MODE_NOP);
|
||||
(*fp->fn->DecodeConfig)(fp, option, count, MODE_NOP, NULL);
|
||||
if (count < sizeof(struct fsmconfig))
|
||||
LogPrintf(fp->LogLevel, " [EMPTY]\n");
|
||||
FsmOutput(fp, CODE_CONFIGNAK, lhp->id, option, count);
|
||||
}
|
||||
|
||||
@ -398,6 +396,7 @@ static void
|
||||
FsmRecvConfigReq(struct fsm *fp, struct fsmheader *lhp, struct mbuf *bp)
|
||||
/* RCR */
|
||||
{
|
||||
struct fsm_decode dec;
|
||||
int plen, flen;
|
||||
int ackaction = 0;
|
||||
|
||||
@ -431,9 +430,12 @@ FsmRecvConfigReq(struct fsm *fp, struct fsmheader *lhp, struct mbuf *bp)
|
||||
return;
|
||||
}
|
||||
|
||||
(*fp->fn->DecodeConfig)(fp, MBUF_CTOP(bp), flen, MODE_REQ);
|
||||
dec.ackend = dec.ack;
|
||||
dec.nakend = dec.nak;
|
||||
dec.rejend = dec.rej;
|
||||
(*fp->fn->DecodeConfig)(fp, MBUF_CTOP(bp), flen, MODE_REQ, &dec);
|
||||
|
||||
if (nakp == NakBuff && rejp == RejBuff)
|
||||
if (dec.nakend == dec.nak && dec.rejend == dec.rej)
|
||||
ackaction = 1;
|
||||
|
||||
switch (fp->state) {
|
||||
@ -448,12 +450,12 @@ FsmRecvConfigReq(struct fsm *fp, struct fsmheader *lhp, struct mbuf *bp)
|
||||
break;
|
||||
}
|
||||
|
||||
if (rejp != RejBuff)
|
||||
FsmSendConfigRej(fp, lhp, RejBuff, rejp - RejBuff);
|
||||
if (nakp != NakBuff)
|
||||
FsmSendConfigNak(fp, lhp, NakBuff, nakp - NakBuff);
|
||||
if (dec.rejend != dec.rej)
|
||||
FsmSendConfigRej(fp, lhp, dec.rej, dec.rejend - dec.rej);
|
||||
if (dec.nakend != dec.nak)
|
||||
FsmSendConfigNak(fp, lhp, dec.nak, dec.nakend - dec.nak);
|
||||
if (ackaction)
|
||||
FsmSendConfigAck(fp, lhp, AckBuff, ackp - AckBuff);
|
||||
FsmSendConfigAck(fp, lhp, dec.ack, dec.ackend - dec.ack);
|
||||
|
||||
switch (fp->state) {
|
||||
case ST_OPENED:
|
||||
@ -522,6 +524,7 @@ static void
|
||||
FsmRecvConfigNak(struct fsm *fp, struct fsmheader *lhp, struct mbuf *bp)
|
||||
/* RCN */
|
||||
{
|
||||
struct fsm_decode dec;
|
||||
int plen, flen;
|
||||
|
||||
plen = plength(bp);
|
||||
@ -551,7 +554,10 @@ FsmRecvConfigNak(struct fsm *fp, struct fsmheader *lhp, struct mbuf *bp)
|
||||
return;
|
||||
}
|
||||
|
||||
(*fp->fn->DecodeConfig)(fp, MBUF_CTOP(bp), flen, MODE_NAK);
|
||||
dec.ackend = dec.ack;
|
||||
dec.nakend = dec.nak;
|
||||
dec.rejend = dec.rej;
|
||||
(*fp->fn->DecodeConfig)(fp, MBUF_CTOP(bp), flen, MODE_NAK, &dec);
|
||||
|
||||
switch (fp->state) {
|
||||
case ST_REQSENT:
|
||||
@ -639,6 +645,7 @@ static void
|
||||
FsmRecvConfigRej(struct fsm *fp, struct fsmheader *lhp, struct mbuf *bp)
|
||||
/* RCJ */
|
||||
{
|
||||
struct fsm_decode dec;
|
||||
int plen, flen;
|
||||
|
||||
plen = plength(bp);
|
||||
@ -669,7 +676,10 @@ FsmRecvConfigRej(struct fsm *fp, struct fsmheader *lhp, struct mbuf *bp)
|
||||
return;
|
||||
}
|
||||
|
||||
(*fp->fn->DecodeConfig)(fp, MBUF_CTOP(bp), flen, MODE_REJ);
|
||||
dec.ackend = dec.ack;
|
||||
dec.nakend = dec.nak;
|
||||
dec.rejend = dec.rej;
|
||||
(*fp->fn->DecodeConfig)(fp, MBUF_CTOP(bp), flen, MODE_REJ, &dec);
|
||||
|
||||
switch (fp->state) {
|
||||
case ST_REQSENT:
|
||||
|
@ -15,7 +15,7 @@
|
||||
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* $Id: fsm.h,v 1.16.2.8 1998/02/24 03:36:47 brian Exp $
|
||||
* $Id: fsm.h,v 1.16.2.9 1998/02/27 01:22:24 brian Exp $
|
||||
*
|
||||
* TODO:
|
||||
*/
|
||||
@ -47,6 +47,12 @@
|
||||
|
||||
struct fsm;
|
||||
|
||||
struct fsm_decode {
|
||||
u_char ack[100], *ackend;
|
||||
u_char nak[100], *nakend;
|
||||
u_char rej[100], *rejend;
|
||||
};
|
||||
|
||||
struct fsm_callbacks {
|
||||
void (*LayerUp) (struct fsm *); /* Layer is now up (tlu) */
|
||||
void (*LayerDown) (struct fsm *); /* About to come down (tld) */
|
||||
@ -56,7 +62,7 @@ struct fsm_callbacks {
|
||||
void (*SendConfigReq) (struct fsm *); /* Send REQ please */
|
||||
void (*SendTerminateReq) (struct fsm *); /* Term REQ just sent */
|
||||
void (*SendTerminateAck) (struct fsm *); /* Send Term ACK please */
|
||||
void (*DecodeConfig) (struct fsm *, u_char *, int, int);
|
||||
void (*DecodeConfig) (struct fsm *, u_char *, int, int, struct fsm_decode *);
|
||||
/* Deal with incoming data */
|
||||
void (*RecvResetReq) (struct fsm *fp); /* Reset output */
|
||||
void (*RecvResetAck) (struct fsm *fp, u_char); /* Reset input */
|
||||
@ -133,14 +139,6 @@ struct fsmconfig {
|
||||
u_char length;
|
||||
};
|
||||
|
||||
extern u_char AckBuff[200];
|
||||
extern u_char NakBuff[200];
|
||||
extern u_char RejBuff[100];
|
||||
extern u_char ReqBuff[200];
|
||||
extern u_char *ackp;
|
||||
extern u_char *nakp;
|
||||
extern u_char *rejp;
|
||||
|
||||
extern char const *StateNames[];
|
||||
|
||||
extern void fsm_Init(struct fsm *, const char *, u_short, int, int, int,
|
||||
|
@ -17,7 +17,7 @@
|
||||
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* $Id: ipcp.c,v 1.50.2.20 1998/03/13 00:44:05 brian Exp $
|
||||
* $Id: ipcp.c,v 1.50.2.21 1998/03/13 21:07:36 brian Exp $
|
||||
*
|
||||
* TODO:
|
||||
* o More RFC1772 backwoard compatibility
|
||||
@ -87,7 +87,8 @@ static void IpcpInitRestartCounter(struct fsm *);
|
||||
static void IpcpSendConfigReq(struct fsm *);
|
||||
static void IpcpSendTerminateReq(struct fsm *);
|
||||
static void IpcpSendTerminateAck(struct fsm *);
|
||||
static void IpcpDecodeConfig(struct fsm *, u_char *, int, int);
|
||||
static void IpcpDecodeConfig(struct fsm *, u_char *, int, int,
|
||||
struct fsm_decode *);
|
||||
|
||||
static struct fsm_callbacks ipcp_Callbacks = {
|
||||
IpcpLayerUp,
|
||||
@ -223,6 +224,7 @@ ipcp_Init(struct ipcp *ipcp, struct bundle *bundle, struct link *l,
|
||||
ipcp->cfg.peer_range.width = 32;
|
||||
}
|
||||
}
|
||||
ipcp->cfg.netmask.s_addr = INADDR_ANY;
|
||||
memset(&ipcp->cfg.peer_range, '\0', sizeof ipcp->cfg.peer_range);
|
||||
iplist_setsrc(&ipcp->cfg.peer_list, "");
|
||||
ipcp->cfg.HaveTriggerAddress = 0;
|
||||
@ -288,9 +290,8 @@ ipcp_Setup(struct ipcp *ipcp)
|
||||
}
|
||||
|
||||
static int
|
||||
ipcp_SetIPaddress(struct bundle *bundle, struct ipcp *ipcp,
|
||||
struct in_addr myaddr, struct in_addr hisaddr,
|
||||
struct in_addr netmask, int silent)
|
||||
ipcp_SetIPaddress(struct bundle *bundle, struct in_addr myaddr,
|
||||
struct in_addr hisaddr, int silent)
|
||||
{
|
||||
struct sockaddr_in *sock_in;
|
||||
int s;
|
||||
@ -298,11 +299,11 @@ ipcp_SetIPaddress(struct bundle *bundle, struct ipcp *ipcp,
|
||||
struct ifaliasreq ifra;
|
||||
|
||||
/* If given addresses are alreay set, then ignore this request */
|
||||
if (ipcp->my_ifip.s_addr == myaddr.s_addr &&
|
||||
ipcp->peer_ifip.s_addr == hisaddr.s_addr)
|
||||
if (bundle->ncp.ipcp.my_ifip.s_addr == myaddr.s_addr &&
|
||||
bundle->ncp.ipcp.peer_ifip.s_addr == hisaddr.s_addr)
|
||||
return 0;
|
||||
|
||||
IpcpCleanInterface(&ipcp->fsm);
|
||||
IpcpCleanInterface(&bundle->ncp.ipcp.fsm);
|
||||
|
||||
s = ID0socket(AF_INET, SOCK_DGRAM, 0);
|
||||
if (s < 0) {
|
||||
@ -335,8 +336,9 @@ ipcp_SetIPaddress(struct bundle *bundle, struct ipcp *ipcp,
|
||||
mask = IN_CLASSC_NET;
|
||||
|
||||
/* if subnet mask is given, use it instead of class mask */
|
||||
if (netmask.s_addr != INADDR_ANY && (ntohl(netmask.s_addr) & mask) == mask)
|
||||
mask = ntohl(netmask.s_addr);
|
||||
if (bundle->ncp.ipcp.cfg.netmask.s_addr != INADDR_ANY &&
|
||||
(ntohl(bundle->ncp.ipcp.cfg.netmask.s_addr) & mask) == mask)
|
||||
mask = ntohl(bundle->ncp.ipcp.cfg.netmask.s_addr);
|
||||
|
||||
sock_in = (struct sockaddr_in *)&ifra.ifra_mask;
|
||||
sock_in->sin_family = AF_INET;
|
||||
@ -351,19 +353,18 @@ ipcp_SetIPaddress(struct bundle *bundle, struct ipcp *ipcp,
|
||||
return (-1);
|
||||
}
|
||||
|
||||
ipcp->peer_ifip.s_addr = hisaddr.s_addr;
|
||||
ipcp->my_ifip.s_addr = myaddr.s_addr;
|
||||
bundle->ncp.ipcp.peer_ifip.s_addr = hisaddr.s_addr;
|
||||
bundle->ncp.ipcp.my_ifip.s_addr = myaddr.s_addr;
|
||||
|
||||
if (Enabled(ConfProxy))
|
||||
sifproxyarp(bundle, ipcp->peer_ifip, s);
|
||||
sifproxyarp(bundle, bundle->ncp.ipcp.peer_ifip, s);
|
||||
|
||||
close(s);
|
||||
return (0);
|
||||
}
|
||||
|
||||
static struct in_addr
|
||||
ChooseHisAddr(struct bundle *bundle, struct ipcp *ipcp,
|
||||
const struct in_addr gw)
|
||||
ChooseHisAddr(struct bundle *bundle, const struct in_addr gw)
|
||||
{
|
||||
struct in_addr try;
|
||||
int f;
|
||||
@ -372,7 +373,7 @@ ChooseHisAddr(struct bundle *bundle, struct ipcp *ipcp,
|
||||
try = iplist_next(&bundle->ncp.ipcp.cfg.peer_list);
|
||||
LogPrintf(LogDEBUG, "ChooseHisAddr: Check item %d (%s)\n",
|
||||
f, inet_ntoa(try));
|
||||
if (ipcp_SetIPaddress(bundle, ipcp, gw, try, ifnetmask, 1) == 0) {
|
||||
if (ipcp_SetIPaddress(bundle, gw, try, 1) == 0) {
|
||||
LogPrintf(LogIPCP, "ChooseHisAddr: Selected IP address %s\n",
|
||||
inet_ntoa(try));
|
||||
break;
|
||||
@ -401,11 +402,12 @@ IpcpSendConfigReq(struct fsm *fp)
|
||||
/* Send config REQ please */
|
||||
struct physical *p = link2physical(fp->link);
|
||||
struct ipcp *ipcp = fsm2ipcp(fp);
|
||||
u_char *cp;
|
||||
u_char *cp, buff[12];
|
||||
struct lcp_opt o;
|
||||
|
||||
cp = ReqBuff;
|
||||
LogPrintf(LogIPCP, "IpcpSendConfigReq\n");
|
||||
cp = buff;
|
||||
|
||||
if ((p && !Physical_IsSync(p)) || !REJECTED(ipcp, TY_IPADDR)) {
|
||||
o.id = TY_IPADDR;
|
||||
o.len = 6;
|
||||
@ -428,7 +430,7 @@ IpcpSendConfigReq(struct fsm *fp)
|
||||
}
|
||||
cp += LcpPutConf(LogIPCP, cp, &o, cftypes[o.id], args);
|
||||
}
|
||||
FsmOutput(fp, CODE_CONFIGREQ, fp->reqid++, ReqBuff, cp - ReqBuff);
|
||||
FsmOutput(fp, CODE_CONFIGREQ, fp->reqid++, buff, cp - buff);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -542,8 +544,8 @@ IpcpLayerUp(struct fsm *fp)
|
||||
if (ipcp->peer_compproto >> 16 == PROTO_VJCOMP)
|
||||
VjInit((ipcp->peer_compproto >> 8) & 255);
|
||||
|
||||
if (ipcp_SetIPaddress(fp->bundle, ipcp, ipcp->my_ip,
|
||||
ipcp->peer_ip, ifnetmask, 0) < 0) {
|
||||
if (ipcp_SetIPaddress(fp->bundle, ipcp->my_ip,
|
||||
ipcp->peer_ip, 0) < 0) {
|
||||
LogPrintf(LogERROR, "IpcpLayerUp: unable to set ip address\n");
|
||||
return;
|
||||
}
|
||||
@ -585,7 +587,8 @@ AcceptableAddr(struct in_range *prange, struct in_addr ipaddr)
|
||||
}
|
||||
|
||||
static void
|
||||
IpcpDecodeConfig(struct fsm *fp, u_char * cp, int plen, int mode_type)
|
||||
IpcpDecodeConfig(struct fsm *fp, u_char * cp, int plen, int mode_type,
|
||||
struct fsm_decode *dec)
|
||||
{
|
||||
/* Deal with incoming PROTO_IPCP */
|
||||
struct ipcp *ipcp = fsm2ipcp(fp);
|
||||
@ -593,12 +596,7 @@ IpcpDecodeConfig(struct fsm *fp, u_char * cp, int plen, int mode_type)
|
||||
u_long *lp, compproto;
|
||||
struct compreq *pcomp;
|
||||
struct in_addr ipaddr, dstipaddr, dnsstuff, ms_info_req;
|
||||
char tbuff[100];
|
||||
char tbuff2[100];
|
||||
|
||||
ackp = AckBuff;
|
||||
nakp = NakBuff;
|
||||
rejp = RejBuff;
|
||||
char tbuff[100], tbuff2[100];
|
||||
|
||||
while (plen >= sizeof(struct fsmconfig)) {
|
||||
type = *cp;
|
||||
@ -621,19 +619,19 @@ IpcpDecodeConfig(struct fsm *fp, u_char * cp, int plen, int mode_type)
|
||||
if (iplist_isvalid(&ipcp->cfg.peer_list)) {
|
||||
if (ipaddr.s_addr == INADDR_ANY ||
|
||||
iplist_ip2pos(&ipcp->cfg.peer_list, ipaddr) < 0 ||
|
||||
ipcp_SetIPaddress(fp->bundle, ipcp, ipcp->cfg.my_range.ipaddr,
|
||||
ipaddr, ifnetmask, 1)) {
|
||||
ipcp_SetIPaddress(fp->bundle, ipcp->cfg.my_range.ipaddr,
|
||||
ipaddr, 1)) {
|
||||
LogPrintf(LogIPCP, "%s: Address invalid or already in use\n",
|
||||
inet_ntoa(ipaddr));
|
||||
ipcp->peer_ip = ChooseHisAddr
|
||||
(fp->bundle, ipcp, ipcp->cfg.my_range.ipaddr);
|
||||
(fp->bundle, ipcp->cfg.my_range.ipaddr);
|
||||
if (ipcp->peer_ip.s_addr == INADDR_ANY) {
|
||||
memcpy(rejp, cp, length);
|
||||
rejp += length;
|
||||
memcpy(dec->rejend, cp, length);
|
||||
dec->rejend += length;
|
||||
} else {
|
||||
memcpy(nakp, cp, 2);
|
||||
memcpy(nakp+2, &ipcp->peer_ip.s_addr, length - 2);
|
||||
nakp += length;
|
||||
memcpy(dec->nakend, cp, 2);
|
||||
memcpy(dec->nakend+2, &ipcp->peer_ip.s_addr, length - 2);
|
||||
dec->nakend += length;
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -642,14 +640,14 @@ IpcpDecodeConfig(struct fsm *fp, u_char * cp, int plen, int mode_type)
|
||||
* If destination address is not acceptable, insist to use what we
|
||||
* want to use.
|
||||
*/
|
||||
memcpy(nakp, cp, 2);
|
||||
memcpy(nakp+2, &ipcp->peer_ip.s_addr, length - 2);
|
||||
nakp += length;
|
||||
memcpy(dec->nakend, cp, 2);
|
||||
memcpy(dec->nakend+2, &ipcp->peer_ip.s_addr, length - 2);
|
||||
dec->nakend += length;
|
||||
break;
|
||||
}
|
||||
ipcp->peer_ip = ipaddr;
|
||||
memcpy(ackp, cp, length);
|
||||
ackp += length;
|
||||
memcpy(dec->ackend, cp, length);
|
||||
dec->ackend += length;
|
||||
break;
|
||||
case MODE_NAK:
|
||||
if (AcceptableAddr(&ipcp->cfg.my_range, ipaddr)) {
|
||||
@ -676,8 +674,8 @@ IpcpDecodeConfig(struct fsm *fp, u_char * cp, int plen, int mode_type)
|
||||
switch (mode_type) {
|
||||
case MODE_REQ:
|
||||
if (!Acceptable(ConfVjcomp)) {
|
||||
memcpy(rejp, cp, length);
|
||||
rejp += length;
|
||||
memcpy(dec->rejend, cp, length);
|
||||
dec->rejend += length;
|
||||
} else {
|
||||
pcomp = (struct compreq *) (cp + 2);
|
||||
switch (length) {
|
||||
@ -686,13 +684,13 @@ IpcpDecodeConfig(struct fsm *fp, u_char * cp, int plen, int mode_type)
|
||||
LogPrintf(LogWARN, "Peer is speaking RFC1172 compression protocol !\n");
|
||||
ipcp->heis1172 = 1;
|
||||
ipcp->peer_compproto = compproto;
|
||||
memcpy(ackp, cp, length);
|
||||
ackp += length;
|
||||
memcpy(dec->ackend, cp, length);
|
||||
dec->ackend += length;
|
||||
} else {
|
||||
memcpy(nakp, cp, 2);
|
||||
memcpy(dec->nakend, cp, 2);
|
||||
pcomp->proto = htons(PROTO_VJCOMP);
|
||||
memcpy(nakp+2, &pcomp, 2);
|
||||
nakp += length;
|
||||
memcpy(dec->nakend+2, &pcomp, 2);
|
||||
dec->nakend += length;
|
||||
}
|
||||
break;
|
||||
case 6: /* RFC1332 */
|
||||
@ -701,20 +699,20 @@ IpcpDecodeConfig(struct fsm *fp, u_char * cp, int plen, int mode_type)
|
||||
&& pcomp->slots >= MIN_VJ_STATES) {
|
||||
ipcp->peer_compproto = compproto;
|
||||
ipcp->heis1172 = 0;
|
||||
memcpy(ackp, cp, length);
|
||||
ackp += length;
|
||||
memcpy(dec->ackend, cp, length);
|
||||
dec->ackend += length;
|
||||
} else {
|
||||
memcpy(nakp, cp, 2);
|
||||
memcpy(dec->nakend, cp, 2);
|
||||
pcomp->proto = htons(PROTO_VJCOMP);
|
||||
pcomp->slots = DEF_VJ_STATES;
|
||||
pcomp->compcid = 0;
|
||||
memcpy(nakp+2, &pcomp, sizeof pcomp);
|
||||
nakp += length;
|
||||
memcpy(dec->nakend+2, &pcomp, sizeof pcomp);
|
||||
dec->nakend += length;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
memcpy(rejp, cp, length);
|
||||
rejp += length;
|
||||
memcpy(dec->rejend, cp, length);
|
||||
dec->rejend += length;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -741,8 +739,8 @@ IpcpDecodeConfig(struct fsm *fp, u_char * cp, int plen, int mode_type)
|
||||
case MODE_REQ:
|
||||
ipcp->peer_ip = ipaddr;
|
||||
ipcp->my_ip = dstipaddr;
|
||||
memcpy(ackp, cp, length);
|
||||
ackp += length;
|
||||
memcpy(dec->ackend, cp, length);
|
||||
dec->ackend += length;
|
||||
break;
|
||||
case MODE_NAK:
|
||||
snprintf(tbuff2, sizeof tbuff2, "%s changing address: %s", tbuff,
|
||||
@ -764,15 +762,15 @@ IpcpDecodeConfig(struct fsm *fp, u_char * cp, int plen, int mode_type)
|
||||
#ifndef NOMSEXT
|
||||
case TY_PRIMARY_DNS: /* MS PPP DNS negotiation hack */
|
||||
case TY_SECONDARY_DNS:
|
||||
if (!Enabled(ConfMSExt)) {
|
||||
LogPrintf(LogIPCP, "MS NS req - rejected - msext disabled\n");
|
||||
ipcp->my_reject |= (1 << type);
|
||||
memcpy(rejp, cp, length);
|
||||
rejp += length;
|
||||
break;
|
||||
}
|
||||
switch (mode_type) {
|
||||
case MODE_REQ:
|
||||
if (!Enabled(ConfMSExt)) {
|
||||
LogPrintf(LogIPCP, "MS NS req - rejected - msext disabled\n");
|
||||
ipcp->my_reject |= (1 << type);
|
||||
memcpy(dec->rejend, cp, length);
|
||||
dec->rejend += length;
|
||||
break;
|
||||
}
|
||||
lp = (u_long *) (cp + 2);
|
||||
dnsstuff.s_addr = *lp;
|
||||
ms_info_req.s_addr = ipcp->cfg.ns_entries
|
||||
@ -783,13 +781,13 @@ IpcpDecodeConfig(struct fsm *fp, u_char * cp, int plen, int mode_type)
|
||||
* So the client has got the DNS stuff wrong (first request) so
|
||||
* we'll tell 'em how it is
|
||||
*/
|
||||
memcpy(nakp, cp, 2); /* copy first two (type/length) */
|
||||
memcpy(dec->nakend, cp, 2); /* copy first two (type/length) */
|
||||
LogPrintf(LogIPCP, "MS NS req %d:%s->%s - nak\n",
|
||||
type,
|
||||
inet_ntoa(dnsstuff),
|
||||
inet_ntoa(ms_info_req));
|
||||
memcpy(nakp+2, &ms_info_req, length);
|
||||
nakp += length;
|
||||
memcpy(dec->nakend+2, &ms_info_req, length);
|
||||
dec->nakend += length;
|
||||
break;
|
||||
}
|
||||
|
||||
@ -800,8 +798,8 @@ IpcpDecodeConfig(struct fsm *fp, u_char * cp, int plen, int mode_type)
|
||||
LogPrintf(LogIPCP, "MS NS req %d:%s ok - ack\n",
|
||||
type,
|
||||
inet_ntoa(ms_info_req));
|
||||
memcpy(ackp, cp, length);
|
||||
ackp += length;
|
||||
memcpy(dec->ackend, cp, length);
|
||||
dec->ackend += length;
|
||||
break;
|
||||
case MODE_NAK: /* what does this mean?? */
|
||||
LogPrintf(LogIPCP, "MS NS req %d - NAK??\n", type);
|
||||
@ -814,34 +812,34 @@ IpcpDecodeConfig(struct fsm *fp, u_char * cp, int plen, int mode_type)
|
||||
|
||||
case TY_PRIMARY_NBNS: /* MS PPP NetBIOS nameserver hack */
|
||||
case TY_SECONDARY_NBNS:
|
||||
if (!Enabled(ConfMSExt)) {
|
||||
LogPrintf(LogIPCP, "MS NBNS req - rejected - msext disabled\n");
|
||||
ipcp->my_reject |= (1 << type);
|
||||
memcpy(rejp, cp, length);
|
||||
rejp += length;
|
||||
break;
|
||||
}
|
||||
switch (mode_type) {
|
||||
case MODE_REQ:
|
||||
if (!Enabled(ConfMSExt)) {
|
||||
LogPrintf(LogIPCP, "MS NBNS req - rejected - msext disabled\n");
|
||||
ipcp->my_reject |= (1 << type);
|
||||
memcpy(dec->rejend, cp, length);
|
||||
dec->rejend += length;
|
||||
break;
|
||||
}
|
||||
lp = (u_long *) (cp + 2);
|
||||
dnsstuff.s_addr = *lp;
|
||||
ms_info_req.s_addr = ipcp->cfg.nbns_entries
|
||||
[(type - TY_PRIMARY_NBNS) ? 1 : 0].s_addr;
|
||||
if (dnsstuff.s_addr != ms_info_req.s_addr) {
|
||||
memcpy(nakp, cp, 2);
|
||||
memcpy(nakp+2, &ms_info_req.s_addr, length);
|
||||
memcpy(dec->nakend, cp, 2);
|
||||
memcpy(dec->nakend+2, &ms_info_req.s_addr, length);
|
||||
LogPrintf(LogIPCP, "MS NBNS req %d:%s->%s - nak\n",
|
||||
type,
|
||||
inet_ntoa(dnsstuff),
|
||||
inet_ntoa(ms_info_req));
|
||||
nakp += length;
|
||||
dec->nakend += length;
|
||||
break;
|
||||
}
|
||||
LogPrintf(LogIPCP, "MS NBNS req %d:%s ok - ack\n",
|
||||
type,
|
||||
inet_ntoa(ms_info_req));
|
||||
memcpy(ackp, cp, length);
|
||||
ackp += length;
|
||||
memcpy(dec->ackend, cp, length);
|
||||
dec->ackend += length;
|
||||
break;
|
||||
case MODE_NAK:
|
||||
LogPrintf(LogIPCP, "MS NBNS req %d - NAK??\n", type);
|
||||
@ -855,9 +853,11 @@ IpcpDecodeConfig(struct fsm *fp, u_char * cp, int plen, int mode_type)
|
||||
#endif
|
||||
|
||||
default:
|
||||
ipcp->my_reject |= (1 << type);
|
||||
memcpy(rejp, cp, length);
|
||||
rejp += length;
|
||||
if (mode_type != MODE_NOP) {
|
||||
ipcp->my_reject |= (1 << type);
|
||||
memcpy(dec->rejend, cp, length);
|
||||
dec->rejend += length;
|
||||
}
|
||||
break;
|
||||
}
|
||||
plen -= length;
|
||||
@ -884,7 +884,7 @@ UseHisaddr(struct bundle *bundle, const char *hisaddr, int setaddr)
|
||||
iplist_setsrc(&ipcp->cfg.peer_list, hisaddr);
|
||||
if (iplist_isvalid(&ipcp->cfg.peer_list)) {
|
||||
iplist_setrandpos(&ipcp->cfg.peer_list);
|
||||
ipcp->peer_ip = ChooseHisAddr(bundle, ipcp, ipcp->my_ip);
|
||||
ipcp->peer_ip = ChooseHisAddr(bundle, ipcp->my_ip);
|
||||
if (ipcp->peer_ip.s_addr == INADDR_ANY) {
|
||||
LogPrintf(LogWARN, "%s: None available !\n",
|
||||
ipcp->cfg.peer_list.src);
|
||||
@ -902,10 +902,8 @@ UseHisaddr(struct bundle *bundle, const char *hisaddr, int setaddr)
|
||||
&ipcp->cfg.peer_range.width) != 0) {
|
||||
ipcp->peer_ip.s_addr = ipcp->cfg.peer_range.ipaddr.s_addr;
|
||||
|
||||
if (setaddr && ipcp_SetIPaddress(bundle, ipcp,
|
||||
ipcp->cfg.my_range.ipaddr,
|
||||
ipcp->cfg.peer_range.ipaddr,
|
||||
ifnetmask, 0) < 0) {
|
||||
if (setaddr && ipcp_SetIPaddress(bundle, ipcp->cfg.my_range.ipaddr,
|
||||
ipcp->cfg.peer_range.ipaddr, 0) < 0) {
|
||||
ipcp->cfg.my_range.ipaddr.s_addr = INADDR_ANY;
|
||||
ipcp->cfg.peer_range.ipaddr.s_addr = INADDR_ANY;
|
||||
return 0;
|
||||
|
@ -15,7 +15,7 @@
|
||||
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* $Id: ipcp.h,v 1.18.2.14 1998/02/27 01:22:27 brian Exp $
|
||||
* $Id: ipcp.h,v 1.18.2.15 1998/03/13 21:07:37 brian Exp $
|
||||
*
|
||||
* TODO:
|
||||
*/
|
||||
@ -47,6 +47,7 @@ struct ipcp {
|
||||
int VJInitComp : 1; /* Slot compression */
|
||||
|
||||
struct in_range my_range; /* MYADDR spec */
|
||||
struct in_addr netmask; /* netmask (unused by most OSs) */
|
||||
struct in_range peer_range; /* HISADDR spec */
|
||||
struct iplist peer_list; /* Ranges of HISADDR values */
|
||||
|
||||
|
@ -17,7 +17,7 @@
|
||||
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* $Id: lcp.c,v 1.55.2.26 1998/03/13 00:44:08 brian Exp $
|
||||
* $Id: lcp.c,v 1.55.2.27 1998/03/13 21:07:06 brian Exp $
|
||||
*
|
||||
* TODO:
|
||||
* o Limit data field length by MRU
|
||||
@ -88,7 +88,8 @@ static void LcpInitRestartCounter(struct fsm *);
|
||||
static void LcpSendConfigReq(struct fsm *);
|
||||
static void LcpSendTerminateReq(struct fsm *);
|
||||
static void LcpSendTerminateAck(struct fsm *);
|
||||
static void LcpDecodeConfig(struct fsm *, u_char *, int, int);
|
||||
static void LcpDecodeConfig(struct fsm *, u_char *, int, int,
|
||||
struct fsm_decode *);
|
||||
|
||||
static struct fsm_callbacks lcp_Callbacks = {
|
||||
LcpLayerUp,
|
||||
@ -303,7 +304,7 @@ LcpSendConfigReq(struct fsm *fp)
|
||||
/* Send config REQ please */
|
||||
struct physical *p = link2physical(fp->link);
|
||||
struct lcp *lcp = fsm2lcp(fp);
|
||||
u_char *cp;
|
||||
u_char *cp, buff[100];
|
||||
struct lcp_opt o;
|
||||
|
||||
if (!p) {
|
||||
@ -312,7 +313,7 @@ LcpSendConfigReq(struct fsm *fp)
|
||||
}
|
||||
|
||||
LogPrintf(LogLCP, "LcpSendConfigReq\n");
|
||||
cp = ReqBuff;
|
||||
cp = buff;
|
||||
if (!Physical_IsSync(p)) {
|
||||
if (lcp->want_acfcomp && !REJECTED(lcp, TY_ACFCOMP))
|
||||
PUTN(TY_ACFCOMP);
|
||||
@ -347,7 +348,7 @@ LcpSendConfigReq(struct fsm *fp)
|
||||
PUTMD5CHAP(); /* Use MD5 */
|
||||
break;
|
||||
}
|
||||
FsmOutput(fp, CODE_CONFIGREQ, fp->reqid++, ReqBuff, cp - ReqBuff);
|
||||
FsmOutput(fp, CODE_CONFIGREQ, fp->reqid++, buff, cp - buff);
|
||||
}
|
||||
|
||||
void
|
||||
@ -418,7 +419,8 @@ LcpLayerDown(struct fsm *fp)
|
||||
}
|
||||
|
||||
static void
|
||||
LcpDecodeConfig(struct fsm *fp, u_char *cp, int plen, int mode_type)
|
||||
LcpDecodeConfig(struct fsm *fp, u_char *cp, int plen, int mode_type,
|
||||
struct fsm_decode *dec)
|
||||
{
|
||||
/* Deal with incoming PROTO_LCP */
|
||||
struct lcp *lcp = fsm2lcp(fp);
|
||||
@ -428,10 +430,6 @@ LcpDecodeConfig(struct fsm *fp, u_char *cp, int plen, int mode_type)
|
||||
struct lqrreq *req;
|
||||
char request[20], desc[22];
|
||||
|
||||
ackp = AckBuff;
|
||||
nakp = NakBuff;
|
||||
rejp = RejBuff;
|
||||
|
||||
while (plen >= sizeof(struct fsmconfig)) {
|
||||
type = *cp;
|
||||
length = cp[1];
|
||||
@ -454,16 +452,16 @@ LcpDecodeConfig(struct fsm *fp, u_char *cp, int plen, int mode_type)
|
||||
mtu = MAX_MTU;
|
||||
if (mru > mtu) {
|
||||
*sp = htons(mtu);
|
||||
memcpy(nakp, cp, 4);
|
||||
nakp += 4;
|
||||
memcpy(dec->nakend, cp, 4);
|
||||
dec->nakend += 4;
|
||||
} else if (mru < MIN_MRU) {
|
||||
*sp = htons(MIN_MRU);
|
||||
memcpy(nakp, cp, 4);
|
||||
nakp += 4;
|
||||
memcpy(dec->nakend, cp, 4);
|
||||
dec->nakend += 4;
|
||||
} else {
|
||||
lcp->his_mru = mru;
|
||||
memcpy(ackp, cp, 4);
|
||||
ackp += 4;
|
||||
memcpy(dec->ackend, cp, 4);
|
||||
dec->ackend += 4;
|
||||
}
|
||||
break;
|
||||
case MODE_NAK:
|
||||
@ -484,8 +482,8 @@ LcpDecodeConfig(struct fsm *fp, u_char *cp, int plen, int mode_type)
|
||||
switch (mode_type) {
|
||||
case MODE_REQ:
|
||||
lcp->his_accmap = accmap;
|
||||
memcpy(ackp, cp, 6);
|
||||
ackp += 6;
|
||||
memcpy(dec->ackend, cp, 6);
|
||||
dec->ackend += 6;
|
||||
break;
|
||||
case MODE_NAK:
|
||||
lcp->want_accmap = accmap;
|
||||
@ -521,19 +519,19 @@ LcpDecodeConfig(struct fsm *fp, u_char *cp, int plen, int mode_type)
|
||||
}
|
||||
if (Acceptable(ConfPap)) {
|
||||
lcp->his_auth = proto;
|
||||
memcpy(ackp, cp, length);
|
||||
ackp += length;
|
||||
memcpy(dec->ackend, cp, length);
|
||||
dec->ackend += length;
|
||||
} else if (Acceptable(ConfChap)) {
|
||||
*nakp++ = *cp;
|
||||
*nakp++ = 5;
|
||||
*nakp++ = (unsigned char) (PROTO_CHAP >> 8);
|
||||
*nakp++ = (unsigned char) PROTO_CHAP;
|
||||
*dec->nakend++ = *cp;
|
||||
*dec->nakend++ = 5;
|
||||
*dec->nakend++ = (unsigned char) (PROTO_CHAP >> 8);
|
||||
*dec->nakend++ = (unsigned char) PROTO_CHAP;
|
||||
#ifdef HAVE_DES
|
||||
if (VarMSChap)
|
||||
*nakp++ = 0x80;
|
||||
*dec->nakend++ = 0x80;
|
||||
else
|
||||
#endif
|
||||
*nakp++ = 5;
|
||||
*dec->nakend++ = 5;
|
||||
} else
|
||||
goto reqreject;
|
||||
break;
|
||||
@ -550,16 +548,16 @@ LcpDecodeConfig(struct fsm *fp, u_char *cp, int plen, int mode_type)
|
||||
#endif
|
||||
{
|
||||
lcp->his_auth = proto;
|
||||
memcpy(ackp, cp, length);
|
||||
ackp += length;
|
||||
memcpy(dec->ackend, cp, length);
|
||||
dec->ackend += length;
|
||||
#ifdef HAVE_DES
|
||||
VarMSChap = cp[4] == 0x80;
|
||||
#endif
|
||||
} else if (Acceptable(ConfPap)) {
|
||||
*nakp++ = *cp;
|
||||
*nakp++ = 4;
|
||||
*nakp++ = (unsigned char) (PROTO_PAP >> 8);
|
||||
*nakp++ = (unsigned char) PROTO_PAP;
|
||||
*dec->nakend++ = *cp;
|
||||
*dec->nakend++ = 4;
|
||||
*dec->nakend++ = (unsigned char) (PROTO_PAP >> 8);
|
||||
*dec->nakend++ = (unsigned char) PROTO_PAP;
|
||||
} else
|
||||
goto reqreject;
|
||||
break;
|
||||
@ -567,8 +565,8 @@ LcpDecodeConfig(struct fsm *fp, u_char *cp, int plen, int mode_type)
|
||||
default:
|
||||
LogPrintf(LogLCP, "%s 0x%04x - not recognised, NAK\n",
|
||||
request, proto);
|
||||
memcpy(nakp, cp, length);
|
||||
nakp += length;
|
||||
memcpy(dec->nakend, cp, length);
|
||||
dec->nakend += length;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
@ -615,8 +613,8 @@ LcpDecodeConfig(struct fsm *fp, u_char *cp, int plen, int mode_type)
|
||||
if (lcp->his_lqrperiod < 500)
|
||||
lcp->his_lqrperiod = 500;
|
||||
req->period = htonl(lcp->his_lqrperiod);
|
||||
memcpy(ackp, cp, length);
|
||||
ackp += length;
|
||||
memcpy(dec->ackend, cp, length);
|
||||
dec->ackend += length;
|
||||
}
|
||||
break;
|
||||
case MODE_NAK:
|
||||
@ -640,14 +638,14 @@ LcpDecodeConfig(struct fsm *fp, u_char *cp, int plen, int mode_type)
|
||||
LogPrintf(LogLCP, "Magic is same (%08lx) - %d times\n",
|
||||
(u_long)magic, ++lcp->LcpFailedMagic);
|
||||
lcp->want_magic = GenerateMagic();
|
||||
memcpy(nakp, cp, 6);
|
||||
nakp += 6;
|
||||
memcpy(dec->nakend, cp, 6);
|
||||
dec->nakend += 6;
|
||||
ualarm(TICKUNIT * (4 + 4 * lcp->LcpFailedMagic), 0);
|
||||
sigpause(0);
|
||||
} else {
|
||||
lcp->his_magic = magic;
|
||||
memcpy(ackp, cp, length);
|
||||
ackp += length;
|
||||
memcpy(dec->ackend, cp, length);
|
||||
dec->ackend += length;
|
||||
lcp->LcpFailedMagic = 0;
|
||||
}
|
||||
} else {
|
||||
@ -674,18 +672,18 @@ LcpDecodeConfig(struct fsm *fp, u_char *cp, int plen, int mode_type)
|
||||
case MODE_REQ:
|
||||
if (Acceptable(ConfProtocomp)) {
|
||||
lcp->his_protocomp = 1;
|
||||
memcpy(ackp, cp, 2);
|
||||
ackp += 2;
|
||||
memcpy(dec->ackend, cp, 2);
|
||||
dec->ackend += 2;
|
||||
} else {
|
||||
#ifdef OLDMST
|
||||
/*
|
||||
* MorningStar before v1.3 needs NAK
|
||||
*/
|
||||
memcpy(nakp, cp, 2);
|
||||
nakp += 2;
|
||||
memcpy(dec->nakend, cp, 2);
|
||||
dec->nakend += 2;
|
||||
#else
|
||||
memcpy(rejp, cp, 2);
|
||||
rejp += 2;
|
||||
memcpy(dec->rejend, cp, 2);
|
||||
dec->rejend += 2;
|
||||
lcp->my_reject |= (1 << type);
|
||||
#endif
|
||||
}
|
||||
@ -704,18 +702,18 @@ LcpDecodeConfig(struct fsm *fp, u_char *cp, int plen, int mode_type)
|
||||
case MODE_REQ:
|
||||
if (Acceptable(ConfAcfcomp)) {
|
||||
lcp->his_acfcomp = 1;
|
||||
memcpy(ackp, cp, 2);
|
||||
ackp += 2;
|
||||
memcpy(dec->ackend, cp, 2);
|
||||
dec->ackend += 2;
|
||||
} else {
|
||||
#ifdef OLDMST
|
||||
/*
|
||||
* MorningStar before v1.3 needs NAK
|
||||
*/
|
||||
memcpy(nakp, cp, 2);
|
||||
nakp += 2;
|
||||
memcpy(dec->nakend, cp, 2);
|
||||
dec->nakend += 2;
|
||||
#else
|
||||
memcpy(rejp, cp, 2);
|
||||
rejp += 2;
|
||||
memcpy(dec->rejend, cp, 2);
|
||||
dec->rejend += 2;
|
||||
lcp->my_reject |= (1 << type);
|
||||
#endif
|
||||
}
|
||||
@ -751,13 +749,13 @@ LcpDecodeConfig(struct fsm *fp, u_char *cp, int plen, int mode_type)
|
||||
|
||||
if (mode_type == MODE_REQ) {
|
||||
reqreject:
|
||||
if (length > sizeof RejBuff - (rejp - RejBuff)) {
|
||||
length = sizeof RejBuff - (rejp - RejBuff);
|
||||
if (length > sizeof dec->rej - (dec->rejend - dec->rej)) {
|
||||
length = sizeof dec->rej - (dec->rejend - dec->rej);
|
||||
LogPrintf(LogLCP, "Can't REJ length %d - trunating to %d\n",
|
||||
cp[1], length);
|
||||
}
|
||||
memcpy(rejp, cp, length);
|
||||
rejp += length;
|
||||
memcpy(dec->rejend, cp, length);
|
||||
dec->rejend += length;
|
||||
lcp->my_reject |= (1 << type);
|
||||
if (length != cp[1])
|
||||
return;
|
||||
|
Loading…
x
Reference in New Issue
Block a user