Remove more globals

This commit is contained in:
Brian Somers 1998-03-13 21:08:05 +00:00
parent 5828db6d2d
commit 30c2f2ffe2
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/cvs2svn/branches/MP/; revision=34558
9 changed files with 211 additions and 208 deletions

View File

@ -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;

View File

@ -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);

View File

@ -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 ! */

View File

@ -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;

View File

@ -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:

View File

@ -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,

View File

@ -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;

View File

@ -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 */

View File

@ -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;