o Move the accept/deny/disable/enable globals either to the

bundle (non-negotiated vars) or to their respective IPCP,
  LCP or CCP.
o Enable rolling throughput statistics by default.
o Remove the `display' command.  These values now appear in
  `show bundle', `show ipcp', `show ccp' and `show lcp'.
o Initialise auth name & key at bundle create time (oops).
o Rename pppd-deflate (the id-24 hack) to deflate24.
o Don't send both a REJ and a NAK to an IPCP or LCP REQ.
  Favour the REJ (already done at the CCP level).
o Recurse in datalink_UpdateSet() when we change state, otherwise
  we end up setting no descriptors and getting jammed in the
  imminent select() instead of doing the dial/login/hangup.
o Display our CHAP encryption method despite being built with DES.
o Display VJ as not negotiated in ``show ipcp'' when necessary.
This commit is contained in:
Brian Somers 1998-04-16 00:26:21 +00:00
parent 250920922b
commit 1342caed9c
29 changed files with 543 additions and 413 deletions

View File

@ -1,11 +1,11 @@
# $Id: Makefile,v 1.36.2.8 1998/04/03 19:21:03 brian Exp $
# $Id: Makefile,v 1.36.2.9 1998/04/03 19:25:19 brian Exp $
PROG= ppp
SRCS= arp.c async.c auth.c bundle.c ccp.c chap.c chat.c command.c \
datalink.c deflate.c defs.c filter.c fsm.c hdlc.c id.c ip.c \
ipcp.c iplist.c lcp.c link.c log.c lqr.c main.c mbuf.c modem.c \
mp.c pap.c physical.c pred.c prompt.c route.c server.c sig.c \
slcompress.c systems.c throughput.c timer.c tun.c vars.c vjcomp.c
slcompress.c systems.c throughput.c timer.c tun.c vjcomp.c
CFLAGS+=-Wall -Wpointer-arith
LDADD+= -lmd -lcrypt -lutil -lz
DPADD+= ${LIBMD} ${LIBCRYPT} ${LIBUTIL} ${LIBZ}

View File

@ -17,7 +17,7 @@
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* $Id: auth.c,v 1.27.2.19 1998/04/06 09:12:22 brian Exp $
* $Id: auth.c,v 1.27.2.20 1998/04/07 00:53:18 brian Exp $
*
* TODO:
* o Implement check against with registered IP addresses.
@ -40,7 +40,6 @@
#include "throughput.h"
#include "slcompress.h"
#include "ipcp.h"
#include "vars.h"
#include "auth.h"
#include "systems.h"
#include "lcp.h"
@ -126,7 +125,7 @@ AuthValidate(struct bundle *bundle, const char *fname, const char *system,
}
#ifndef NOPASSWDAUTH
if (Enabled(ConfPasswdAuth))
if (Enabled(bundle, OPT_PASSWDAUTH))
return auth_CheckPasswd(system, "*", key);
#endif

View File

@ -23,7 +23,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $Id: bundle.c,v 1.1.2.45 1998/04/11 21:50:37 brian Exp $
* $Id: bundle.c,v 1.1.2.46 1998/04/14 23:17:24 brian Exp $
*/
#include <sys/types.h>
@ -518,6 +518,9 @@ bundle_Create(const char *prefix, struct prompt *prompt, int type)
bundle.fsm.object = &bundle;
bundle.cfg.idle_timeout = NCP_IDLE_TIMEOUT;
*bundle.cfg.auth.name = '\0';
*bundle.cfg.auth.key = '\0';
bundle.cfg.opt = OPT_IDCHECK | OPT_LOOPBACK | OPT_THROUGHPUT | OPT_UTMP;
bundle.phys_type = type;
bundle.links = datalink_Create("default", &bundle, &bundle.fsm, type);
@ -535,6 +538,7 @@ bundle_Create(const char *prefix, struct prompt *prompt, int type)
bundle.desc.Read = bundle_DescriptorRead;
bundle.desc.Write = bundle_DescriptorWrite;
/* XXX: what's an IPCP link anyway :-( */
ipcp_Init(&bundle.ncp.ipcp, &bundle, &bundle.links->physical->link,
&bundle.fsm);
@ -850,6 +854,12 @@ bundle_ShowLinks(struct cmdargs const *arg)
return 0;
}
static const char *
optval(struct bundle *bundle, int bit)
{
return (bundle->cfg.opt & bit) ? "enabled" : "disabled";
}
int
bundle_ShowStatus(struct cmdargs const *arg)
{
@ -870,6 +880,21 @@ bundle_ShowStatus(struct cmdargs const *arg)
} else
prompt_Printf(arg->prompt, "disabled\n");
prompt_Printf(arg->prompt, " ID check: %s\n",
optval(arg->bundle, OPT_IDCHECK));
prompt_Printf(arg->prompt, " Loopback: %s\n",
optval(arg->bundle, OPT_LOOPBACK));
prompt_Printf(arg->prompt, " MS Ext: %s\n",
optval(arg->bundle, OPT_MSEXT));
prompt_Printf(arg->prompt, " PasswdAuth: %s\n",
optval(arg->bundle, OPT_PASSWDAUTH));
prompt_Printf(arg->prompt, " Proxy: %s\n",
optval(arg->bundle, OPT_PROXY));
prompt_Printf(arg->prompt, " Throughput: %s\n",
optval(arg->bundle, OPT_THROUGHPUT));
prompt_Printf(arg->prompt, " Utmp: %s\n",
optval(arg->bundle, OPT_UTMP));
return 0;
}

View File

@ -23,7 +23,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $Id: bundle.h,v 1.1.2.27 1998/04/10 13:19:01 brian Exp $
* $Id: bundle.h,v 1.1.2.28 1998/04/11 21:50:39 brian Exp $
*/
#define PHASE_DEAD 0 /* Link is dead */
@ -32,6 +32,16 @@
#define PHASE_NETWORK 3 /* We're alive ! */
#define PHASE_TERMINATE 4 /* Terminating link */
/* cfg.opt bit settings */
#define OPT_IDCHECK 0x01
#define OPT_LOOPBACK 0x02
#define OPT_MSEXT 0x04
#define OPT_PASSWDAUTH 0x08
#define OPT_PROXY 0x10
#define OPT_THROUGHPUT 0x20
#define OPT_UTMP 0x40
#define Enabled(b, o) ((b)->cfg.opt & (o))
struct datalink;
struct physical;
@ -61,6 +71,7 @@ struct bundle {
char name[50]; /* PAP/CHAP system name */
char key[50]; /* PAP/CHAP key */
} auth;
unsigned opt; /* Uses OPT_ bits from above */
} cfg;
struct {

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.32 1998/04/06 09:12:23 brian Exp $
* $Id: ccp.c,v 1.30.2.33 1998/04/07 00:53:22 brian Exp $
*
* TODO:
* o Support other compression protocols
@ -40,7 +40,6 @@
#include "lcpproto.h"
#include "lcp.h"
#include "ccp.h"
#include "vars.h"
#include "pred.h"
#include "deflate.h"
#include "throughput.h"
@ -100,7 +99,7 @@ static char const *cftypes[] = {
"???",
"LZS-DCP", /* 23: LZS-DCP Compression Protocol (rfc1967) */
"MAGNALINK/DEFLATE", /* 24: Magnalink Variable Resource (rfc1975) */
/* 24: Deflate (according to pppd-2.3.1) */
/* 24: Deflate (according to pppd-2.3.*) */
"DCE", /* 25: Data Circuit-Terminating Equip (rfc1976) */
"DEFLATE", /* 26: Deflate (rfc1979) */
};
@ -139,10 +138,16 @@ ccp_ReportStatus(struct cmdargs const *arg)
ccp->compin, ccp->uncompin);
prompt_Printf(arg->prompt, "\n Defaults: ");
prompt_Printf(arg->prompt, "deflate windows: ");
prompt_Printf(arg->prompt, "FSM retry = %us\n", ccp->cfg.fsmretry);
prompt_Printf(arg->prompt, " deflate windows: ");
prompt_Printf(arg->prompt, "incoming = %d, ", ccp->cfg.deflate.in.winsize);
prompt_Printf(arg->prompt, "outgoing = %d\n", ccp->cfg.deflate.out.winsize);
prompt_Printf(arg->prompt, " FSM retry = %us\n", ccp->cfg.fsmretry);
prompt_Printf(arg->prompt, " DEFLATE: %s\n",
command_ShowNegval(ccp->cfg.neg[CCP_NEG_DEFLATE]));
prompt_Printf(arg->prompt, " PREDICTOR1: %s\n",
command_ShowNegval(ccp->cfg.neg[CCP_NEG_PRED1]));
prompt_Printf(arg->prompt, " DEFLATE24: %s\n",
command_ShowNegval(ccp->cfg.neg[CCP_NEG_DEFLATE24]));
return 0;
}
@ -160,6 +165,9 @@ ccp_Init(struct ccp *ccp, struct bundle *bundle, struct link *l,
ccp->cfg.deflate.in.winsize = 0;
ccp->cfg.deflate.out.winsize = 15;
ccp->cfg.fsmretry = DEF_FSMRETRY;
ccp->cfg.neg[CCP_NEG_DEFLATE] = NEG_ENABLED|NEG_ACCEPTED;
ccp->cfg.neg[CCP_NEG_PRED1] = NEG_ENABLED|NEG_ACCEPTED;
ccp->cfg.neg[CCP_NEG_DEFLATE24] = 0;
ccp_Setup(ccp);
}
@ -206,7 +214,8 @@ CcpSendConfigReq(struct fsm *fp)
ccp->my_proto = -1;
ccp->out.algorithm = -1;
for (f = 0; f < NALGORITHMS; f++)
if (Enabled(algorithm[f]->Conf) && !REJECTED(ccp, algorithm[f]->id)) {
if (IsEnabled(ccp->cfg.neg[algorithm[f]->Neg]) &&
!REJECTED(ccp, algorithm[f]->id)) {
if (alloc) {
*o = (struct ccp_opt *)malloc(sizeof(struct ccp_opt));
(*o)->val.id = algorithm[f]->id;
@ -385,7 +394,8 @@ CcpDecodeConfig(struct fsm *fp, u_char *cp, int plen, int mode_type,
switch (mode_type) {
case MODE_REQ:
if (Acceptable(algorithm[f]->Conf) && ccp->in.algorithm == -1) {
if (IsAccepted(ccp->cfg.neg[algorithm[f]->Neg]) &&
ccp->in.algorithm == -1) {
memcpy(&ccp->in.opt, cp, length);
switch ((*algorithm[f]->i.Set)(&ccp->in.opt, &ccp->cfg)) {
case MODE_REJ:
@ -435,22 +445,23 @@ CcpDecodeConfig(struct fsm *fp, u_char *cp, int plen, int mode_type,
cp += cp[1];
}
if (mode_type != MODE_NOP && dec->rejend != dec->rej) {
/* rejects are preferred */
dec->ackend = dec->ack;
dec->nakend = dec->nak;
if (ccp->in.state == NULL) {
ccp->his_proto = -1;
ccp->in.algorithm = -1;
if (mode_type != MODE_NOP)
if (dec->rejend != dec->rej) {
/* rejects are preferred */
dec->ackend = dec->ack;
dec->nakend = dec->nak;
if (ccp->in.state == NULL) {
ccp->his_proto = -1;
ccp->in.algorithm = -1;
}
} else if (dec->nakend != dec->nak) {
/* then NAKs */
dec->ackend = dec->ack;
if (ccp->in.state == NULL) {
ccp->his_proto = -1;
ccp->in.algorithm = -1;
}
}
} else if (mode_type != MODE_NOP && dec->nakend != dec->nak) {
/* then NAKs */
dec->ackend = dec->ack;
if (ccp->in.state == NULL) {
ccp->his_proto = -1;
ccp->in.algorithm = -1;
}
}
}
void

View File

@ -15,7 +15,7 @@
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* $Id: ccp.h,v 1.14.2.15 1998/04/03 19:23:54 brian Exp $
* $Id: ccp.h,v 1.14.2.16 1998/04/07 00:53:24 brian Exp $
*
* TODO:
*/
@ -35,6 +35,11 @@
#define TY_PPPD_DEFLATE 24 /* Deflate (gzip) - (mis) numbered by pppd */
#define TY_DEFLATE 26 /* Deflate (gzip) - rfc 1979 */
#define CCP_NEG_DEFLATE 0
#define CCP_NEG_PRED1 1
#define CCP_NEG_DEFLATE24 2
#define CCP_NEG_TOTAL 3
struct mbuf;
struct ccp_config {
@ -44,6 +49,7 @@ struct ccp_config {
} in, out;
} deflate;
u_int fsmretry; /* FSM retry frequency */
unsigned neg[CCP_NEG_TOTAL];
};
struct ccp_opt {
@ -86,7 +92,7 @@ struct ccp {
struct ccp_algorithm {
int id;
int Conf; /* A Conf value from vars.h */
int Neg; /* ccp_config neg array item */
const char *(*Disp)(struct lcp_opt *);
struct {
int (*Set)(struct lcp_opt *, const struct ccp_config *);

View File

@ -17,7 +17,7 @@
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* $Id: chap.c,v 1.28.2.22 1998/04/06 09:12:24 brian Exp $
* $Id: chap.c,v 1.28.2.23 1998/04/07 00:53:25 brian Exp $
*
* TODO:
*/
@ -228,7 +228,8 @@ RecvChapTalk(struct bundle *bundle, struct fsmheader *chp, struct mbuf *bp,
*/
if (memcmp(cp, cdigest, 16) == 0) {
ChapOutput(physical, CHAP_SUCCESS, chp->id, "Welcome!!", 10);
Physical_Login(physical, name);
if (Enabled(bundle, OPT_UTMP))
Physical_Login(physical, name);
if (physical->link.lcp.auth_iwait == 0)
/*

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.59 1998/04/11 21:50:44 brian Exp $
* $Id: command.c,v 1.131.2.60 1998/04/14 23:17:01 brian Exp $
*
*/
#include <sys/types.h>
@ -62,7 +62,6 @@
#include "lqr.h"
#include "hdlc.h"
#include "loadalias.h"
#include "vars.h"
#include "systems.h"
#include "filter.h"
#include "descriptor.h"
@ -81,6 +80,43 @@
#include "chap.h"
#include "datalink.h"
/* ``set'' values */
#define VAR_AUTHKEY 0
#define VAR_DIAL 1
#define VAR_LOGIN 2
#define VAR_AUTHNAME 3
#define VAR_WINSIZE 4
#define VAR_DEVICE 5
#define VAR_ACCMAP 6
#define VAR_MRU 7
#define VAR_MTU 8
#define VAR_OPENMODE 9
#define VAR_PHONE 10
#define VAR_HANGUP 11
#define VAR_ENC 12
#define VAR_IDLETIMEOUT 13
#define VAR_LQRPERIOD 14
#define VAR_LCPRETRY 15
#define VAR_CHAPRETRY 16
#define VAR_PAPRETRY 17
#define VAR_CCPRETRY 18
#define VAR_IPCPRETRY 19
/* ``accept|deny|disable|enable'' masks */
#define NEG_HISMASK (1)
#define NEG_MYMASK (2)
/* ``accept|deny|disable|enable'' values */
#define NEG_ACFCOMP 40
#define NEG_CHAP 41
#define NEG_DEFLATE 42
#define NEG_LQR 43
#define NEG_PAP 44
#define NEG_PPPDDEFLATE 45
#define NEG_PRED1 46
#define NEG_PROTOCOMP 47
#define NEG_VJCOMP 48
static int ShowCommand(struct cmdargs const *);
static int TerminalCommand(struct cmdargs const *);
static int QuitCommand(struct cmdargs const *);
@ -91,6 +127,7 @@ static int SetCommand(struct cmdargs const *);
static int LinkCommand(struct cmdargs const *);
static int AddCommand(struct cmdargs const *);
static int DeleteCommand(struct cmdargs const *);
static int NegotiateCommand(struct cmdargs const *);
#ifndef NOALIAS
static int AliasCommand(struct cmdargs const *);
static int AliasEnable(struct cmdargs const *);
@ -351,7 +388,7 @@ FgShellCommand(struct cmdargs const *arg)
}
static struct cmdtab const Commands[] = {
{"accept", NULL, AcceptCommand, LOCAL_AUTH,
{"accept", NULL, NegotiateCommand, LOCAL_AUTH | LOCAL_CX_OPT,
"accept option request", "accept option .."},
{"add", NULL, AddCommand, LOCAL_AUTH,
"add route", "add dest mask gateway", NULL},
@ -373,17 +410,15 @@ static struct cmdtab const Commands[] = {
"delete route", "delete dest", NULL},
{NULL, "delete!", DeleteCommand, LOCAL_AUTH,
"delete a route if it exists", "delete! dest", (void *)1},
{"deny", NULL, DenyCommand, LOCAL_AUTH,
{"deny", NULL, NegotiateCommand, LOCAL_AUTH | LOCAL_CX_OPT,
"Deny option request", "deny option .."},
{"dial", "call", DialCommand, LOCAL_AUTH | LOCAL_CX_OPT,
"Dial and login", "dial|call [remote]"},
{"disable", NULL, DisableCommand, LOCAL_AUTH,
{"disable", NULL, NegotiateCommand, LOCAL_AUTH | LOCAL_CX_OPT,
"Disable option", "disable option .."},
{"display", NULL, DisplayCommand, LOCAL_AUTH,
"Display option configs", "display"},
{"down", NULL, DownCommand, LOCAL_AUTH | LOCAL_CX,
"Generate a down event", "down"},
{"enable", NULL, EnableCommand, LOCAL_AUTH,
{"enable", NULL, NegotiateCommand, LOCAL_AUTH | LOCAL_CX_OPT,
"Enable option", "enable option .."},
{"link", "datalink", LinkCommand, LOCAL_AUTH,
"Link specific commands", "link name command ..."},
@ -462,7 +497,7 @@ static int
ShowVersion(struct cmdargs const *arg)
{
static char VarVersion[] = "PPP Version 2.0-beta";
static char VarLocalVersion[] = "$Date: 1998/04/11 21:50:44 $";
static char VarLocalVersion[] = "$Date: 1998/04/14 23:17:01 $";
prompt_Printf(arg->prompt, "%s - %s \n", VarVersion, VarLocalVersion);
return 0;
@ -1555,3 +1590,219 @@ ChooseLink(struct cmdargs const *arg)
return dl ? &dl->physical->link : NULL;
}
}
static const char *
ident_cmd(const char *cmd, unsigned *keep, unsigned *add)
{
const char *result;
switch (*cmd) {
case 'A':
case 'a':
result = "accept";
*keep = NEG_MYMASK;
*add = NEG_ACCEPTED;
break;
case 'D':
case 'd':
switch (cmd[1]) {
case 'E':
case 'e':
result = "deny";
*keep = NEG_MYMASK;
*add = 0;
break;
case 'I':
case 'i':
result = "disable";
*keep = NEG_HISMASK;
*add = 0;
break;
default:
return NULL;
}
break;
case 'E':
case 'e':
result = "enable";
*keep = NEG_HISMASK;
*add = NEG_ENABLED;
break;
default:
return NULL;
}
return result;
}
static int
OptSet(struct cmdargs const *arg)
{
int bit = (int)arg->cmd->args;
const char *cmd;
unsigned keep; /* Keep these bits */
unsigned add; /* Add these bits */
if ((cmd = ident_cmd(arg->argv[arg->argn-2], &keep, &add)) == NULL)
return 1;
if (add)
arg->bundle->cfg.opt |= bit;
else
arg->bundle->cfg.opt &= ~bit;
return 0;
}
static int
NegotiateSet(struct cmdargs const *arg)
{
int param = (int)arg->cmd->args;
struct link *l = ChooseLink(arg); /* AUTH_CX_OPT uses this */
struct datalink *cx = arg->cx; /* AUTH_CX uses this */
const char *cmd;
unsigned keep; /* Keep these bits */
unsigned add; /* Add these bits */
if ((cmd = ident_cmd(arg->argv[arg->argn-2], &keep, &add)) == NULL)
return 1;
if ((arg->cmd->lauth & LOCAL_CX) && !cx) {
LogPrintf(LogWARN, "%s %s: No context (use the `link' command)\n",
cmd, arg->cmd->name);
return 2;
} else if (cx && !(arg->cmd->lauth & (LOCAL_CX|LOCAL_CX_OPT))) {
LogPrintf(LogWARN, "%s %s: Redundant context (%s) ignored\n",
cmd, arg->cmd->name, cx->name);
cx = NULL;
}
switch (param) {
case NEG_ACFCOMP:
cx->physical->link.lcp.cfg.acfcomp &= keep;
cx->physical->link.lcp.cfg.acfcomp |= add;
break;
case NEG_CHAP:
cx->physical->link.lcp.cfg.chap &= keep;
cx->physical->link.lcp.cfg.chap |= add;
break;
case NEG_DEFLATE:
l->ccp.cfg.neg[CCP_NEG_DEFLATE] &= keep;
l->ccp.cfg.neg[CCP_NEG_DEFLATE] |= add;
break;
case NEG_LQR:
cx->physical->link.lcp.cfg.lqr &= keep;
cx->physical->link.lcp.cfg.lqr |= add;
break;
case NEG_PAP:
cx->physical->link.lcp.cfg.pap &= keep;
cx->physical->link.lcp.cfg.pap |= add;
break;
case NEG_PPPDDEFLATE:
l->ccp.cfg.neg[CCP_NEG_DEFLATE24] &= keep;
l->ccp.cfg.neg[CCP_NEG_DEFLATE24] |= add;
break;
case NEG_PRED1:
l->ccp.cfg.neg[CCP_NEG_PRED1] &= keep;
l->ccp.cfg.neg[CCP_NEG_PRED1] |= add;
break;
case NEG_PROTOCOMP:
cx->physical->link.lcp.cfg.protocomp &= keep;
cx->physical->link.lcp.cfg.protocomp |= add;
break;
case NEG_VJCOMP:
arg->bundle->ncp.ipcp.cfg.vj.neg &= keep;
arg->bundle->ncp.ipcp.cfg.vj.neg |= add;
break;
}
return 0;
}
static struct cmdtab const NegotiateCommands[] = {
{"idcheck", NULL, OptSet, LOCAL_AUTH, "Check reply FSM ids",
"disable|enable", (const void *)OPT_IDCHECK},
{"loopback", NULL, OptSet, LOCAL_AUTH, "Loop packets for local iface",
"disable|enable", (const void *)OPT_LOOPBACK},
{"msext", NULL, OptSet, LOCAL_AUTH, "Send NS & NBNS values",
"disable|enable", (const void *)OPT_MSEXT},
{"passwdauth", NULL, OptSet, LOCAL_AUTH, "Use passwd file",
"disable|enable", (const void *)OPT_PASSWDAUTH},
{"proxy", NULL, OptSet, LOCAL_AUTH, "Create proxy ARP entry",
"disable|enable", (const void *)OPT_PROXY},
{"throughput", NULL, OptSet, LOCAL_AUTH, "Rolling throughput",
"disable|enable", (const void *)OPT_THROUGHPUT},
{"utmp", NULL, OptSet, LOCAL_AUTH, "Log connections in utmp",
"disable|enable", (const void *)OPT_UTMP},
#define OPT_MAX 7 /* accept/deny allowed below and not above */
{"acfcomp", NULL, NegotiateSet, LOCAL_AUTH | LOCAL_CX,
"Address & Control field compression", "accept|deny|disable|enable",
(const void *)NEG_ACFCOMP},
{"chap", NULL, NegotiateSet, LOCAL_AUTH | LOCAL_CX,
"Challenge Handshake Authentication Protocol", "accept|deny|disable|enable",
(const void *)NEG_CHAP},
{"deflate", NULL, NegotiateSet, LOCAL_AUTH | LOCAL_CX_OPT,
"Deflate compression", "accept|deny|disable|enable",
(const void *)NEG_DEFLATE},
{"lqr", NULL, NegotiateSet, LOCAL_AUTH | LOCAL_CX,
"Link Quality Reports", "accept|deny|disable|enable",
(const void *)NEG_LQR},
{"pap", NULL, NegotiateSet, LOCAL_AUTH | LOCAL_CX,
"Password Authentication protocol", "accept|deny|disable|enable",
(const void *)NEG_PAP},
{"deflate24", NULL, NegotiateSet, LOCAL_AUTH | LOCAL_CX_OPT,
"Deflate (type 24) compression", "accept|deny|disable|enable",
(const void *)NEG_PPPDDEFLATE},
{"pred1", NULL, NegotiateSet, LOCAL_AUTH | LOCAL_CX_OPT,
"Predictor 1 compression", "accept|deny|disable|enable",
(const void *)NEG_PRED1},
{"protocomp", NULL, NegotiateSet, LOCAL_AUTH | LOCAL_CX,
"Protocol field compression", "accept|deny|disable|enable",
(const void *)NEG_PROTOCOMP},
{"vjcomp", NULL, NegotiateSet, LOCAL_AUTH,
"Van Jacobson header compression", "accept|deny|disable|enable",
(const void *)NEG_VJCOMP},
{"help", "?", HelpCommand, LOCAL_AUTH | LOCAL_NO_AUTH,
"Display this message", "accept|deny|disable|enable help|? [value]",
NegotiateCommands},
{NULL, NULL, NULL},
};
static int
NegotiateCommand(struct cmdargs const *arg)
{
if (arg->argc > arg->argn) {
char const *argv[3];
unsigned keep, add;
int n;
if ((argv[0] = ident_cmd(arg->argv[arg->argn-1], &keep, &add)) == NULL)
return -1;
argv[2] = NULL;
for (n = arg->argn; n < arg->argc; n++) {
argv[1] = arg->argv[n];
FindExec(arg->bundle, NegotiateCommands + (keep == NEG_HISMASK ?
0 : OPT_MAX), 2, 1, argv, arg->prompt, arg->cx);
}
} else if (arg->prompt)
prompt_Printf(arg->prompt, "Use `%s ?' to get a list or `%s ? <var>' for"
" syntax help.\n", arg->argv[arg->argn], arg->argv[arg->argn] );
else
LogPrintf(LogWARN, "%s command must have arguments\n",
arg->argv[arg->argn] );
return 0;
}
const char *
command_ShowNegval(unsigned val)
{
switch (val&3) {
case 1: return "disabled & accepted";
case 2: return "enabled & denied";
case 3: return "enabled & accepted";
}
return "disabled & denied";
}

View File

@ -15,7 +15,7 @@
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* $Id: command.h,v 1.12.2.9 1998/04/07 00:53:34 brian Exp $
* $Id: command.h,v 1.12.2.10 1998/04/14 23:17:03 brian Exp $
*
* TODO:
*/
@ -46,26 +46,10 @@ struct cmdtab {
const void *args;
};
#define VAR_AUTHKEY 0
#define VAR_DIAL 1
#define VAR_LOGIN 2
#define VAR_AUTHNAME 3
#define VAR_WINSIZE 4
#define VAR_DEVICE 5
#define VAR_ACCMAP 6
#define VAR_MRU 7
#define VAR_MTU 8
#define VAR_OPENMODE 9
#define VAR_PHONE 10
#define VAR_HANGUP 11
#define VAR_ENC 12
#define VAR_IDLETIMEOUT 13
#define VAR_LQRPERIOD 14
#define VAR_LCPRETRY 15
#define VAR_CHAPRETRY 16
#define VAR_PAPRETRY 17
#define VAR_CCPRETRY 18
#define VAR_IPCPRETRY 19
#define NEG_ACCEPTED (1)
#define NEG_ENABLED (2)
#define IsAccepted(x) ((x) & NEG_ACCEPTED)
#define IsEnabled(x) ((x) & NEG_ENABLED)
extern int IsInteractive(struct prompt *);
extern void InterpretCommand(char *, int, int *, char ***);
@ -74,3 +58,4 @@ extern void RunCommand(struct bundle *, int, char const *const *,
extern void DecodeCommand(struct bundle *, char *, int, struct prompt *,
const char *);
extern struct link *ChooseLink(struct cmdargs const *);
const char *command_ShowNegval(unsigned);

View File

@ -23,7 +23,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $Id: datalink.c,v 1.1.2.36 1998/04/10 13:19:05 brian Exp $
* $Id: datalink.c,v 1.1.2.37 1998/04/14 23:17:04 brian Exp $
*/
#include <sys/types.h>
@ -223,6 +223,7 @@ datalink_UpdateSet(struct descriptor *d, fd_set *r, fd_set *w, fd_set *e,
LogPrintf(LogCHAT, "%s: Dial attempt %u of %d\n",
dl->name, dl->cfg.dial.max - dl->dial_tries,
dl->cfg.dial.max);
return datalink_UpdateSet(d, r, w, e, n);
} else
datalink_LoginDone(dl);
} else {
@ -263,7 +264,7 @@ datalink_UpdateSet(struct descriptor *d, fd_set *r, fd_set *w, fd_set *e,
LogPrintf(LogPHASE, "%s: Entering LOGIN state\n", dl->name);
dl->state = DATALINK_LOGIN;
chat_Init(&dl->chat, dl->physical, dl->cfg.script.login, 0, NULL);
break;
return datalink_UpdateSet(d, r, w, e, n);
case DATALINK_LOGIN:
datalink_LoginDone(dl);
break;
@ -282,7 +283,7 @@ datalink_UpdateSet(struct descriptor *d, fd_set *r, fd_set *w, fd_set *e,
dl->state = DATALINK_HANGUP;
modem_Offline(dl->physical);
chat_Init(&dl->chat, dl->physical, dl->cfg.script.hangup, 1, NULL);
break;
return datalink_UpdateSet(d, r, w, e, n);
}
break;
}
@ -716,17 +717,15 @@ void
datalink_Show(struct datalink *dl, struct prompt *prompt)
{
prompt_Printf(prompt, "Name: %s\n", dl->name);
prompt_Printf(prompt, " State: %s\n", datalink_State(dl));
#ifdef HAVE_DES
prompt_Printf(arg->prompt, " Encryption = %s\n",
prompt_Printf(prompt, " State: %s\n", datalink_State(dl));
prompt_Printf(prompt, " CHAP Encryption: %s\n",
dl->chap.using_MSChap ? "MSChap" : "MD5" );
#endif
prompt_Printf(prompt, "\nDefaults:\n");
prompt_Printf(prompt, " Phone List: %s\n", dl->cfg.phone.list);
prompt_Printf(prompt, " Phone List: %s\n", dl->cfg.phone.list);
if (dl->cfg.dial.max)
prompt_Printf(prompt, " Dial tries: %d, delay ", dl->cfg.dial.max);
prompt_Printf(prompt, " Dial tries: %d, delay ", dl->cfg.dial.max);
else
prompt_Printf(prompt, " Dial tries: infinite, delay ");
prompt_Printf(prompt, " Dial tries: infinite, delay ");
if (dl->cfg.dial.next_timeout > 0)
prompt_Printf(prompt, "%ds/", dl->cfg.dial.next_timeout);
else
@ -735,14 +734,14 @@ datalink_Show(struct datalink *dl, struct prompt *prompt)
prompt_Printf(prompt, "%ds\n", dl->cfg.dial.timeout);
else
prompt_Printf(prompt, "random\n");
prompt_Printf(prompt, " Reconnect tries: %d, delay ", dl->cfg.reconnect.max);
prompt_Printf(prompt, " Reconnect tries: %d, delay ", dl->cfg.reconnect.max);
if (dl->cfg.reconnect.timeout > 0)
prompt_Printf(prompt, "%ds\n", dl->cfg.reconnect.timeout);
else
prompt_Printf(prompt, "random\n");
prompt_Printf(prompt, " Dial Script: %s\n", dl->cfg.script.dial);
prompt_Printf(prompt, " Login Script: %s\n", dl->cfg.script.login);
prompt_Printf(prompt, " Hangup Script: %s\n", dl->cfg.script.hangup);
prompt_Printf(prompt, " Dial Script: %s\n", dl->cfg.script.dial);
prompt_Printf(prompt, " Login Script: %s\n", dl->cfg.script.login);
prompt_Printf(prompt, " Hangup Script: %s\n", dl->cfg.script.hangup);
}
int

View File

@ -23,7 +23,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $Id: deflate.c,v 1.6.4.9 1998/04/06 09:12:26 brian Exp $
* $Id: deflate.c,v 1.6.4.10 1998/04/07 00:53:37 brian Exp $
*/
#include <sys/types.h>
@ -34,7 +34,6 @@
#include "mbuf.h"
#include "log.h"
#include "vars.h"
#include "timer.h"
#include "lqr.h"
#include "hdlc.h"
@ -551,7 +550,7 @@ DeflateTermOutput(void *v)
const struct ccp_algorithm PppdDeflateAlgorithm = {
TY_PPPD_DEFLATE, /* pppd (wrongly) expects this ``type'' field */
ConfPppdDeflate,
CCP_NEG_DEFLATE24,
DeflateDispOpts,
{
DeflateSetOptsInput,
@ -573,7 +572,7 @@ const struct ccp_algorithm PppdDeflateAlgorithm = {
const struct ccp_algorithm DeflateAlgorithm = {
TY_DEFLATE, /* rfc 1979 */
ConfDeflate,
CCP_NEG_DEFLATE,
DeflateDispOpts,
{
DeflateSetOptsInput,

View File

@ -17,13 +17,15 @@
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* $Id: fsm.c,v 1.27.2.26 1998/04/06 09:12:27 brian Exp $
* $Id: fsm.c,v 1.27.2.27 1998/04/07 00:53:41 brian Exp $
*
* TODO:
* o Refer loglevel for log output
* o Better option log display
*/
#include <sys/types.h>
#include <netinet/in.h>
#include <netinet/in_systm.h>
#include <netinet/ip.h>
#include <string.h>
#include <termios.h>
@ -33,17 +35,22 @@
#include "defs.h"
#include "timer.h"
#include "fsm.h"
#include "iplist.h"
#include "lqr.h"
#include "hdlc.h"
#include "lcpproto.h"
#include "throughput.h"
#include "slcompress.h"
#include "ipcp.h"
#include "filter.h"
#include "descriptor.h"
#include "lcp.h"
#include "ccp.h"
#include "vars.h"
#include "throughput.h"
#include "async.h"
#include "link.h"
#include "descriptor.h"
#include "mp.h"
#include "bundle.h"
#include "async.h"
#include "physical.h"
#include "lcpproto.h"
static void FsmSendConfigReq(struct fsm *);
static void FsmSendTerminateReq(struct fsm *);
@ -885,7 +892,8 @@ FsmInput(struct fsm *fp, struct mbuf *bp)
bp->cnt -= sizeof(struct fsmheader);
codep = FsmCodes + lhp->code - 1;
if (lhp->id != fp->reqid && codep->check_reqid && Enabled(ConfIdCheck)) {
if (lhp->id != fp->reqid && codep->check_reqid &&
Enabled(fp->bundle, OPT_IDCHECK)) {
LogPrintf(fp->LogLevel, "Recv%s(%d), dropped (expected %d)\n",
codep->name, lhp->id, fp->reqid);
return;
@ -898,10 +906,10 @@ FsmInput(struct fsm *fp, struct mbuf *bp)
LogMemory();
if (codep->inc_reqid && (lhp->id == fp->reqid ||
(!Enabled(ConfIdCheck) && codep->check_reqid)))
(!Enabled(fp->bundle, OPT_IDCHECK) && codep->check_reqid)))
fp->reqid++; /* That's the end of that ``exchange''.... */
(codep->recv)(fp, lhp, bp);
(*codep->recv)(fp, lhp, bp);
if (LogIsKept(LogDEBUG))
LogMemory();

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.35 1998/04/10 13:19:08 brian Exp $
* $Id: ipcp.c,v 1.50.2.36 1998/04/14 23:17:07 brian Exp $
*
* TODO:
* o More RFC1772 backwoard compatibility
@ -54,7 +54,6 @@
#include "filter.h"
#include "descriptor.h"
#include "loadalias.h"
#include "vars.h"
#include "vjcomp.h"
#include "lqr.h"
#include "hdlc.h"
@ -142,34 +141,38 @@ ReportIpcpStatus(struct cmdargs const *arg)
prompt_Printf(arg->prompt, "%s [%s]\n", arg->bundle->ncp.ipcp.fsm.name,
State2Nam(arg->bundle->ncp.ipcp.fsm.state));
if (arg->bundle->ncp.ipcp.fsm.state == ST_OPENED) {
prompt_Printf(arg->prompt, " His side: %s, %s\n",
prompt_Printf(arg->prompt, " His side: %s, %s\n",
inet_ntoa(arg->bundle->ncp.ipcp.peer_ip),
vj2asc(arg->bundle->ncp.ipcp.peer_compproto));
prompt_Printf(arg->prompt, " My side: %s, %s\n",
prompt_Printf(arg->prompt, " My side: %s, %s\n",
inet_ntoa(arg->bundle->ncp.ipcp.my_ip),
vj2asc(arg->bundle->ncp.ipcp.my_compproto));
}
prompt_Printf(arg->prompt, "\nDefaults:\n");
prompt_Printf(arg->prompt, " My Address: %s/%d\n",
prompt_Printf(arg->prompt, " My Address: %s/%d\n",
inet_ntoa(arg->bundle->ncp.ipcp.cfg.my_range.ipaddr),
arg->bundle->ncp.ipcp.cfg.my_range.width);
if (iplist_isvalid(&arg->bundle->ncp.ipcp.cfg.peer_list))
prompt_Printf(arg->prompt, " His Address: %s\n",
prompt_Printf(arg->prompt, " His Address: %s\n",
arg->bundle->ncp.ipcp.cfg.peer_list.src);
else
prompt_Printf(arg->prompt, " His Address: %s/%d\n",
prompt_Printf(arg->prompt, " His Address: %s/%d\n",
inet_ntoa(arg->bundle->ncp.ipcp.cfg.peer_range.ipaddr),
arg->bundle->ncp.ipcp.cfg.peer_range.width);
prompt_Printf(arg->prompt, "\nNegotiation:\n");
if (arg->bundle->ncp.ipcp.cfg.HaveTriggerAddress)
prompt_Printf(arg->prompt, " Negotiation(trigger): %s\n",
prompt_Printf(arg->prompt, " Trigger Address: %s\n",
inet_ntoa(arg->bundle->ncp.ipcp.cfg.TriggerAddress));
else
prompt_Printf(arg->prompt, " Negotiation(trigger): MYADDR\n");
prompt_Printf(arg->prompt, " Initial VJ slots: %d\n",
arg->bundle->ncp.ipcp.cfg.VJInitSlots);
prompt_Printf(arg->prompt, " Initial VJ compression: %s\n",
arg->bundle->ncp.ipcp.cfg.VJInitComp ? "on" : "off");
prompt_Printf(arg->prompt, " Trigger Address: MYADDR\n");
prompt_Printf(arg->prompt, " VJ compression: %s (%d slots %s slot compression)\n",
command_ShowNegval(arg->bundle->ncp.ipcp.cfg.vj.neg),
arg->bundle->ncp.ipcp.cfg.vj.slots,
arg->bundle->ncp.ipcp.cfg.vj.slotcomp ? "with" : "without"
);
prompt_Printf(arg->prompt, "\n");
throughput_disp(&arg->bundle->ncp.ipcp.throughput, arg->prompt);
@ -188,13 +191,13 @@ SetInitVJ(struct cmdargs const *arg)
slots = atoi(arg->argv[arg->argn+1]);
if (slots < 4 || slots > 16)
return 1;
arg->bundle->ncp.ipcp.cfg.VJInitSlots = slots;
arg->bundle->ncp.ipcp.cfg.vj.slots = slots;
return 0;
} else if (!strcasecmp(arg->argv[arg->argn], "slotcomp")) {
if (!strcasecmp(arg->argv[arg->argn+1], "on"))
arg->bundle->ncp.ipcp.cfg.VJInitComp = 1;
arg->bundle->ncp.ipcp.cfg.vj.slotcomp = 1;
else if (!strcasecmp(arg->argv[arg->argn+1], "off"))
arg->bundle->ncp.ipcp.cfg.VJInitComp = 0;
arg->bundle->ncp.ipcp.cfg.vj.slotcomp = 0;
else
return 2;
return 0;
@ -214,8 +217,8 @@ ipcp_Init(struct ipcp *ipcp, struct bundle *bundle, struct link *l,
fsm_Init(&ipcp->fsm, "IPCP", PROTO_IPCP, 1, IPCP_MAXCODE, 10, LogIPCP,
bundle, l, parent, &ipcp_Callbacks, timer_names);
ipcp->cfg.VJInitSlots = DEF_VJ_STATES;
ipcp->cfg.VJInitComp = 1;
ipcp->cfg.vj.slots = DEF_VJ_STATES;
ipcp->cfg.vj.slotcomp = 1;
memset(&ipcp->cfg.my_range, '\0', sizeof ipcp->cfg.my_range);
if (gethostname(name, sizeof name) == 0) {
hp = gethostbyname(name);
@ -238,6 +241,7 @@ ipcp_Init(struct ipcp *ipcp, struct bundle *bundle, struct link *l,
#endif
ipcp->cfg.fsmretry = DEF_FSMRETRY;
ipcp->cfg.vj.neg = NEG_ENABLED|NEG_ACCEPTED;
memset(&ipcp->vj, '\0', sizeof ipcp->vj);
@ -291,13 +295,13 @@ ipcp_Setup(struct ipcp *ipcp)
else
ipcp->my_ip = ipcp->cfg.my_range.ipaddr;
if (Enabled(ConfVjcomp))
if (IsEnabled(ipcp->cfg.vj.neg))
ipcp->my_compproto = (PROTO_VJCOMP << 16) +
((ipcp->cfg.VJInitSlots - 1) << 8) +
ipcp->cfg.VJInitComp;
((ipcp->cfg.vj.slots - 1) << 8) +
ipcp->cfg.vj.slotcomp;
else
ipcp->my_compproto = 0;
sl_compress_init(&ipcp->vj.cslc, ipcp->cfg.VJInitSlots - 1);
sl_compress_init(&ipcp->vj.cslc, ipcp->cfg.vj.slots - 1);
ipcp->peer_reject = 0;
ipcp->my_reject = 0;
@ -372,7 +376,7 @@ ipcp_SetIPaddress(struct bundle *bundle, struct in_addr myaddr,
bundle->ncp.ipcp.peer_ifip.s_addr = hisaddr.s_addr;
bundle->ncp.ipcp.my_ifip.s_addr = myaddr.s_addr;
if (Enabled(ConfProxy))
if (Enabled(bundle, OPT_PROXY))
sifproxyarp(bundle, bundle->ncp.ipcp.peer_ifip, s);
close(s);
@ -484,7 +488,7 @@ IpcpCleanInterface(struct ipcp *ipcp)
return;
}
if (Enabled(ConfProxy))
if (Enabled(ipcp->fsm.bundle, OPT_PROXY))
cifproxyarp(ipcp->fsm.bundle, ipcp->peer_ifip, s);
if (ipcp->my_ifip.s_addr != INADDR_ANY ||
@ -577,7 +581,8 @@ IpcpLayerUp(struct fsm *fp)
} else
SelectSystem(fp->bundle, "MYADDR", LINKUPFILE, NULL);
throughput_start(&ipcp->throughput, "IPCP throughput");
throughput_start(&ipcp->throughput, "IPCP throughput",
Enabled(fp->bundle, OPT_THROUGHPUT));
bundle_DisplayPrompt(fp->bundle);
}
@ -698,7 +703,7 @@ IpcpDecodeConfig(struct fsm *fp, u_char * cp, int plen, int mode_type,
switch (mode_type) {
case MODE_REQ:
if (!Acceptable(ConfVjcomp)) {
if (!IsAccepted(ipcp->cfg.vj.neg)) {
memcpy(dec->rejend, cp, length);
dec->rejend += length;
} else {
@ -789,7 +794,7 @@ IpcpDecodeConfig(struct fsm *fp, u_char * cp, int plen, int mode_type,
case TY_SECONDARY_DNS:
switch (mode_type) {
case MODE_REQ:
if (!Enabled(ConfMSExt)) {
if (Enabled(ipcp->fsm.bundle, OPT_MSEXT)) {
LogPrintf(LogIPCP, "MS NS req - rejected - msext disabled\n");
ipcp->my_reject |= (1 << type);
memcpy(dec->rejend, cp, length);
@ -836,7 +841,7 @@ IpcpDecodeConfig(struct fsm *fp, u_char * cp, int plen, int mode_type,
case TY_SECONDARY_NBNS:
switch (mode_type) {
case MODE_REQ:
if (!Enabled(ConfMSExt)) {
if (!Enabled(ipcp->fsm.bundle, OPT_MSEXT)) {
LogPrintf(LogIPCP, "MS NBNS req - rejected - msext disabled\n");
ipcp->my_reject |= (1 << type);
memcpy(dec->rejend, cp, length);
@ -882,6 +887,15 @@ IpcpDecodeConfig(struct fsm *fp, u_char * cp, int plen, int mode_type,
plen -= length;
cp += length;
}
if (mode_type != MODE_NOP)
if (dec->rejend != dec->rej) {
/* rejects are preferred */
dec->ackend = dec->ack;
dec->nakend = dec->nak;
} else if (dec->nakend != dec->nak)
/* then NAKs */
dec->ackend = dec->ack;
}
void

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.20 1998/04/07 00:53:52 brian Exp $
* $Id: ipcp.h,v 1.18.2.21 1998/04/10 13:19:09 brian Exp $
*
* TODO:
*/
@ -43,8 +43,11 @@ struct ipcp {
struct fsm fsm; /* The finite state machine */
struct {
int VJInitSlots; /* Maximum VJ slots */
unsigned VJInitComp : 1; /* Slot compression */
struct {
int slots; /* Maximum VJ slots */
unsigned slotcomp : 1; /* Slot compression */
unsigned neg : 2; /* VJ negotiation */
} vj;
struct in_range my_range; /* MYADDR spec */
struct in_addr netmask; /* netmask (unused by most OSs) */

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.40 1998/04/06 09:12:30 brian Exp $
* $Id: lcp.c,v 1.55.2.41 1998/04/07 00:53:55 brian Exp $
*
* TODO:
* o Limit data field length by MRU
@ -42,7 +42,6 @@
#include "lqr.h"
#include "hdlc.h"
#include "ccp.h"
#include "vars.h"
#include "async.h"
#include "link.h"
#include "physical.h"
@ -146,6 +145,18 @@ lcp_ReportStatus(struct cmdargs const *arg)
prompt_Printf(arg->prompt, " (delay %ds)", lcp->cfg.openmode);
prompt_Printf(arg->prompt, "\n FSM retry = %us\n",
lcp->cfg.fsmretry);
prompt_Printf(arg->prompt, "\n Negotiation:\n");
prompt_Printf(arg->prompt, " ACFCOMP = %s\n",
command_ShowNegval(lcp->cfg.acfcomp));
prompt_Printf(arg->prompt, " CHAP = %s\n",
command_ShowNegval(lcp->cfg.chap));
prompt_Printf(arg->prompt, " LQR = %s\n",
command_ShowNegval(lcp->cfg.lqr));
prompt_Printf(arg->prompt, " PAP = %s\n",
command_ShowNegval(lcp->cfg.pap));
prompt_Printf(arg->prompt, " PROTOCOMP = %s\n",
command_ShowNegval(lcp->cfg.protocomp));
return 0;
}
@ -176,6 +187,12 @@ lcp_Init(struct lcp *lcp, struct bundle *bundle, struct link *l,
lcp->cfg.lqrperiod = DEF_LQRPERIOD;
lcp->cfg.fsmretry = DEF_FSMRETRY;
lcp->cfg.acfcomp = NEG_ENABLED|NEG_ACCEPTED;
lcp->cfg.chap = NEG_ACCEPTED;
lcp->cfg.lqr = NEG_ACCEPTED;
lcp->cfg.pap = NEG_ACCEPTED;
lcp->cfg.protocomp = NEG_ENABLED|NEG_ACCEPTED;
lcp_Setup(lcp, lcp->cfg.openmode);
}
@ -192,17 +209,18 @@ lcp_Setup(struct lcp *lcp, int openmode)
lcp->his_auth = 0;
lcp->want_mru = lcp->cfg.mru;
lcp->want_acfcomp = Enabled(ConfAcfcomp) ? 1 : 0;
lcp->want_acfcomp = IsEnabled(lcp->cfg.acfcomp) ? 1 : 0;
if (lcp->fsm.parent) {
lcp->his_accmap = 0xffffffff;
lcp->want_accmap = lcp->cfg.accmap;
lcp->his_protocomp = 0;
lcp->want_protocomp = Enabled(ConfProtocomp) ? 1 : 0;
lcp->want_protocomp = IsEnabled(lcp->cfg.protocomp) ? 1 : 0;
lcp->want_magic = GenerateMagic();
lcp->want_auth = Enabled(ConfChap) ? PROTO_CHAP :
Enabled(ConfPap) ? PROTO_PAP : 0;
lcp->want_lqrperiod = Enabled(ConfLqr) ? lcp->cfg.lqrperiod * 100 : 0;
lcp->want_auth = IsEnabled(lcp->cfg.chap) ? PROTO_CHAP :
IsEnabled(lcp->cfg.pap) ? PROTO_PAP : 0;
lcp->want_lqrperiod = IsEnabled(lcp->cfg.lqr) ?
lcp->cfg.lqrperiod * 100 : 0;
} else {
lcp->his_accmap = lcp->want_accmap = 0;
lcp->his_protocomp = lcp->want_protocomp = 1;
@ -445,11 +463,11 @@ LcpDecodeConfig(struct fsm *fp, u_char *cp, int plen, int mode_type,
LogPrintf(LogLCP, " Bad length!\n");
goto reqreject;
}
if (Acceptable(ConfPap)) {
if (IsAccepted(lcp->cfg.pap)) {
lcp->his_auth = proto;
memcpy(dec->ackend, cp, length);
dec->ackend += length;
} else if (Acceptable(ConfChap)) {
} else if (IsAccepted(lcp->cfg.chap)) {
*dec->nakend++ = *cp;
*dec->nakend++ = 5;
*dec->nakend++ = (unsigned char) (PROTO_CHAP >> 8);
@ -465,9 +483,9 @@ LcpDecodeConfig(struct fsm *fp, u_char *cp, int plen, int mode_type,
goto reqreject;
}
#ifdef HAVE_DES
if (Acceptable(ConfChap) && (cp[4] == 5 || cp[4] == 0x80))
if (IsAccepted(lcp->cfg.chap) && (cp[4] == 0x05 || cp[4] == 0x80))
#else
if (Acceptable(ConfChap) && cp[4] == 5)
if (IsAccepted(lcp->cfg.chap) && cp[4] == 0x05)
#endif
{
lcp->his_auth = proto;
@ -476,7 +494,7 @@ LcpDecodeConfig(struct fsm *fp, u_char *cp, int plen, int mode_type,
#ifdef HAVE_DES
link2physical(fp->link)->dl->chap.using_MSChap = cp[4] == 0x80;
#endif
} else if (Acceptable(ConfPap)) {
} else if (IsAccepted(lcp->cfg.pap)) {
*dec->nakend++ = *cp;
*dec->nakend++ = 4;
*dec->nakend++ = (unsigned char) (PROTO_PAP >> 8);
@ -496,7 +514,7 @@ LcpDecodeConfig(struct fsm *fp, u_char *cp, int plen, int mode_type,
case MODE_NAK:
switch (proto) {
case PROTO_PAP:
if (Enabled(ConfPap))
if (IsEnabled(lcp->cfg.pap))
lcp->want_auth = PROTO_PAP;
else {
LogPrintf(LogLCP, "Peer will only send PAP (not enabled)\n");
@ -504,7 +522,7 @@ LcpDecodeConfig(struct fsm *fp, u_char *cp, int plen, int mode_type,
}
break;
case PROTO_CHAP:
if (Enabled(ConfChap))
if (IsEnabled(lcp->cfg.chap))
lcp->want_auth = PROTO_CHAP;
else {
LogPrintf(LogLCP, "Peer will only send CHAP (not enabled)\n");
@ -529,7 +547,7 @@ LcpDecodeConfig(struct fsm *fp, u_char *cp, int plen, int mode_type,
request, ntohs(req->proto), ntohl(req->period) * 10);
switch (mode_type) {
case MODE_REQ:
if (ntohs(req->proto) != PROTO_LQR || !Acceptable(ConfLqr))
if (ntohs(req->proto) != PROTO_LQR || !IsAccepted(lcp->cfg.lqr))
goto reqreject;
else {
lcp->his_lqrperiod = ntohl(req->period);
@ -593,7 +611,7 @@ LcpDecodeConfig(struct fsm *fp, u_char *cp, int plen, int mode_type,
switch (mode_type) {
case MODE_REQ:
if (Acceptable(ConfProtocomp)) {
if (IsAccepted(lcp->cfg.protocomp)) {
lcp->his_protocomp = 1;
memcpy(dec->ackend, cp, 2);
dec->ackend += 2;
@ -623,7 +641,7 @@ LcpDecodeConfig(struct fsm *fp, u_char *cp, int plen, int mode_type,
LogPrintf(LogLCP, "%s\n", request);
switch (mode_type) {
case MODE_REQ:
if (Acceptable(ConfAcfcomp)) {
if (IsAccepted(lcp->cfg.acfcomp)) {
lcp->his_acfcomp = 1;
memcpy(dec->ackend, cp, 2);
dec->ackend += 2;
@ -693,6 +711,15 @@ LcpDecodeConfig(struct fsm *fp, u_char *cp, int plen, int mode_type,
plen -= length;
cp += length;
}
if (mode_type != MODE_NOP)
if (dec->rejend != dec->rej) {
/* rejects are preferred */
dec->ackend = dec->ack;
dec->nakend = dec->nak;
} else if (dec->nakend != dec->nak)
/* then NAKs */
dec->ackend = dec->ack;
}
void

View File

@ -15,7 +15,7 @@
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* $Id: lcp.h,v 1.16.2.18 1998/04/05 19:02:49 brian Exp $
* $Id: lcp.h,v 1.16.2.19 1998/04/07 00:53:56 brian Exp $
*
* TODO:
*/
@ -55,6 +55,12 @@ struct lcp {
int openmode; /* when to start CFG REQs */
u_int lqrperiod; /* LQR frequency */
u_int fsmretry; /* FSM retry frequency */
unsigned acfcomp : 2; /* Address & Control Field Compression neg */
unsigned chap : 2; /* Challenge Handshake Authentication proto */
unsigned lqr : 2; /* Link Quality Report */
unsigned pap : 2; /* Password Authentication protocol */
unsigned protocomp : 2; /* Protocol field compression */
} cfg;
};

View File

@ -17,7 +17,7 @@
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* $Id: lqr.c,v 1.22.2.21 1998/04/07 00:54:01 brian Exp $
* $Id: lqr.c,v 1.22.2.22 1998/04/14 07:25:37 brian Exp $
*
* o LQR based on RFC1333
*
@ -27,9 +27,6 @@
*/
#include <sys/types.h>
#include <netinet/in.h>
#include <netinet/in_systm.h>
#include <netinet/ip.h>
#include <string.h>
#include <termios.h>
@ -49,17 +46,11 @@
#include "link.h"
#include "descriptor.h"
#include "physical.h"
#include "iplist.h"
#include "slcompress.h"
#include "ipcp.h"
#include "filter.h"
#include "mp.h"
#include "bundle.h"
#include "vars.h"
#include "chat.h"
#include "auth.h"
#include "chap.h"
#include "pap.h"
#include "command.h"
#include "datalink.h"
struct echolqr {
@ -172,7 +163,8 @@ LqrInput(struct physical *physical, struct mbuf *bp)
if (len != sizeof(struct lqrdata))
LogPrintf(LogERROR, "LqrInput: Got packet size %d, expecting %d !\n",
len, sizeof(struct lqrdata));
else if (!Acceptable(ConfLqr) && !(physical->hdlc.lqm.method & LQM_LQR)) {
else if (!IsAccepted(physical->link.lcp.cfg.lqr) &&
!(physical->hdlc.lqm.method & LQM_LQR)) {
bp->offset -= 2;
bp->cnt += 2;
lcp_SendProtoRej(physical->hdlc.lqm.owner, MBUF_CTOP(bp), bp->cnt);
@ -229,7 +221,7 @@ StartLqm(struct lcp *lcp)
sizeof physical->hdlc.lqm.lqr.peer);
physical->hdlc.lqm.method = LQM_ECHO;
if (Enabled(ConfLqr) && !REJECTED(lcp, TY_QUALPROTO))
if (IsEnabled(physical->link.lcp.cfg.lqr) && !REJECTED(lcp, TY_QUALPROTO))
physical->hdlc.lqm.method |= LQM_LQR;
StopTimer(&physical->hdlc.lqm.timer);

View File

@ -17,7 +17,7 @@
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* $Id: main.c,v 1.121.2.47 1998/04/07 23:46:02 brian Exp $
* $Id: main.c,v 1.121.2.48 1998/04/10 13:19:11 brian Exp $
*
* TODO:
*/
@ -57,7 +57,6 @@
#include "mp.h"
#include "bundle.h"
#include "loadalias.h"
#include "vars.h"
#include "auth.h"
#include "systems.h"
#include "ip.h"
@ -554,7 +553,7 @@ DoLoop(struct bundle *bundle, struct prompt *prompt)
if (((struct ip *)tun.data)->ip_dst.s_addr ==
bundle->ncp.ipcp.my_ip.s_addr) {
/* we've been asked to send something addressed *to* us :( */
if (Enabled(ConfLoopback)) {
if (Enabled(bundle, OPT_LOOPBACK)) {
pri = PacketCheck(bundle, tun.data, n, &bundle->filter.in);
if (pri >= 0) {
struct mbuf *bp;

View File

@ -17,7 +17,7 @@
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* $Id: modem.c,v 1.77.2.48 1998/04/10 14:55:11 brian Exp $
* $Id: modem.c,v 1.77.2.49 1998/04/10 23:51:30 brian Exp $
*
* TODO:
*/
@ -478,9 +478,10 @@ modem_Unlock(struct physical *modem)
}
static void
modem_Found(struct physical *modem)
modem_Found(struct physical *modem, struct bundle *bundle)
{
throughput_start(&modem->link.throughput, "modem throughput");
throughput_start(&modem->link.throughput, "modem throughput",
Enabled(bundle, OPT_THROUGHPUT));
modem->connect_count++;
LogPrintf(LogPHASE, "Connected!\n");
}
@ -507,12 +508,12 @@ modem_Open(struct physical *modem, struct bundle *bundle)
return -1;
}
modem->fd = STDIN_FILENO;
modem_Found(modem);
modem_Found(modem, bundle);
} else {
LogPrintf(LogDEBUG, "modem_Open(direct): Modem is not a tty\n");
modem_SetDevice(modem, "");
/* We don't call modem_Timeout() with this type of connection */
modem_Found(modem);
modem_Found(modem, bundle);
return modem->fd = STDIN_FILENO;
}
} else {
@ -535,7 +536,7 @@ modem_Open(struct physical *modem, struct bundle *bundle)
modem->fd = -1;
}
else {
modem_Found(modem);
modem_Found(modem, bundle);
LogPrintf(LogDEBUG, "modem_Open: Modem is %s\n", modem->name.full);
}
}
@ -555,7 +556,7 @@ modem_Open(struct physical *modem, struct bundle *bundle)
*cp = ':'; /* Don't destroy name.full */
if (modem->fd < 0)
return (-1);
modem_Found(modem);
modem_Found(modem, bundle);
LogPrintf(LogDEBUG, "modem_Open: Modem is socket %s\n",
modem->name.full);
} else {

View File

@ -23,7 +23,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $Id: mp.c,v 1.1.2.2 1998/04/06 09:12:34 brian Exp $
* $Id: mp.c,v 1.1.2.3 1998/04/14 23:17:09 brian Exp $
*/
#include <sys/types.h>
@ -45,10 +45,7 @@
#include "throughput.h"
#include "slcompress.h"
#include "ipcp.h"
/* #include "loadalias.h" */
/* #include "vars.h" */
#include "auth.h"
/* #include "systems.h" */
#include "lcp.h"
#include "lqr.h"
#include "hdlc.h"

View File

@ -18,7 +18,7 @@
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* $Id: pap.c,v 1.20.2.23 1998/04/06 09:12:34 brian Exp $
* $Id: pap.c,v 1.20.2.24 1998/04/07 00:54:12 brian Exp $
*
* TODO:
*/
@ -152,7 +152,8 @@ PapInput(struct bundle *bundle, struct mbuf *bp, struct physical *physical)
if (PapValidate(bundle, cp, cp + *cp + 1, physical)) {
SendPapCode(php->id, PAP_ACK, "Greetings!!", physical);
physical->link.lcp.auth_ineed = 0;
Physical_Login(physical, cp + 1);
if (Enabled(bundle, OPT_UTMP))
Physical_Login(physical, cp + 1);
if (physical->link.lcp.auth_iwait == 0)
/*

View File

@ -16,7 +16,7 @@
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* $Id: physical.c,v 1.1.2.23 1998/04/10 13:19:15 brian Exp $
* $Id: physical.c,v 1.1.2.24 1998/04/10 23:51:32 brian Exp $
*
*/
@ -32,8 +32,6 @@
#include <utmp.h>
/* XXX Name space pollution from vars.h */
#include "defs.h"
/* XXX Name space pollution from hdlc.h */
@ -53,7 +51,6 @@
#include "descriptor.h"
#include "physical.h"
#include "vars.h"
#include "log.h"
#include "id.h"
@ -179,7 +176,7 @@ Physical_IsSet(struct descriptor *d, const fd_set *fdset)
void
Physical_Login(struct physical *phys, const char *name)
{
if (phys->type == PHYS_STDIN && Physical_IsATTY(phys) && Enabled(ConfUtmp))
if (phys->type == PHYS_STDIN && Physical_IsATTY(phys))
if (phys->Utmp)
LogPrintf(LogERROR, "Oops, already logged in on %s\n", phys->name.base);
else {

View File

@ -1,4 +1,4 @@
.\" $Id: ppp.8,v 1.97.2.14 1998/04/10 13:19:17 brian Exp $
.\" $Id: ppp.8,v 1.97.2.15 1998/04/11 21:50:47 brian Exp $
.Dd 20 September 1995
.Os FreeBSD
.Dt PPP 8
@ -1572,11 +1572,20 @@ in
is capable of negotiating with
.Nm pppd ,
but only if
.Dq pppd-deflate
.Dq deflate24
is
.Ar enable Ns No d
and
.Ar accept Ns No ed .
.It deflate24
Default: Disabled and Denied. This is a variance of the
.Ar deflate
option, allowing negotiation with the
.Xr pppd 8
program. Refer to the
.Ar deflate
section above for details. It is disabled by default as it violates
.Pa rfc1975 .
.It lqr
Default: Disabled and Accepted. This option decides if Link Quality
Requests will be sent or accepted. LQR is a protocol that allows
@ -1629,15 +1638,6 @@ and
in
.Pa /etc/ppp/ppp.conf .
PAP is accepted by default.
.It pppd-deflate
Default: Disabled and Denied. This is a variance of the
.Ar deflate
option, allowing negotiation with the
.Xr pppd 8
program. Refer to the
.Ar deflate
section above for details. It is disabled by default as it violates
.Pa rfc1975 .
.It pred1
Default: Enabled and Accepted. This option decides if Predictor 1
compression will be used by the Compression Control Protocol (CCP).
@ -1704,7 +1704,7 @@ Default: Disabled. Enabling this option will tell
.Nm
to proxy ARP for the peer.
.It throughput
Default: Disabled. Enabling this option will tell
Default: Enabled. This option tells
.Nm
to gather thoroughput statistics. Input and output is sampled over
a rolling 5 second window, and current, best and total figures are
@ -1712,7 +1712,7 @@ retained. This data is output when the relevent
.Em PPP
layer shuts down, and is also available using the
.Dq show
command. Troughput statistics are available at the
command. Throughput statistics are available at the
.Dq IPCP
and
.Dq modem
@ -1972,11 +1972,6 @@ scripts for the given
.Ar label .
Otherwise, the current settings are used to establish
the connection.
.It display
Displays the current status of the negotiable protocol
values as specified under
.Dq accept|deny|enable|disable option....
above.
.It down
Bring the link down ungracefully, as if the physical layer had become
unavailable. It's not considered polite to use this command.
@ -2082,8 +2077,10 @@ and
.Em 15 .
If
.Ar in-winsize
is specified, ppp will insist that this window size is used and will not
accept any other values from the peer.
is specified,
.Nm
will insist that this window size is used and will not accept any other
values from the peer.
.It set device|line Ar value[,value...]
This sets the device(s) to which
.Nm

View File

@ -26,7 +26,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $Id: pred.c,v 1.20.2.7 1998/04/06 09:12:35 brian Exp $
* $Id: pred.c,v 1.20.2.8 1998/04/07 00:54:15 brian Exp $
*/
#include <sys/types.h>
@ -36,7 +36,6 @@
#include "mbuf.h"
#include "log.h"
#include "vars.h"
#include "timer.h"
#include "fsm.h"
#include "lqr.h"
@ -313,7 +312,7 @@ Pred1SetOptsInput(struct lcp_opt *o, const struct ccp_config *cfg)
const struct ccp_algorithm Pred1Algorithm = {
TY_PRED1,
ConfPred1,
CCP_NEG_PRED1,
Pred1DispOpts,
{
Pred1SetOptsInput,

View File

@ -23,7 +23,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $Id: throughput.c,v 1.4.4.5 1998/04/07 00:54:21 brian Exp $
* $Id: throughput.c,v 1.4.4.6 1998/04/10 13:19:23 brian Exp $
*/
#include <sys/types.h>
@ -35,7 +35,6 @@
#include "log.h"
#include "timer.h"
#include "throughput.h"
#include "vars.h"
#include "descriptor.h"
#include "prompt.h"
@ -50,6 +49,7 @@ throughput_init(struct pppThroughput *t)
t->OctetsPerSecond = t->BestOctetsPerSecond = t->nSample = 0;
t->Timer.name = "throughput";
t->uptime = 0;
t->rolling = 0;
throughput_stop(t);
}
@ -64,7 +64,7 @@ throughput_disp(struct pppThroughput *t, struct prompt *prompt)
secs_up = 1;
prompt_Printf(prompt, "%ld octets in, %ld octets out\n",
t->OctetsIn, t->OctetsOut);
if (Enabled(ConfThroughput)) {
if (t->rolling) {
prompt_Printf(prompt, " overall %5ld bytes/sec\n",
(t->OctetsIn+t->OctetsOut)/secs_up);
prompt_Printf(prompt, " currently %5d bytes/sec\n", t->OctetsPerSecond);
@ -91,7 +91,7 @@ throughput_log(struct pppThroughput *t, int level, const char *title)
secs_up, t->OctetsIn, t->OctetsOut);
if (secs_up == 0)
secs_up = 1;
if (Enabled(ConfThroughput))
if (t->rolling)
LogPrintf(level, " total %ld bytes/sec, peak %d bytes/sec\n",
(t->OctetsIn+t->OctetsOut)/secs_up, t->BestOctetsPerSecond);
else
@ -121,11 +121,12 @@ throughput_sampler(void *v)
}
void
throughput_start(struct pppThroughput *t, const char *name)
throughput_start(struct pppThroughput *t, const char *name, int rolling)
{
throughput_init(t);
t->rolling = rolling ? 1 : 0;
time(&t->uptime);
if (Enabled(ConfThroughput)) {
if (t->rolling) {
t->Timer.state = TIMER_STOPPED;
t->Timer.load = SECTICKS;
t->Timer.func = throughput_sampler;
@ -138,7 +139,7 @@ throughput_start(struct pppThroughput *t, const char *name)
void
throughput_stop(struct pppThroughput *t)
{
if (Enabled(ConfThroughput))
if (t->rolling)
StopTimer(&t->Timer);
}

View File

@ -23,7 +23,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $Id: throughput.h,v 1.2.4.2 1998/04/03 19:21:53 brian Exp $
* $Id: throughput.h,v 1.2.4.3 1998/04/03 19:26:00 brian Exp $
*/
#define SAMPLE_PERIOD 5
@ -36,13 +36,14 @@ struct pppThroughput {
int OctetsPerSecond;
int BestOctetsPerSecond;
int nSample;
unsigned rolling : 1;
struct pppTimer Timer;
};
extern void throughput_init(struct pppThroughput *);
extern void throughput_disp(struct pppThroughput *, struct prompt *);
extern void throughput_log(struct pppThroughput *, int, const char *);
extern void throughput_start(struct pppThroughput *, const char *);
extern void throughput_start(struct pppThroughput *, const char *, int);
extern void throughput_stop(struct pppThroughput *);
extern void throughput_addin(struct pppThroughput *, int);
extern void throughput_addout(struct pppThroughput *, int);

View File

@ -1,138 +0,0 @@
/*
* PPP configuration variables
*
* Written by Toshiharu OHNO (tony-o@iij.ad.jp)
*
* Copyright (C) 1993, Internet Initiative Japan, Inc. All rights reserverd.
*
* Redistribution and use in source and binary forms are permitted
* provided that the above copyright notice and this paragraph are
* duplicated in all such forms and that any documentation,
* advertising materials, and other materials related to such
* distribution and use acknowledge that the software was developed
* by the Internet Initiative Japan, Inc. The name of the
* IIJ may not be used to endorse or promote products derived
* from this software without specific prior written permission.
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* $Id: vars.c,v 1.45.2.26 1998/04/07 00:54:24 brian Exp $
*
*/
#include <sys/types.h>
#include <stdio.h>
#include <string.h>
#include "command.h"
#include "log.h"
#include "termios.h"
#include "vars.h"
#include "descriptor.h"
#include "prompt.h"
/*
* Order of conf option is important. See vars.h.
*/
struct confdesc pppConfs[NCONFS] = {
{"acfcomp", CONF_ENABLE, CONF_ACCEPT},
{"chap", CONF_DISABLE, CONF_ACCEPT},
{"deflate", CONF_ENABLE, CONF_ACCEPT},
{"lqr", CONF_DISABLE, CONF_ACCEPT},
{"pap", CONF_DISABLE, CONF_ACCEPT},
{"pppd-deflate", CONF_DISABLE, CONF_DENY},
{"pred1", CONF_ENABLE, CONF_ACCEPT},
{"protocomp", CONF_ENABLE, CONF_ACCEPT},
{"vjcomp", CONF_ENABLE, CONF_ACCEPT},
{"idcheck", CONF_ENABLE, CONF_NONE},
{"loopback", CONF_ENABLE, CONF_NONE},
{"msext", CONF_DISABLE, CONF_NONE},
{"passwdauth", CONF_DISABLE, CONF_NONE},
{"proxy", CONF_DISABLE, CONF_NONE},
{"throughput", CONF_DISABLE, CONF_NONE},
{"utmp", CONF_ENABLE, CONF_NONE}
};
int
DisplayCommand(struct cmdargs const *arg)
{
int f;
prompt_Printf(arg->prompt, "Current configuration option settings..\n\n");
prompt_Printf(arg->prompt, "Name\t\tMy Side\t\tHis Side\n");
prompt_Printf(arg->prompt, "----------------------------------------\n");
for (f = 0; f < NCONFS; f++)
prompt_Printf(arg->prompt, "%-10s\t%s\t\t%s\n", pppConfs[f].name,
(pppConfs[f].myside == CONF_ENABLE) ? "enable" :
(pppConfs[f].myside == CONF_DISABLE ? "disable" : "N/A"),
(pppConfs[f].hisside == CONF_ACCEPT) ? "accept" :
(pppConfs[f].hisside == CONF_DENY ? "deny" : "N/A"));
return 0;
}
static int
ConfigCommand(struct cmdargs const *arg, int mine, int val)
{
int f;
int err;
int narg = arg->argn;
if (arg->argc < narg+1)
return -1;
err = 0;
do {
for (f = 0; f < NCONFS; f++)
if (strcasecmp(pppConfs[f].name, arg->argv[narg]) == 0) {
if (mine) {
if (pppConfs[f].myside == CONF_NONE) {
LogPrintf(LogWARN, "Config: %s cannot be enabled or disabled\n",
pppConfs[f].name);
err++;
} else
pppConfs[f].myside = val;
} else {
if (pppConfs[f].hisside == CONF_NONE) {
LogPrintf(LogWARN, "Config: %s cannot be accepted or denied\n",
pppConfs[f].name);
err++;
} else
pppConfs[f].hisside = val;
}
break;
}
if (f == NCONFS) {
LogPrintf(LogWARN, "Config: %s: No such key word\n", arg->argv[narg]);
err++;
}
} while (++narg < arg->argc);
return err;
}
int
EnableCommand(struct cmdargs const *arg)
{
return ConfigCommand(arg, 1, CONF_ENABLE);
}
int
DisableCommand(struct cmdargs const *arg)
{
return ConfigCommand(arg, 1, CONF_DISABLE);
}
int
AcceptCommand(struct cmdargs const *arg)
{
return ConfigCommand(arg, 0, CONF_ACCEPT);
}
int
DenyCommand(struct cmdargs const *arg)
{
return ConfigCommand(arg, 0, CONF_DENY);
}

View File

@ -1,65 +0,0 @@
/*
* Written by Toshiharu OHNO (tony-o@iij.ad.jp)
*
* Copyright (C) 1993, Internet Initiative Japan, Inc. All rights reserverd.
*
* Redistribution and use in source and binary forms are permitted
* provided that the above copyright notice and this paragraph are
* duplicated in all such forms and that any documentation,
* advertising materials, and other materials related to such
* distribution and use acknowledge that the software was developed
* by the Internet Initiative Japan. The name of the
* IIJ may not be used to endorse or promote products derived
* from this software without specific prior written permission.
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* $Id: vars.h,v 1.42.2.21 1998/04/03 19:26:29 brian Exp $
*
* TODO:
*/
struct confdesc {
const char *name;
int myside, hisside;
};
#define CONF_NONE -1
#define CONF_DISABLE 0
#define CONF_ENABLE 1
#define CONF_DENY 0
#define CONF_ACCEPT 1
#define ConfAcfcomp 0
#define ConfChap 1
#define ConfDeflate 2
#define ConfLqr 3
#define ConfPap 4
#define ConfPppdDeflate 5
#define ConfPred1 6
#define ConfProtocomp 7
#define ConfVjcomp 8
#define ConfIdCheck 9
#define ConfLoopback 10
#define ConfMSExt 11
#define ConfPasswdAuth 12
#define ConfProxy 13
#define ConfThroughput 14
#define ConfUtmp 15
#define NCONFS 16
#define Enabled(x) (pppConfs[x].myside & CONF_ENABLE)
#define Acceptable(x) (pppConfs[x].hisside & CONF_ACCEPT)
extern struct confdesc pppConfs[NCONFS];
struct cmdargs;
extern int EnableCommand(struct cmdargs const *);
extern int DisableCommand(struct cmdargs const *);
extern int AcceptCommand(struct cmdargs const *);
extern int DenyCommand(struct cmdargs const *);
extern int DisplayCommand(struct cmdargs const *);

View File

@ -17,7 +17,7 @@
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* $Id: vjcomp.c,v 1.16.2.12 1998/04/06 09:12:38 brian Exp $
* $Id: vjcomp.c,v 1.16.2.13 1998/04/07 00:54:25 brian Exp $
*
* TODO:
*/
@ -164,7 +164,10 @@ vj2asc(u_int32_t val)
{
static char asc[50];
sprintf(asc, "%d VJ slots %s slot compression",
(int)((val>>8)&15)+1, val & 1 ? "with" : "without");
if (val)
snprintf(asc, sizeof asc, "%d VJ slots %s slot compression",
(int)((val>>8)&15)+1, val & 1 ? "with" : "without");
else
strcpy(asc, "VJ disabled");
return asc;
}