o Support callback types NONE, E.164, AUTH and CBCP.

(see the new ``set callback'' and ``set cbcp'' commands)
o Add a ``cbcp'' log level and mbuf type.
o Don't dump core when \T is given in ``set login'' or
  ``set hangup''.
o Allow ``*'' and blanks as placeholders in ppp.secret and
  allow a fifth field for specifying auth/cbcp dialback
  parameters.
o Remove a few extraneous #includes
o Define the default number of REQs (restart counter) in defs.h
  rather than hardcoding ``5'' all over the place.
o Fix a few man page inconsistencies.
This commit is contained in:
brian 1998-08-07 18:42:51 +00:00
parent da1fbd5e25
commit f9ee8808e7
35 changed files with 841 additions and 123 deletions

View File

@ -1,7 +1,7 @@
# $Id: Makefile,v 1.43 1998/06/26 18:50:29 brian Exp $
# $Id: Makefile,v 1.44 1998/06/27 14:17:22 brian Exp $
PROG= ppp
SRCS= arp.c async.c auth.c bundle.c ccp.c chap.c chat.c command.c \
SRCS= arp.c async.c auth.c bundle.c cbcp.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 probe.c prompt.c route.c server.c \

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.30 1998/06/15 19:06:35 brian Exp $
* $Id: auth.c,v 1.31 1998/07/19 21:07:24 brian Exp $
*
* TODO:
* o Implement check against with registered IP addresses.
@ -87,7 +87,40 @@ auth_CheckPasswd(const char *name, const char *data, const char *key)
}
int
auth_Select(struct bundle *bundle, const char *name, struct physical *physical)
auth_SetPhoneList(const char *name, char *phone, int phonelen)
{
FILE *fp;
int n;
char *vector[6];
char buff[LINE_LEN];
fp = OpenSecret(SECRETFILE);
if (fp != NULL) {
while (fgets(buff, sizeof buff, fp)) {
if (buff[0] == '#')
continue;
buff[strlen(buff) - 1] = '\0';
memset(vector, '\0', sizeof vector);
n = MakeArgs(buff, vector, VECSIZE(vector));
if (n < 5)
continue;
if (strcmp(vector[0], name) == 0) {
CloseSecret(fp);
if (*vector[4] == '\0')
return 0;
strncpy(phone, vector[4], phonelen - 1);
phone[phonelen - 1] = '\0';
return 1; /* Valid */
}
}
CloseSecret(fp);
}
*phone = '\0';
return 0;
}
int
auth_Select(struct bundle *bundle, const char *name)
{
FILE *fp;
int n;
@ -111,10 +144,11 @@ auth_Select(struct bundle *bundle, const char *name, struct physical *physical)
continue;
if (strcmp(vector[0], name) == 0) {
CloseSecret(fp);
if (n > 2 && !ipcp_UseHisaddr(bundle, vector[2], 1))
if (n > 2 && *vector[2] && strcmp(vector[2], "*") &&
!ipcp_UseHisaddr(bundle, vector[2], 1))
return 0;
ipcp_Setup(&bundle->ncp.ipcp);
if (n > 3)
if (n > 3 && *vector[3] && strcmp(vector[3], "*"))
bundle_SetLabel(bundle, vector[3]);
return 1; /* Valid */
}

View File

@ -15,7 +15,7 @@
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* $Id: auth.h,v 1.10.2.9 1998/05/01 19:23:54 brian Exp $
* $Id: auth.h,v 1.11 1998/05/21 21:44:03 brian Exp $
*
* TODO:
*/
@ -45,4 +45,5 @@ extern int auth_Validate(struct bundle *, const char *, const char *,
struct physical *);
extern char *auth_GetSecret(struct bundle *, const char *, int,
struct physical *);
extern int auth_Select(struct bundle *, const char *, struct physical *);
extern int auth_SetPhoneList(const char *, char *, int);
extern int auth_Select(struct bundle *, const char *);

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.29 1998/07/29 18:21:11 brian Exp $
* $Id: bundle.c,v 1.30 1998/08/02 06:56:40 brian Exp $
*/
#include <sys/param.h>
@ -82,6 +82,7 @@
#include "tun.h"
#include "prompt.h"
#include "chat.h"
#include "cbcp.h"
#include "datalink.h"
#include "ip.h"
@ -318,7 +319,7 @@ bundle_LinkAdded(struct bundle *bundle, struct datalink *dl)
bundle_StartIdleTimer(bundle);
}
static void
void
bundle_LinksRemoved(struct bundle *bundle)
{
struct datalink *dl;

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.10 1998/07/28 21:54:51 brian Exp $
* $Id: bundle.h,v 1.11 1998/07/29 18:21:13 brian Exp $
*/
#define PHASE_DEAD 0 /* Link is dead */
@ -137,6 +137,7 @@ extern void bundle_Destroy(struct bundle *);
extern const char *bundle_PhaseName(struct bundle *);
#define bundle_Phase(b) ((b)->phase)
extern void bundle_NewPhase(struct bundle *, u_int);
extern void bundle_LinksRemoved(struct bundle *);
extern int bundle_LinkIsUp(const struct bundle *);
extern int bundle_SetRoute(struct bundle *, int, struct in_addr,
struct in_addr, struct in_addr, 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: ccp.c,v 1.36 1998/06/27 23:48:40 brian Exp $
* $Id: ccp.c,v 1.37 1998/06/30 23:04:10 brian Exp $
*
* TODO:
* o Support other compression protocols
@ -30,7 +30,6 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <termios.h>
#include "defs.h"
@ -213,7 +212,7 @@ CcpInitRestartCounter(struct fsm *fp)
struct ccp *ccp = fsm2ccp(fp);
fp->FsmTimer.load = ccp->cfg.fsmretry * SECTICKS;
fp->restart = 5;
fp->restart = DEF_REQs;
}
static void

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.34 1998/06/27 23:48:41 brian Exp $
* $Id: chap.c,v 1.35 1998/07/28 21:54:29 brian Exp $
*
* TODO:
*/
@ -29,10 +29,10 @@
#ifdef HAVE_DES
#include <md4.h>
#include <string.h>
#endif
#include <md5.h>
#include <stdlib.h>
#include <string.h>
#include <termios.h>
#include "mbuf.h"
@ -59,6 +59,7 @@
#include "mp.h"
#include "bundle.h"
#include "chat.h"
#include "cbcp.h"
#include "datalink.h"
#ifdef HAVE_DES
#include "chap_ms.h"

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.49 1998/06/24 19:33:31 brian Exp $
* $Id: chat.c,v 1.50 1998/06/27 14:18:01 brian Exp $
*/
#include <sys/types.h>
@ -64,6 +64,7 @@
#include "iplist.h"
#include "ipcp.h"
#include "filter.h"
#include "cbcp.h"
#include "datalink.h"
#include "bundle.h"
@ -673,9 +674,11 @@ ExpandString(struct chat *c, const char *str, char *result, int reslen,
result += strlen(result);
break;
case 'T':
strncpy(result, c->phone, reslen);
reslen -= strlen(result);
result += strlen(result);
if (c->phone) {
strncpy(result, c->phone, reslen);
reslen -= strlen(result);
result += strlen(result);
}
break;
case 'U':
strncpy(result, c->physical->dl->bundle->cfg.auth.name, reslen);

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.157 1998/07/29 18:21:13 brian Exp $
* $Id: command.c,v 1.158 1998/07/31 19:50:24 brian Exp $
*
*/
#include <sys/types.h>
@ -76,6 +76,7 @@
#include "prompt.h"
#include "chat.h"
#include "chap.h"
#include "cbcp.h"
#include "datalink.h"
/* ``set'' values */
@ -103,6 +104,8 @@
#define VAR_DNS 21
#define VAR_NBNS 22
#define VAR_MODE 23
#define VAR_CALLBACK 24
#define VAR_CBCP 25
/* ``accept|deny|disable|enable'' masks */
#define NEG_HISMASK (1)
@ -122,7 +125,7 @@
#define NEG_DNS 50
const char Version[] = "2.0";
const char VersionDate[] = "$Date: 1998/07/29 18:21:13 $";
const char VersionDate[] = "$Date: 1998/07/31 19:50:24 $";
static int ShowCommand(struct cmdargs const *);
static int TerminalCommand(struct cmdargs const *);
@ -1348,6 +1351,7 @@ SetVariable(struct cmdargs const *arg)
case VAR_PHONE:
strncpy(cx->cfg.phone.list, argp, sizeof cx->cfg.phone.list - 1);
cx->cfg.phone.list[sizeof cx->cfg.phone.list - 1] = '\0';
cx->phone.alt = cx->phone.next = NULL;
break;
case VAR_HANGUP:
@ -1446,6 +1450,53 @@ SetVariable(struct cmdargs const *arg)
addr[0].s_addr = addr[1].s_addr;
}
break;
case VAR_CALLBACK:
cx->cfg.callback.opmask = 0;
for (dummyint = arg->argn; dummyint < arg->argc; dummyint++) {
if (!strcasecmp(arg->argv[dummyint], "auth"))
cx->cfg.callback.opmask |= CALLBACK_BIT(CALLBACK_AUTH);
else if (!strcasecmp(arg->argv[dummyint], "cbcp"))
cx->cfg.callback.opmask |= CALLBACK_BIT(CALLBACK_CBCP);
else if (!strcasecmp(arg->argv[dummyint], "e.164")) {
if (dummyint == arg->argc - 1)
log_Printf(LogWARN, "No E.164 arg (E.164 ignored) !\n");
else {
cx->cfg.callback.opmask |= CALLBACK_BIT(CALLBACK_E164);
strncpy(cx->cfg.callback.msg, arg->argv[++dummyint],
sizeof cx->cfg.callback.msg - 1);
cx->cfg.callback.msg[sizeof cx->cfg.callback.msg - 1] = '\0';
}
} else if (!strcasecmp(arg->argv[dummyint], "none"))
cx->cfg.callback.opmask |= CALLBACK_BIT(CALLBACK_NONE);
else
return -1;
}
if (cx->cfg.callback.opmask == CALLBACK_BIT(CALLBACK_NONE))
cx->cfg.callback.opmask = 0;
break;
case VAR_CBCP:
cx->cfg.cbcp.delay = 0;
*cx->cfg.cbcp.phone = '\0';
cx->cfg.cbcp.fsmretry = DEF_FSMRETRY;
if (arg->argc > arg->argn) {
strncpy(cx->cfg.cbcp.phone, arg->argv[arg->argn],
sizeof cx->cfg.cbcp.phone - 1);
cx->cfg.cbcp.phone[sizeof cx->cfg.cbcp.phone - 1] = '\0';
if (arg->argc > arg->argn + 1) {
cx->cfg.cbcp.delay = atoi(arg->argv[arg->argn + 1]);
if (arg->argc > arg->argn + 2) {
long_val = atol(arg->argv[arg->argn + 2]);
if (long_val < MIN_FSMRETRY)
log_Printf(LogWARN, "%ld: Invalid CBCP FSM retry period - min %d\n",
long_val, MIN_FSMRETRY);
else
cx->cfg.cbcp.fsmretry = long_val;
}
}
}
break;
}
return err ? 1 : 0;
@ -1476,6 +1527,12 @@ static struct cmdtab const SetCommands[] = {
{"autoload", NULL, SetVariable, LOCAL_AUTH,
"auto link [de]activation", "set autoload maxtime maxload mintime minload",
(const void *)VAR_AUTOLOAD},
{"callback", NULL, SetVariable, LOCAL_AUTH | LOCAL_CX,
"callback control", "set callback [none|auth|cbcp|"
"E.164 *|number[,number]...]...", (const void *)VAR_CALLBACK},
{"cbcp", NULL, SetVariable, LOCAL_AUTH | LOCAL_CX,
"CBCP control", "set cbcp [*|phone[,phone...] [delay [timeout]]]",
(const void *)VAR_CBCP},
{"ccpretry", NULL, SetVariable, LOCAL_AUTH | LOCAL_CX_OPT,
"FSM retry period", "set ccpretry value", (const void *)VAR_CCPRETRY},
{"chapretry", NULL, SetVariable, LOCAL_AUTH | LOCAL_CX,

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.15 1998/06/30 23:04:14 brian Exp $
* $Id: datalink.c,v 1.16 1998/07/03 17:24:37 brian Exp $
*/
#include <sys/types.h>
@ -67,6 +67,7 @@
#include "pap.h"
#include "chap.h"
#include "command.h"
#include "cbcp.h"
#include "datalink.h"
static void datalink_LoginDone(struct datalink *);
@ -87,7 +88,7 @@ datalink_StartDialTimer(struct datalink *dl, int Timeout)
{
timer_Stop(&dl->dial_timer);
if (Timeout) {
if (Timeout) {
if (Timeout > 0)
dl->dial_timer.load = Timeout * SECTICKS;
else
@ -115,7 +116,26 @@ datalink_HangupDone(struct datalink *dl)
modem_Close(dl->physical);
dl->phone.chosen = "N/A";
if (dl->bundle->CleaningUp ||
if (dl->cbcp.required) {
log_Printf(LogPHASE, "Call peer back on %s\n", dl->cbcp.fsm.phone);
dl->cfg.callback.opmask = 0;
strncpy(dl->cfg.phone.list, dl->cbcp.fsm.phone,
sizeof dl->cfg.phone.list - 1);
dl->cfg.phone.list[sizeof dl->cfg.phone.list - 1] = '\0';
dl->phone.alt = dl->phone.next = NULL;
dl->reconnect_tries = dl->cfg.reconnect.max;
dl->dial_tries = dl->cfg.dial.max;
dl->script.run = 1;
dl->script.packetmode = 1;
if (!physical_SetMode(dl->physical, PHYS_BACKGROUND))
log_Printf(LogERROR, "Oops - can't change mode to BACKGROUND (gulp) !\n");
bundle_LinksRemoved(dl->bundle);
if (dl->cbcp.fsm.delay < dl->cfg.dial.timeout)
dl->cbcp.fsm.delay = dl->cfg.dial.timeout;
datalink_StartDialTimer(dl, dl->cbcp.fsm.delay);
cbcp_Down(&dl->cbcp);
datalink_NewState(dl, DATALINK_OPENING);
} else if (dl->bundle->CleaningUp ||
(dl->physical->type == PHYS_DIRECT) ||
((!dl->dial_tries || (dl->dial_tries < 0 && !dl->reconnect_tries)) &&
!(dl->physical->type & (PHYS_DDIAL|PHYS_DEDICATED)))) {
@ -301,6 +321,7 @@ datalink_UpdateSet(struct descriptor *d, fd_set *r, fd_set *w, fd_set *e,
case DATALINK_READY:
case DATALINK_LCP:
case DATALINK_AUTH:
case DATALINK_CBCP:
case DATALINK_OPEN:
result = descriptor_UpdateSet(&dl->physical->desc, r, w, e, n);
break;
@ -332,6 +353,7 @@ datalink_IsSet(struct descriptor *d, const fd_set *fdset)
case DATALINK_READY:
case DATALINK_LCP:
case DATALINK_AUTH:
case DATALINK_CBCP:
case DATALINK_OPEN:
return descriptor_IsSet(&dl->physical->desc, fdset);
}
@ -357,6 +379,7 @@ datalink_Read(struct descriptor *d, struct bundle *bundle, const fd_set *fdset)
case DATALINK_READY:
case DATALINK_LCP:
case DATALINK_AUTH:
case DATALINK_CBCP:
case DATALINK_OPEN:
descriptor_Read(&dl->physical->desc, bundle, fdset);
break;
@ -383,6 +406,7 @@ datalink_Write(struct descriptor *d, struct bundle *bundle, const fd_set *fdset)
case DATALINK_READY:
case DATALINK_LCP:
case DATALINK_AUTH:
case DATALINK_CBCP:
case DATALINK_OPEN:
result = descriptor_Write(&dl->physical->desc, bundle, fdset);
break;
@ -460,7 +484,7 @@ datalink_GotAuthname(struct datalink *dl, const char *name, int len)
}
void
datalink_AuthOk(struct datalink *dl)
datalink_NCPUp(struct datalink *dl)
{
int ccpok = ccp_SetOpenMode(&dl->physical->link.ccp);
@ -472,7 +496,7 @@ datalink_AuthOk(struct datalink *dl)
return;
case MP_UP:
/* First link in the bundle */
auth_Select(dl->bundle, dl->peer.authname, dl->physical);
auth_Select(dl->bundle, dl->peer.authname);
/* fall through */
case MP_ADDED:
/* We're in multilink mode ! */
@ -490,7 +514,7 @@ datalink_AuthOk(struct datalink *dl)
} else {
dl->bundle->ncp.mp.peer = dl->peer;
ipcp_SetLink(&dl->bundle->ncp.ipcp, &dl->physical->link);
auth_Select(dl->bundle, dl->peer.authname, dl->physical);
auth_Select(dl->bundle, dl->peer.authname);
}
if (ccpok) {
@ -502,6 +526,80 @@ datalink_AuthOk(struct datalink *dl)
(*dl->parent->LayerUp)(dl->parent->object, &dl->physical->link.lcp.fsm);
}
void
datalink_CBCPComplete(struct datalink *dl)
{
datalink_NewState(dl, DATALINK_LCP);
fsm_Close(&dl->physical->link.lcp.fsm);
}
void
datalink_CBCPFailed(struct datalink *dl)
{
cbcp_Down(&dl->cbcp);
datalink_CBCPComplete(dl);
}
void
datalink_AuthOk(struct datalink *dl)
{
if (dl->physical->link.lcp.his_callback.opmask ==
CALLBACK_BIT(CALLBACK_CBCP) ||
dl->physical->link.lcp.want_callback.opmask ==
CALLBACK_BIT(CALLBACK_CBCP)) {
datalink_NewState(dl, DATALINK_CBCP);
cbcp_Up(&dl->cbcp);
} else if (dl->physical->link.lcp.want_callback.opmask) {
log_Printf(LogPHASE, "%s: Shutdown and await peer callback\n", dl->name);
datalink_NewState(dl, DATALINK_LCP);
fsm_Close(&dl->physical->link.lcp.fsm);
} else
switch (dl->physical->link.lcp.his_callback.opmask) {
case 0:
datalink_NCPUp(dl);
break;
case CALLBACK_BIT(CALLBACK_AUTH):
auth_SetPhoneList(dl->peer.authname, dl->cbcp.fsm.phone,
sizeof dl->cbcp.fsm.phone);
if (*dl->cbcp.fsm.phone == '\0' || !strcmp(dl->cbcp.fsm.phone, "*")) {
log_Printf(LogPHASE, "%s: %s cannot be called back\n", dl->name,
dl->peer.authname);
*dl->cbcp.fsm.phone = '\0';
} else {
char *ptr = strchr(dl->cbcp.fsm.phone, ',');
if (ptr)
*ptr = '\0'; /* Call back on the first number */
log_Printf(LogPHASE, "%s: Calling peer back on %s\n", dl->name,
dl->cbcp.fsm.phone);
dl->cbcp.required = 1;
}
dl->cbcp.fsm.delay = 0;
datalink_NewState(dl, DATALINK_LCP);
fsm_Close(&dl->physical->link.lcp.fsm);
break;
case CALLBACK_BIT(CALLBACK_E164):
strncpy(dl->cbcp.fsm.phone, dl->physical->link.lcp.his_callback.msg,
sizeof dl->cbcp.fsm.phone - 1);
dl->cbcp.fsm.phone[sizeof dl->cbcp.fsm.phone - 1] = '\0';
log_Printf(LogPHASE, "%s: Calling peer back on %s\n", dl->name,
dl->cbcp.fsm.phone);
dl->cbcp.required = 1;
dl->cbcp.fsm.delay = 0;
datalink_NewState(dl, DATALINK_LCP);
fsm_Close(&dl->physical->link.lcp.fsm);
break;
default:
log_Printf(LogPHASE, "%s: Oops - Should have NAK'd peer callback !\n",
dl->name);
datalink_NewState(dl, DATALINK_LCP);
fsm_Close(&dl->physical->link.lcp.fsm);
break;
}
}
void
datalink_AuthNotOk(struct datalink *dl)
{
@ -522,7 +620,12 @@ datalink_LayerDown(void *v, struct fsm *fp)
fsm2initial(&dl->physical->link.ccp.fsm);
datalink_NewState(dl, DATALINK_LCP); /* before parent TLD */
(*dl->parent->LayerDown)(dl->parent->object, fp);
/* fall through */
/* fall through (just in case) */
case DATALINK_CBCP:
if (!dl->cbcp.required)
cbcp_Down(&dl->cbcp);
/* fall through (just in case) */
case DATALINK_AUTH:
timer_Stop(&dl->pap.authtimer);
@ -590,6 +693,11 @@ datalink_Create(const char *name, struct bundle *bundle, int type)
dl->cfg.reconnect.max = 0;
dl->cfg.reconnect.timeout = RECONNECT_TIMEOUT;
dl->cfg.callback.opmask = 0;
dl->cfg.cbcp.delay = 0;
*dl->cfg.cbcp.phone = '\0';
dl->cfg.cbcp.fsmretry = DEF_FSMRETRY;
dl->name = strdup(name);
peerid_Init(&dl->peer);
dl->parent = &bundle->fsm;
@ -607,6 +715,7 @@ datalink_Create(const char *name, struct bundle *bundle, int type)
free(dl);
return NULL;
}
cbcp_Init(&dl->cbcp, dl->physical);
chat_Init(&dl->chat, dl->physical, NULL, 1, NULL);
log_Printf(LogPHASE, "%s: Created in %s state\n",
@ -667,6 +776,7 @@ datalink_Clone(struct datalink *odl, const char *name)
memcpy(&dl->physical->async.cfg, &odl->physical->async.cfg,
sizeof dl->physical->async.cfg);
cbcp_Init(&dl->cbcp, dl->physical);
chat_Init(&dl->chat, dl->physical, NULL, 1, NULL);
log_Printf(LogPHASE, "%s: Cloned in %s state\n",
@ -747,6 +857,7 @@ datalink_Close(struct datalink *dl, int how)
fsm2initial(&dl->physical->link.ccp.fsm);
/* fall through */
case DATALINK_CBCP:
case DATALINK_AUTH:
case DATALINK_LCP:
fsm_Close(&dl->physical->link.lcp.fsm);
@ -773,6 +884,7 @@ datalink_Down(struct datalink *dl, int how)
fsm2initial(&dl->physical->link.ccp.fsm);
/* fall through */
case DATALINK_CBCP:
case DATALINK_AUTH:
case DATALINK_LCP:
fsm2initial(&dl->physical->link.lcp.fsm);
@ -800,30 +912,30 @@ int
datalink_Show(struct cmdargs const *arg)
{
prompt_Printf(arg->prompt, "Name: %s\n", arg->cx->name);
prompt_Printf(arg->prompt, " State: %s\n",
prompt_Printf(arg->prompt, " State: %s\n",
datalink_State(arg->cx));
prompt_Printf(arg->prompt, " CHAP Encryption: %s\n",
prompt_Printf(arg->prompt, " CHAP Encryption: %s\n",
arg->cx->chap.using_MSChap ? "MSChap" : "MD5" );
prompt_Printf(arg->prompt, " Peer name: ");
prompt_Printf(arg->prompt, " Peer name: ");
if (*arg->cx->peer.authname)
prompt_Printf(arg->prompt, "%s\n", arg->cx->peer.authname);
else if (arg->cx->state == DATALINK_OPEN)
prompt_Printf(arg->prompt, "None requested\n");
else
prompt_Printf(arg->prompt, "N/A\n");
prompt_Printf(arg->prompt, " Discriminator: %s\n",
prompt_Printf(arg->prompt, " Discriminator: %s\n",
mp_Enddisc(arg->cx->peer.enddisc.class,
arg->cx->peer.enddisc.address,
arg->cx->peer.enddisc.len));
prompt_Printf(arg->prompt, "\nDefaults:\n");
prompt_Printf(arg->prompt, " Phone List: %s\n",
prompt_Printf(arg->prompt, " Phone List: %s\n",
arg->cx->cfg.phone.list);
if (arg->cx->cfg.dial.max)
prompt_Printf(arg->prompt, " Dial tries: %d, delay ",
prompt_Printf(arg->prompt, " Dial tries: %d, delay ",
arg->cx->cfg.dial.max);
else
prompt_Printf(arg->prompt, " Dial tries: infinite, delay ");
prompt_Printf(arg->prompt, " Dial tries: infinite, delay ");
if (arg->cx->cfg.dial.next_timeout > 0)
prompt_Printf(arg->prompt, "%ds/", arg->cx->cfg.dial.next_timeout);
else
@ -832,17 +944,50 @@ datalink_Show(struct cmdargs const *arg)
prompt_Printf(arg->prompt, "%ds\n", arg->cx->cfg.dial.timeout);
else
prompt_Printf(arg->prompt, "random\n");
prompt_Printf(arg->prompt, " Reconnect tries: %d, delay ",
prompt_Printf(arg->prompt, " Reconnect tries: %d, delay ",
arg->cx->cfg.reconnect.max);
if (arg->cx->cfg.reconnect.timeout > 0)
prompt_Printf(arg->prompt, "%ds\n", arg->cx->cfg.reconnect.timeout);
else
prompt_Printf(arg->prompt, "random\n");
prompt_Printf(arg->prompt, " Dial Script: %s\n",
prompt_Printf(arg->prompt, " Callback %s ", arg->cx->physical->type ==
PHYS_DIRECT ? "accepted: " : "requested:");
if (!arg->cx->cfg.callback.opmask)
prompt_Printf(arg->prompt, "none\n");
else {
int comma = 0;
if (arg->cx->cfg.callback.opmask & CALLBACK_BIT(CALLBACK_NONE)) {
prompt_Printf(arg->prompt, "none");
comma = 1;
}
if (arg->cx->cfg.callback.opmask & CALLBACK_BIT(CALLBACK_AUTH)) {
prompt_Printf(arg->prompt, "%sauth", comma ? ", " : "");
comma = 1;
}
if (arg->cx->cfg.callback.opmask & CALLBACK_BIT(CALLBACK_E164)) {
prompt_Printf(arg->prompt, "%sE.164", comma ? ", " : "");
if (arg->cx->physical->type != PHYS_DIRECT)
prompt_Printf(arg->prompt, " (%s)", arg->cx->cfg.callback.msg);
comma = 1;
}
if (arg->cx->cfg.callback.opmask & CALLBACK_BIT(CALLBACK_CBCP)) {
prompt_Printf(arg->prompt, "%scbcp\n", comma ? ", " : "");
prompt_Printf(arg->prompt, " CBCP: delay: %ds\n",
arg->cx->cfg.cbcp.delay);
prompt_Printf(arg->prompt, " phone: %s\n",
arg->cx->cfg.cbcp.phone);
prompt_Printf(arg->prompt, " timeout: %lds\n",
arg->cx->cfg.cbcp.fsmretry);
} else
prompt_Printf(arg->prompt, "\n");
}
prompt_Printf(arg->prompt, " Dial Script: %s\n",
arg->cx->cfg.script.dial);
prompt_Printf(arg->prompt, " Login Script: %s\n",
prompt_Printf(arg->prompt, " Login Script: %s\n",
arg->cx->cfg.script.login);
prompt_Printf(arg->prompt, " Hangup Script: %s\n",
prompt_Printf(arg->prompt, " Hangup Script: %s\n",
arg->cx->cfg.script.hangup);
return 0;
}
@ -923,6 +1068,7 @@ static const char *states[] = {
"ready",
"lcp",
"auth",
"cbcp",
"open"
};
@ -1025,6 +1171,7 @@ iov2datalink(struct bundle *bundle, struct iovec *iov, int *niov, int maxiov,
free(dl);
dl = NULL;
} else {
cbcp_Init(&dl->cbcp, dl->physical);
chat_Init(&dl->chat, dl->physical, NULL, 1, NULL);
log_Printf(LogPHASE, "%s: Transferred in %s state\n",
@ -1043,6 +1190,8 @@ datalink2iov(struct datalink *dl, struct iovec *iov, int *niov, int maxiov,
if (dl) {
timer_Stop(&dl->dial_timer);
/* The following is purely for the sake of paranoia */
cbcp_Down(&dl->cbcp);
timer_Stop(&dl->pap.authtimer);
timer_Stop(&dl->chap.auth.authtimer);
}

View File

@ -23,7 +23,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $Id: datalink.h,v 1.3 1998/05/28 23:15:35 brian Exp $
* $Id: datalink.h,v 1.4 1998/06/15 19:05:19 brian Exp $
*/
#define DATALINK_CLOSED (0)
@ -34,7 +34,8 @@
#define DATALINK_READY (5)
#define DATALINK_LCP (6)
#define DATALINK_AUTH (7)
#define DATALINK_OPEN (8)
#define DATALINK_CBCP (8)
#define DATALINK_OPEN (9)
#define DATALINK_MAXNAME (20) /* Maximum datalink::name length */
@ -61,7 +62,7 @@ struct datalink {
unsigned packetmode : 1; /* Go into packet mode after login ? */
} script;
struct pppTimer dial_timer; /* For timing between opens & scripts */
struct pppTimer dial_timer; /* For timing between close & open */
struct {
struct {
@ -81,6 +82,8 @@ struct datalink {
int max; /* initially try again this number of times */
int timeout; /* Timeout before reconnect on carrier loss */
} reconnect;
struct callback callback; /* Direction depends on physical type */
struct cbcpcfg cbcp; /* Direction depends on phys type & callback */
} cfg; /* All our config data is in here */
struct {
@ -90,6 +93,8 @@ struct datalink {
const char *chosen; /* Chosen phone number after DIAL */
} phone;
struct cbcp cbcp;
int dial_tries; /* currently try again this number of times */
unsigned reconnect_tries; /* currently try again this number of times */
@ -126,6 +131,9 @@ extern void datalink_StayDown(struct datalink *);
extern void datalink_DontHangup(struct datalink *);
extern void datalink_AuthOk(struct datalink *);
extern void datalink_AuthNotOk(struct datalink *);
extern void datalink_NCPUp(struct datalink *);
extern void datalink_CBCPComplete(struct datalink *);
extern void datalink_CBCPFailed(struct datalink *);
extern int datalink_Show(struct cmdargs const *);
extern int datalink_SetRedial(struct cmdargs const *);
extern int datalink_SetReconnect(struct cmdargs const *);

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.9 1998/06/15 19:06:39 brian Exp $
* $Id: deflate.c,v 1.10 1998/06/16 19:40:36 brian Exp $
*/
#include <sys/types.h>
@ -32,6 +32,7 @@
#include <stdlib.h>
#include <zlib.h>
#include "defs.h"
#include "mbuf.h"
#include "log.h"
#include "timer.h"

View File

@ -15,7 +15,7 @@
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* $Id: defs.h,v 1.33 1998/06/27 23:48:43 brian Exp $
* $Id: defs.h,v 1.34 1998/07/11 02:48:36 brian Exp $
*
* TODO:
*/
@ -52,6 +52,7 @@
#define DEF_LQRPERIOD 30 /* Default LQR frequency */
#define MIN_FSMRETRY 3 /* Minimum FSM retry frequency */
#define DEF_FSMRETRY 3 /* FSM retry frequency */
#define DEF_REQs 5 /* This number of REQs in IRC */
#define CONFFILE "ppp.conf"
#define LINKUPFILE "ppp.linkup"

View File

@ -17,7 +17,7 @@
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* $Id: hdlc.c,v 1.34 1998/06/27 23:48:44 brian Exp $
* $Id: hdlc.c,v 1.35 1998/08/01 01:02:12 brian Exp $
*
* TODO:
*/
@ -58,6 +58,7 @@
#include "prompt.h"
#include "chat.h"
#include "mp.h"
#include "cbcp.h"
#include "datalink.h"
#include "filter.h"
#include "bundle.h"
@ -395,6 +396,14 @@ hdlc_DecodePacket(struct bundle *bundle, u_short proto, struct mbuf * bp,
mbuf_Free(bp);
}
break;
case PROTO_CBCP:
if (p)
cbcp_Input(p, bp);
else {
log_Printf(LogERROR, "DecodePacket: CBCP: Not a physical link !\n");
mbuf_Free(bp);
}
break;
case PROTO_LQR:
if (p) {
p->hdlc.lqm.lqr.SaveInLQRs++;

View File

@ -17,14 +17,16 @@
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* $Id: ip.c,v 1.48 1998/06/27 23:48:45 brian Exp $
* $Id: ip.c,v 1.49 1998/07/11 19:05:24 brian Exp $
*
* TODO:
* o Return ICMP message for filterd packet
* and optionaly record it into log.
*/
#include <sys/types.h>
#ifdef __OpenBSD__
#include <sys/socket.h>
#endif
#include <netinet/in.h>
#include <netinet/in_systm.h>
#include <netinet/ip.h>

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.61 1998/06/27 16:24:52 brian Exp $
* $Id: ipcp.c,v 1.62 1998/06/27 23:48:45 brian Exp $
*
* TODO:
* o More RFC1772 backward compatibility
@ -548,7 +548,7 @@ IpcpInitRestartCounter(struct fsm * fp)
struct ipcp *ipcp = fsm2ipcp(fp);
fp->FsmTimer.load = ipcp->cfg.fsmretry * SECTICKS;
fp->restart = 5;
fp->restart = DEF_REQs;
}
static void

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.60 1998/06/25 22:33:28 brian Exp $
* $Id: lcp.c,v 1.61 1998/06/27 23:48:47 brian Exp $
*
* TODO:
* o Limit data field length by MRU
@ -61,6 +61,7 @@
#include "chat.h"
#include "auth.h"
#include "chap.h"
#include "cbcp.h"
#include "datalink.h"
#include "bundle.h"
@ -237,6 +238,7 @@ lcp_Setup(struct lcp *lcp, int openmode)
lcp->his_lqrperiod = 0;
lcp->his_acfcomp = 0;
lcp->his_auth = 0;
lcp->his_callback.opmask = 0;
lcp->his_shortseq = 0;
lcp->want_mru = lcp->cfg.mru;
@ -245,6 +247,8 @@ lcp_Setup(struct lcp *lcp, int openmode)
lcp->want_acfcomp = IsEnabled(lcp->cfg.acfcomp) ? 1 : 0;
if (lcp->fsm.parent) {
struct physical *p = link2physical(lcp->fsm.link);
lcp->his_accmap = 0xffffffff;
lcp->want_accmap = lcp->cfg.accmap;
lcp->his_protocomp = 0;
@ -252,6 +256,10 @@ lcp_Setup(struct lcp *lcp, int openmode)
lcp->want_magic = GenerateMagic();
lcp->want_auth = IsEnabled(lcp->cfg.chap) ? PROTO_CHAP :
IsEnabled(lcp->cfg.pap) ? PROTO_PAP : 0;
if (p->type != PHYS_DIRECT)
memcpy(&lcp->want_callback, &p->dl->cfg.callback, sizeof(struct callback));
else
lcp->want_callback.opmask = 0;
lcp->want_lqrperiod = IsEnabled(lcp->cfg.lqr) ?
lcp->cfg.lqrperiod * 100 : 0;
} else {
@ -259,6 +267,7 @@ lcp_Setup(struct lcp *lcp, int openmode)
lcp->his_protocomp = lcp->want_protocomp = 1;
lcp->want_magic = 0;
lcp->want_auth = 0;
lcp->want_callback.opmask = 0;
lcp->want_lqrperiod = 0;
}
@ -274,7 +283,7 @@ LcpInitRestartCounter(struct fsm * fp)
struct lcp *lcp = fsm2lcp(fp);
fp->FsmTimer.load = lcp->cfg.fsmretry * SECTICKS;
fp->restart = 5;
fp->restart = DEF_REQs;
}
static void
@ -336,6 +345,26 @@ LcpSendConfigReq(struct fsm *fp)
break;
}
if (!REJECTED(lcp, TY_CALLBACK)) {
if (lcp->want_callback.opmask & CALLBACK_BIT(CALLBACK_AUTH)) {
*o->data = CALLBACK_AUTH;
INC_LCP_OPT(TY_CALLBACK, 3, o);
} else if (lcp->want_callback.opmask & CALLBACK_BIT(CALLBACK_CBCP)) {
*o->data = CALLBACK_CBCP;
INC_LCP_OPT(TY_CALLBACK, 3, o);
} else if (lcp->want_callback.opmask & CALLBACK_BIT(CALLBACK_E164)) {
int sz = strlen(lcp->want_callback.msg);
if (sz > sizeof o->data - 1) {
sz = sizeof o->data - 1;
log_Printf(LogWARN, "Truncating E164 data to %d octets (oops!)\n", sz);
}
*o->data = CALLBACK_E164;
memcpy(o->data + 1, lcp->want_callback.msg, sz);
INC_LCP_OPT(TY_CALLBACK, sz + 3, o);
}
}
if (lcp->want_mrru && !REJECTED(lcp, TY_MRRU)) {
*(u_int16_t *)o->data = htons(lcp->want_mrru);
INC_LCP_OPT(TY_MRRU, 4, o);
@ -371,6 +400,11 @@ static void
LcpSendTerminateAck(struct fsm *fp, u_char id)
{
/* Send Term ACK please */
struct physical *p = link2physical(fp->link);
if (p && p->dl->state == DATALINK_CBCP)
cbcp_ReceiveTerminateReq(p);
fsm_Output(fp, CODE_TERMACK, id, NULL, 0);
}
@ -417,13 +451,32 @@ LcpLayerDown(struct fsm *fp)
lcp_Setup(fsm2lcp(fp), 0);
}
static int
E164ok(struct callback *cb, char *req, int sz)
{
char list[sizeof cb->msg], *next;
int len;
if (!strcmp(cb->msg, "*"))
return 1;
strncpy(list, cb->msg, sizeof list - 1);
list[sizeof list - 1] = '\0';
for (next = strtok(list, ","); next; next = strtok(NULL, ",")) {
len = strlen(next);
if (sz == len && !memcmp(list, req, sz))
return 1;
}
return 0;
}
static void
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);
int type, length, sz, pos;
int type, length, sz, pos, op, callback_req;
u_int32_t magic, accmap;
u_short mtu, mru, proto;
u_int16_t *sp;
@ -432,20 +485,22 @@ LcpDecodeConfig(struct fsm *fp, u_char *cp, int plen, int mode_type,
struct mp *mp;
struct physical *p = link2physical(fp->link);
callback_req = 0;
while (plen >= sizeof(struct fsmconfig)) {
type = *cp;
length = cp[1];
if (length == 0) {
log_Printf(LogLCP, "%s: LCP size zero\n", fp->link->name);
break;
}
if (type < 0 || type >= NCFTYPES)
snprintf(request, sizeof request, " <%d>[%d]", type, length);
else
snprintf(request, sizeof request, " %s[%d]", cftypes[type], length);
if (length < 2) {
log_Printf(LogLCP, "%s:%s: Bad LCP length\n", fp->link->name, request);
break;
}
switch (type) {
case TY_MRRU:
mp = &lcp->fsm.bundle->ncp.mp;
@ -782,6 +837,103 @@ LcpDecodeConfig(struct fsm *fp, u_char *cp, int plen, int mode_type,
}
break;
case TY_CALLBACK:
if (length == 2)
op = CALLBACK_NONE;
else
op = (int)cp[2];
sz = length - 3;
switch (op) {
case CALLBACK_AUTH:
log_Printf(LogLCP, "%s Auth\n", request);
break;
case CALLBACK_DIALSTRING:
log_Printf(LogLCP, "%s Dialstring %.*s\n", request, sz, cp + 3);
break;
case CALLBACK_LOCATION:
log_Printf(LogLCP, "%s Location %.*s\n", request, sz, cp + 3);
break;
case CALLBACK_E164:
log_Printf(LogLCP, "%s E.164 (%.*s)\n", request, sz, cp + 3);
break;
case CALLBACK_NAME:
log_Printf(LogLCP, "%s Name %.*s\n", request, sz, cp + 3);
break;
case CALLBACK_CBCP:
log_Printf(LogLCP, "%s CBCP\n", request);
break;
default:
log_Printf(LogLCP, "%s ???\n", request);
break;
}
switch (mode_type) {
case MODE_REQ:
callback_req = 1;
if (p->type != PHYS_DIRECT)
goto reqreject;
if ((p->dl->cfg.callback.opmask & CALLBACK_BIT(op)) &&
(op != CALLBACK_AUTH || p->link.lcp.auth_ineed) &&
(op != CALLBACK_E164 ||
E164ok(&p->dl->cfg.callback, cp + 3, sz))) {
lcp->his_callback.opmask = CALLBACK_BIT(op);
if (sz > sizeof lcp->his_callback.msg - 1) {
sz = sizeof lcp->his_callback.msg - 1;
log_Printf(LogWARN, "Truncating option arg to %d octets\n", sz);
}
memcpy(lcp->his_callback.msg, cp + 3, sz);
lcp->his_callback.msg[sz] = '\0';
memcpy(dec->ackend, cp, sz + 3);
dec->ackend += sz + 3;
} else if ((p->dl->cfg.callback.opmask & CALLBACK_BIT(CALLBACK_AUTH)) &&
p->link.lcp.auth_ineed) {
*dec->nakend++ = *cp;
*dec->nakend++ = 3;
*dec->nakend++ = CALLBACK_AUTH;
} else if (p->dl->cfg.callback.opmask & CALLBACK_BIT(CALLBACK_CBCP)) {
*dec->nakend++ = *cp;
*dec->nakend++ = 3;
*dec->nakend++ = CALLBACK_CBCP;
} else if (p->dl->cfg.callback.opmask & CALLBACK_BIT(CALLBACK_E164)) {
*dec->nakend++ = *cp;
*dec->nakend++ = 3;
*dec->nakend++ = CALLBACK_E164;
} else if (p->dl->cfg.callback.opmask & CALLBACK_BIT(CALLBACK_AUTH)) {
log_Printf(LogWARN, "Cannot insist on auth callback without"
" PAP or CHAP enabled !\n");
*dec->nakend++ = *cp;
*dec->nakend++ = 2;
} else
goto reqreject;
break;
case MODE_NAK:
/* We don't do what he NAKs want, we do things in our preferred order */
if (lcp->want_callback.opmask & CALLBACK_BIT(CALLBACK_AUTH))
lcp->want_callback.opmask &= ~CALLBACK_BIT(CALLBACK_AUTH);
else if (lcp->want_callback.opmask & CALLBACK_BIT(CALLBACK_CBCP))
lcp->want_callback.opmask &= ~CALLBACK_BIT(CALLBACK_CBCP);
else if (lcp->want_callback.opmask & CALLBACK_BIT(CALLBACK_E164))
lcp->want_callback.opmask &= ~CALLBACK_BIT(CALLBACK_E164);
if (lcp->want_callback.opmask == CALLBACK_BIT(CALLBACK_NONE)) {
log_Printf(LogPHASE, "Peer NAKd all callbacks, trying none\n");
lcp->want_callback.opmask = 0;
} else if (!lcp->want_callback.opmask) {
log_Printf(LogPHASE, "Peer NAKd last configured callback\n");
fsm_Close(&lcp->fsm);
}
break;
case MODE_REJ:
if (lcp->want_callback.opmask & CALLBACK_BIT(CALLBACK_NONE)) {
lcp->his_reject |= (1 << type);
lcp->want_callback.opmask = 0;
} else {
log_Printf(LogPHASE, "Peer rejected *required* callback\n");
fsm_Close(&lcp->fsm);
}
break;
}
break;
case TY_SHORTSEQ:
mp = &lcp->fsm.bundle->ncp.mp;
log_Printf(LogLCP, "%s\n", request);
@ -874,6 +1026,25 @@ LcpDecodeConfig(struct fsm *fp, u_char *cp, int plen, int mode_type,
}
if (mode_type != MODE_NOP) {
if (mode_type == MODE_REQ && p && p->type == PHYS_DIRECT &&
p->dl->cfg.callback.opmask && !callback_req &&
!(p->dl->cfg.callback.opmask & CALLBACK_BIT(CALLBACK_NONE))) {
/* We *REQUIRE* that the peer requests callback */
*dec->nakend++ = TY_CALLBACK;
*dec->nakend++ = 3;
if ((p->dl->cfg.callback.opmask & CALLBACK_BIT(CALLBACK_AUTH)) &&
p->link.lcp.auth_ineed)
*dec->nakend++ = CALLBACK_AUTH;
else if (p->dl->cfg.callback.opmask & CALLBACK_BIT(CALLBACK_CBCP))
*dec->nakend++ = CALLBACK_CBCP;
else if (p->dl->cfg.callback.opmask & CALLBACK_BIT(CALLBACK_E164))
*dec->nakend++ = CALLBACK_E164;
else {
log_Printf(LogWARN, "Cannot insist on auth callback without"
" PAP or CHAP enabled !\n");
dec->nakend[-1] = 2; /* XXX: Silly ! */
}
}
if (dec->rejend != dec->rej) {
/* rejects are preferred */
dec->ackend = dec->ack;

View File

@ -15,11 +15,27 @@
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* $Id: lcp.h,v 1.17 1998/05/21 21:46:03 brian Exp $
* $Id: lcp.h,v 1.18 1998/06/27 23:48:48 brian Exp $
*
* TODO:
*/
/* callback::opmask values */
#define CALLBACK_AUTH (0)
#define CALLBACK_DIALSTRING (1) /* Don't do this */
#define CALLBACK_LOCATION (2) /* Don't do this */
#define CALLBACK_E164 (3)
#define CALLBACK_NAME (4) /* Don't do this */
#define CALLBACK_CBCP (6)
#define CALLBACK_NONE (14) /* No callback is ok */
#define CALLBACK_BIT(n) ((n) < 0 ? 0 : 1 << (n))
struct callback {
int opmask; /* want these types of callback */
char msg[SCRIPT_LEN]; /* with this data (E.164) */
};
#define REJECTED(p, x) ((p)->his_reject & (1<<(x)))
struct lcp {
@ -30,6 +46,7 @@ struct lcp {
u_int32_t his_magic; /* Peers magic number */
u_int32_t his_lqrperiod; /* Peers LQR frequency (100ths of seconds) */
u_short his_auth; /* Peer wants this type of authentication */
struct callback his_callback; /* Peer wants callback ? */
unsigned his_shortseq : 1; /* Peer would like only 12bit seqs (MP) */
unsigned his_protocomp : 1; /* Does peer do Protocol field compression */
unsigned his_acfcomp : 1; /* Does peer do addr & cntrl fld compression */
@ -40,6 +57,7 @@ struct lcp {
u_int32_t want_magic; /* Our magic number */
u_int32_t want_lqrperiod; /* Our LQR frequency (100ths of seconds) */
u_short want_auth; /* We want this type of authentication */
struct callback want_callback;/* We want callback ? */
unsigned want_shortseq : 1; /* I'd like only 12bit seqs (MP) */
unsigned want_protocomp : 1; /* Do we do protocol field compression */
unsigned want_acfcomp : 1; /* Do we do addr & cntrl fld compression */
@ -80,11 +98,13 @@ struct lcp {
#define TY_ACFCOMP 8 /* Address-and-Control-Field-Compression */
#define TY_FCSALT 9 /* FCS-Alternatives */
#define TY_SDP 10 /* Self-Describing-Padding */
#define TY_CALLBACK 13 /* Callback */
#define TY_CFRAMES 15 /* Compound-frames */
#define TY_MRRU 17 /* Max Reconstructed Receive Unit (MP) */
#define TY_SHORTSEQ 18 /* Want short seqs (12bit) please (see mp.h) */
#define TY_ENDDISC 19 /* Endpoint discriminator */
#define MAX_LCP_OPT_LEN 10
#define MAX_LCP_OPT_LEN 20
struct lcp_opt {
u_char id;
u_char len;

View File

@ -15,7 +15,7 @@
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* $Id: lcpproto.h,v 1.10.2.2 1998/05/15 18:21:07 brian Exp $
* $Id: lcpproto.h,v 1.11 1998/05/21 21:46:05 brian Exp $
*
* TODO:
*/
@ -38,5 +38,6 @@
#define PROTO_LCP 0xc021
#define PROTO_PAP 0xc023
#define PROTO_CBCP 0xc029
#define PROTO_LQR 0xc025
#define PROTO_CHAP 0xc223

View File

@ -23,16 +23,16 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $Id: link.c,v 1.2 1998/05/21 21:46:10 brian Exp $
* $Id: link.c,v 1.3 1998/06/27 23:48:49 brian Exp $
*
*/
#include <sys/types.h>
#include <stdio.h>
#include <string.h>
#include <termios.h>
#include "defs.h"
#include "mbuf.h"
#include "log.h"
#include "timer.h"

View File

@ -23,7 +23,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $Id: log.c,v 1.31 1998/06/15 19:06:48 brian Exp $
* $Id: log.c,v 1.32 1998/08/02 13:01:15 brian Exp $
*/
#include <sys/types.h>
@ -43,6 +43,7 @@
static const char *LogNames[] = {
"Async",
"CBCP",
"CCP",
"Chat",
"Command",

View File

@ -23,30 +23,31 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $Id: log.h,v 1.20 1998/05/23 22:24:41 brian Exp $
* $Id: log.h,v 1.21 1998/08/02 13:01:16 brian Exp $
*/
#define LogMIN (1)
#define LogASYNC (1) /* syslog(LOG_INFO, ....) */
#define LogCCP (2)
#define LogCHAT (3)
#define LogCOMMAND (4)
#define LogCONNECT (5)
#define LogDEBUG (6) /* syslog(LOG_DEBUG, ....) */
#define LogHDLC (7)
#define LogID0 (8)
#define LogIPCP (9)
#define LogLCP (10)
#define LogLQM (11)
#define LogPHASE (12)
#define LogTCPIP (13)
#define LogTIMER (14) /* syslog(LOG_DEBUG, ....) */
#define LogTUN (15) /* If set, tun%d is output with each message */
#define LogMAXCONF (15)
#define LogWARN (16) /* Sent to VarTerm else syslog(LOG_WARNING, ) */
#define LogERROR (17) /* syslog(LOG_ERR, ....), + sent to VarTerm */
#define LogALERT (18) /* syslog(LOG_ALERT, ....) */
#define LogMAX (18)
#define LogCBCP (2)
#define LogCCP (3)
#define LogCHAT (4)
#define LogCOMMAND (5)
#define LogCONNECT (6)
#define LogDEBUG (7) /* syslog(LOG_DEBUG, ....) */
#define LogHDLC (8)
#define LogID0 (9)
#define LogIPCP (10)
#define LogLCP (11)
#define LogLQM (12)
#define LogPHASE (13)
#define LogTCPIP (14)
#define LogTIMER (15) /* syslog(LOG_DEBUG, ....) */
#define LogTUN (16) /* If set, tun%d is output with each message */
#define LogMAXCONF (16)
#define LogWARN (17) /* Sent to VarTerm else syslog(LOG_WARNING, ) */
#define LogERROR (18) /* syslog(LOG_ERR, ....), + sent to VarTerm */
#define LogALERT (19) /* syslog(LOG_ALERT, ....) */
#define LogMAX (19)
struct mbuf;
struct cmdargs;

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.28 1998/06/26 19:02:40 brian Exp $
* $Id: lqr.c,v 1.29 1998/06/27 23:48:49 brian Exp $
*
* o LQR based on RFC1333
*
@ -52,6 +52,7 @@
#include "auth.h"
#include "chap.h"
#include "command.h"
#include "cbcp.h"
#include "datalink.h"
struct echolqr {

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.139 1998/06/27 14:18:07 brian Exp $
* $Id: main.c,v 1.140 1998/08/02 06:56:40 brian Exp $
*
* TODO:
*/
@ -66,6 +66,7 @@
#include "prompt.h"
#include "chat.h"
#include "chap.h"
#include "cbcp.h"
#include "datalink.h"
#ifndef O_NONBLOCK

View File

@ -17,7 +17,7 @@
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* $Id: mbuf.c,v 1.17 1998/06/16 19:40:20 brian Exp $
* $Id: mbuf.c,v 1.18 1998/06/27 23:48:50 brian Exp $
*
*/
#include <sys/types.h>
@ -154,8 +154,8 @@ mbuf_Show(struct cmdargs const *arg)
{
int i;
static const char *mbuftype[] = {
"async", "fsm", "hdlcout", "ipin", "echo", "lqr", "link", "vjcomp",
"ipq", "mp" };
"async", "fsm", "cbcp", "hdlcout", "ipin", "echo", "lqr", "link",
"vjcomp", "ipq", "mp" };
for (i = 1; i < MB_MAX; i += 2)
prompt_Printf(arg->prompt, "%10.10s: %04d\t%10.10s: %04d\n",
@ -176,8 +176,8 @@ mbuf_Log()
MemMap[1].count, MemMap[2].count, MemMap[3].count, MemMap[4].count);
log_Printf(LogDEBUG, "mbuf_Log: 5: %d 6: %d 7: %d 8: %d\n",
MemMap[5].count, MemMap[6].count, MemMap[7].count, MemMap[8].count);
log_Printf(LogDEBUG, "mbuf_Log: 9: %d 10: %d\n",
MemMap[9].count, MemMap[10].count);
log_Printf(LogDEBUG, "mbuf_Log: 9: %d 10: %d 11: %d\n",
MemMap[9].count, MemMap[10].count, MemMap[11].count);
}
struct mbuf *

View File

@ -15,7 +15,7 @@
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* $Id: mbuf.h,v 1.11.2.5 1998/05/01 19:25:24 brian Exp $
* $Id: mbuf.h,v 1.12 1998/05/21 21:46:49 brian Exp $
*
* TODO:
*/
@ -40,14 +40,15 @@ struct mqueue {
#define MB_ASYNC 1
#define MB_FSM 2
#define MB_HDLCOUT 3
#define MB_IPIN 4
#define MB_ECHO 5
#define MB_LQR 6
#define MB_LINK 7
#define MB_VJCOMP 8
#define MB_IPQ 9
#define MB_MP 10
#define MB_CBCP 3
#define MB_HDLCOUT 4
#define MB_IPIN 5
#define MB_ECHO 6
#define MB_LQR 7
#define MB_LINK 8
#define MB_VJCOMP 9
#define MB_IPQ 10
#define MB_MP 11
#define MB_MAX MB_MP
struct cmdargs;

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.95 1998/07/03 17:24:38 brian Exp $
* $Id: modem.c,v 1.96 1998/07/29 18:20:53 brian Exp $
*
* TODO:
*/
@ -36,12 +36,12 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ioctl.h>
#include <sys/tty.h>
#include <sys/uio.h>
#include <sys/wait.h>
#include <unistd.h>
#ifdef __OpenBSD__
#include <sys/ioctl.h>
#include <util.h>
#else
#include <libutil.h>
@ -74,6 +74,7 @@
#include "chat.h"
#include "auth.h"
#include "chap.h"
#include "cbcp.h"
#include "datalink.h"

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.11 1998/06/24 19:33:34 brian Exp $
* $Id: mp.c,v 1.12 1998/06/30 23:04:17 brian Exp $
*/
#include <sys/types.h>
@ -68,6 +68,7 @@
#include "filter.h"
#include "mp.h"
#include "chap.h"
#include "cbcp.h"
#include "datalink.h"
#include "bundle.h"
#include "ip.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.24 1998/06/27 23:48:51 brian Exp $
* $Id: pap.c,v 1.25 1998/07/28 21:54:30 brian Exp $
*
* TODO:
*/
@ -28,7 +28,6 @@
#include <netinet/ip.h>
#include <sys/un.h>
#include <string.h>
#include <termios.h>
#include "mbuf.h"
@ -56,6 +55,7 @@
#include "bundle.h"
#include "chat.h"
#include "chap.h"
#include "cbcp.h"
#include "datalink.h"
static const char *papcodes[] = { "???", "REQUEST", "SUCCESS", "FAILURE" };

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.3 1998/05/23 22:24:47 brian Exp $
* $Id: physical.c,v 1.4 1998/06/27 14:18:09 brian Exp $
*
*/
@ -217,8 +217,9 @@ physical_Logout(struct physical *phys)
int
physical_SetMode(struct physical *p, int mode)
{
if (p->type & (PHYS_DIRECT|PHYS_DEDICATED)
|| mode & (PHYS_DIRECT|PHYS_DEDICATED)) {
if ((p->type & (PHYS_DIRECT|PHYS_DEDICATED) ||
mode & (PHYS_DIRECT|PHYS_DEDICATED)) &&
(!(p->type & PHYS_DIRECT) || !(mode & PHYS_BACKGROUND))) {
log_Printf(LogWARN, "%s: Cannot change mode %s to %s\n", p->link.name,
mode2Nam(p->type), mode2Nam(mode));
return 0;

View File

@ -1,4 +1,4 @@
.\" $Id: ppp.8,v 1.112 1998/07/29 18:21:17 brian Exp $
.\" $Id: ppp.8,v 1.113 1998/07/31 19:50:24 brian Exp $
.Dd 20 September 1995
.Os FreeBSD
.Dt PPP 8
@ -74,6 +74,10 @@ command via its diagnostic socket. A
will force an LCP renegotiation, and a
.Dv SIGTERM
will force it to exit.
.It Supports client callback.
.Nm Ppp
can use either the standard LCP callback protocol or the Microsoft
CallBack Control Protocol (ftp://ftp.microsoft.com/developr/rfc/cbcp.txt).
.It Supports packet aliasing.
Packet aliasing (a.k.a. IP masquerading) allows computers on a
private, unregistered network to access the Internet. The
@ -161,7 +165,7 @@ is installed as user
and group
.Dv network ,
with permissions
.Dv 4550 .
.Dv 4554 .
By default,
.Nm
will not run if the invoking user id is not zero. This may be overridden
@ -278,6 +282,15 @@ lines to the file
Refer to the
.Xr resolv.conf 5
manual page for details.
.Pp
Alternatively, if the peer supports it,
.Nm
can be configured to ask the peer for the nameserver address(es) and to
update
.Pa /etc/resolv.conf
automatically. Refer to the
.Dq enable dns
command below for details.
.El
.Sh MANUAL DIALING
In the following examples, we assume that your machine name is
@ -477,11 +490,20 @@ portion of the prompt will change to
# ppp MyISP
...
ppp ON awfulhak> dial
dial OK!
login OK!
Ppp ON awfulhak>
PPp ON awfulhak>
PPP ON awfulhak>
.Ed
.Pp
The Ppp prompt indicates that
.Nm
has entered the authentication phase. The PPp prompt indicates that
.Nm
has entered the network phase. The PPP prompt indicates that
.Nm
has successfully negotiated a network layer protocol and is in
a usable state.
.Pp
If the
.Pa /etc/ppp/ppp.linkup
file is available, its contents are executed
@ -905,7 +927,9 @@ Instead of running
over a serial link, it is possible to
use a TCP connection instead by specifying a host and port as the
device:
.Pp
.Dl set device ui-gate:6669
.Pp
Instead of opening a serial device,
.Nm
will open a TCP connection to the given machine on the given
@ -918,13 +942,17 @@ connection on the receiving machine (ui-gate). This is
done by first updating
.Pa /etc/services
to name the service:
.Pp
.Dl ppp-in 6669/tcp # Incoming PPP connections over TCP
.Pp
and updating
.Pa /etc/inetd.conf
to tell
.Xr inetd 8
how to deal with incoming connections on that port:
.Pp
.Dl ppp-in stream tcp nowait root /usr/sbin/ppp ppp -direct ppp-in
.Pp
Don't forget to send a
.Dv HUP
signal to
@ -986,7 +1014,9 @@ Again, if you're enabling PAP, you'll also need:
We're assigning the address of 10.0.4.1 to ui-gate, and the address
10.0.4.2 to awfulhak.
To open the connection, just type
.Pp
.Dl awfulhak # ppp -background ui-gate
.Pp
The result will be an additional "route" on awfulhak to the
10.0.2.0/24 network via the TCP connection, and an additional
"route" on ui-gate to the 10.0.1.0/24 network.
@ -1442,7 +1472,10 @@ logging) so that the actual password is not compromised
.Ar chat
logging is active rather than the actual password.
.Pp
Login scripts vary greatly between ISPs.
Login scripts vary greatly between ISPs. If you're setting one up
for the first time,
.Em ENABLE CHAT LOGGING
so that you can see if your script is behaving as you expect.
.It
Use
.Dq set line
@ -1531,6 +1564,20 @@ set authkey MyPassword
Both are accepted by default, so
.Nm
will provide whatever your ISP requires.
.Pp
It should be noted that a login script is rarely (if ever) required
when PAP or CHAP are in use.
.It
Ask your ISP to authenticate your nameserver address(es) with the line
.Bd -literal -offset indent
enable dns
.Ed
Do
.Em NOT
do this if you are running an local DNS, as
.Nm
will simply circumvent its use by entering some nameserver lines in
.Pa /etc/resolv.conf .
.El
.Pp
Please refer to
@ -1540,12 +1587,13 @@ and
for some real examples. The pmdemand label should be appropriate for most
ISPs.
.Sh LOGGING FACILITY
.Nm
.Nm Ppp
is able to generate the following log info either via
.Xr syslog 3
or directly to the screen:
.Bl -column SMMMMMM -offset indent
.It Li Async Dump async level packet in hex
.It Li CBCP Generate CBCP (CallBack Control Protocol) logs
.It Li CCP Generate a CCP packet trace
.It Li Chat Generate Chat script trace log
.It Li Command Log commands executed
@ -2571,6 +2619,83 @@ If
is zero, this timer is disabled. Because both values default to zero,
.Ar demand-dial
links will stay active until the bundle idle timer expires.
.It set callback [none|auth|cbcp|E.164 *|number[,number]...]...
If no arguments are given, callback is disabled, otherwise,
.Nm
will request (or in
.Ar direct
mode, will accept) one of the given protocols. If a request is NAK'd
.Nm
will request another, until no options remain at which point
.Nm
will terminate negotiations.
The options are as follows (in this order of preference):
.Pp
.Bl -tag
.It auth
The callee is expected to decide the callback number based on
authentication. If
.Nm
is the callee, the number should be specified as the fifth field of
the peers entry in
.Pa /etc/ppp/ppp.secret .
.It cbcp
Microsofts callback control protocol is used. See
.Dq set cbcp
below.
.It E.164 *|number[,number]...
The caller specifies the
.Ar number .
If
.Nm
is the callee,
.Ar number
should be either a comma seperated list of allowable numbers or a
.Dq \&* ,
meaning any number is permitted. If
.Nm
is the caller, only a single number should be specified.
.Pp
Note, this option is very unsafe when used with a
.Dq \&*
as a malicious caller can tell
.Nm
to call any (possibly international) number without first authenticating
themselves.
.It none
If the peer does not wish to do callback at all,
.Nm
will accept the fact and continue without callback rather than terminating
the connection.
.El
.Pp
.It set cbcp Op *|number[,number]... Op delay Op retry
If no arguments are given, CBCP (Microsofts CallBack Control Protocol)
is disabled - ie, configuring CBCP in the
.Dq set callback
command will result in
.Nm
requesting no callback in the CBCP phase.
Otherwise,
.Nm
attempts to use the given phone
.Ar number Ns No (s).
.Pp
In server mode
.Pq Fl direct ,
.Nm
will insist that the client uses one of these numbers, unless
.Dq \&*
is used in which case the client is expected to specify the number.
.Pp
In client mode,
.Nm
will attempt to use one of the given numbers (whichever it finds to
be agreeable with the peer), or if
.Dq \&*
is specified,
.Nm
will expect the peer to specify the number.
.It set ctsrts|crtscts on|off
This sets hardware flow control. Hardware flow control is
.Ar on

View File

@ -1,4 +1,4 @@
.\" $Id: ppp.8,v 1.112 1998/07/29 18:21:17 brian Exp $
.\" $Id: ppp.8,v 1.113 1998/07/31 19:50:24 brian Exp $
.Dd 20 September 1995
.Os FreeBSD
.Dt PPP 8
@ -74,6 +74,10 @@ command via its diagnostic socket. A
will force an LCP renegotiation, and a
.Dv SIGTERM
will force it to exit.
.It Supports client callback.
.Nm Ppp
can use either the standard LCP callback protocol or the Microsoft
CallBack Control Protocol (ftp://ftp.microsoft.com/developr/rfc/cbcp.txt).
.It Supports packet aliasing.
Packet aliasing (a.k.a. IP masquerading) allows computers on a
private, unregistered network to access the Internet. The
@ -161,7 +165,7 @@ is installed as user
and group
.Dv network ,
with permissions
.Dv 4550 .
.Dv 4554 .
By default,
.Nm
will not run if the invoking user id is not zero. This may be overridden
@ -278,6 +282,15 @@ lines to the file
Refer to the
.Xr resolv.conf 5
manual page for details.
.Pp
Alternatively, if the peer supports it,
.Nm
can be configured to ask the peer for the nameserver address(es) and to
update
.Pa /etc/resolv.conf
automatically. Refer to the
.Dq enable dns
command below for details.
.El
.Sh MANUAL DIALING
In the following examples, we assume that your machine name is
@ -477,11 +490,20 @@ portion of the prompt will change to
# ppp MyISP
...
ppp ON awfulhak> dial
dial OK!
login OK!
Ppp ON awfulhak>
PPp ON awfulhak>
PPP ON awfulhak>
.Ed
.Pp
The Ppp prompt indicates that
.Nm
has entered the authentication phase. The PPp prompt indicates that
.Nm
has entered the network phase. The PPP prompt indicates that
.Nm
has successfully negotiated a network layer protocol and is in
a usable state.
.Pp
If the
.Pa /etc/ppp/ppp.linkup
file is available, its contents are executed
@ -905,7 +927,9 @@ Instead of running
over a serial link, it is possible to
use a TCP connection instead by specifying a host and port as the
device:
.Pp
.Dl set device ui-gate:6669
.Pp
Instead of opening a serial device,
.Nm
will open a TCP connection to the given machine on the given
@ -918,13 +942,17 @@ connection on the receiving machine (ui-gate). This is
done by first updating
.Pa /etc/services
to name the service:
.Pp
.Dl ppp-in 6669/tcp # Incoming PPP connections over TCP
.Pp
and updating
.Pa /etc/inetd.conf
to tell
.Xr inetd 8
how to deal with incoming connections on that port:
.Pp
.Dl ppp-in stream tcp nowait root /usr/sbin/ppp ppp -direct ppp-in
.Pp
Don't forget to send a
.Dv HUP
signal to
@ -986,7 +1014,9 @@ Again, if you're enabling PAP, you'll also need:
We're assigning the address of 10.0.4.1 to ui-gate, and the address
10.0.4.2 to awfulhak.
To open the connection, just type
.Pp
.Dl awfulhak # ppp -background ui-gate
.Pp
The result will be an additional "route" on awfulhak to the
10.0.2.0/24 network via the TCP connection, and an additional
"route" on ui-gate to the 10.0.1.0/24 network.
@ -1442,7 +1472,10 @@ logging) so that the actual password is not compromised
.Ar chat
logging is active rather than the actual password.
.Pp
Login scripts vary greatly between ISPs.
Login scripts vary greatly between ISPs. If you're setting one up
for the first time,
.Em ENABLE CHAT LOGGING
so that you can see if your script is behaving as you expect.
.It
Use
.Dq set line
@ -1531,6 +1564,20 @@ set authkey MyPassword
Both are accepted by default, so
.Nm
will provide whatever your ISP requires.
.Pp
It should be noted that a login script is rarely (if ever) required
when PAP or CHAP are in use.
.It
Ask your ISP to authenticate your nameserver address(es) with the line
.Bd -literal -offset indent
enable dns
.Ed
Do
.Em NOT
do this if you are running an local DNS, as
.Nm
will simply circumvent its use by entering some nameserver lines in
.Pa /etc/resolv.conf .
.El
.Pp
Please refer to
@ -1540,12 +1587,13 @@ and
for some real examples. The pmdemand label should be appropriate for most
ISPs.
.Sh LOGGING FACILITY
.Nm
.Nm Ppp
is able to generate the following log info either via
.Xr syslog 3
or directly to the screen:
.Bl -column SMMMMMM -offset indent
.It Li Async Dump async level packet in hex
.It Li CBCP Generate CBCP (CallBack Control Protocol) logs
.It Li CCP Generate a CCP packet trace
.It Li Chat Generate Chat script trace log
.It Li Command Log commands executed
@ -2571,6 +2619,83 @@ If
is zero, this timer is disabled. Because both values default to zero,
.Ar demand-dial
links will stay active until the bundle idle timer expires.
.It set callback [none|auth|cbcp|E.164 *|number[,number]...]...
If no arguments are given, callback is disabled, otherwise,
.Nm
will request (or in
.Ar direct
mode, will accept) one of the given protocols. If a request is NAK'd
.Nm
will request another, until no options remain at which point
.Nm
will terminate negotiations.
The options are as follows (in this order of preference):
.Pp
.Bl -tag
.It auth
The callee is expected to decide the callback number based on
authentication. If
.Nm
is the callee, the number should be specified as the fifth field of
the peers entry in
.Pa /etc/ppp/ppp.secret .
.It cbcp
Microsofts callback control protocol is used. See
.Dq set cbcp
below.
.It E.164 *|number[,number]...
The caller specifies the
.Ar number .
If
.Nm
is the callee,
.Ar number
should be either a comma seperated list of allowable numbers or a
.Dq \&* ,
meaning any number is permitted. If
.Nm
is the caller, only a single number should be specified.
.Pp
Note, this option is very unsafe when used with a
.Dq \&*
as a malicious caller can tell
.Nm
to call any (possibly international) number without first authenticating
themselves.
.It none
If the peer does not wish to do callback at all,
.Nm
will accept the fact and continue without callback rather than terminating
the connection.
.El
.Pp
.It set cbcp Op *|number[,number]... Op delay Op retry
If no arguments are given, CBCP (Microsofts CallBack Control Protocol)
is disabled - ie, configuring CBCP in the
.Dq set callback
command will result in
.Nm
requesting no callback in the CBCP phase.
Otherwise,
.Nm
attempts to use the given phone
.Ar number Ns No (s).
.Pp
In server mode
.Pq Fl direct ,
.Nm
will insist that the client uses one of these numbers, unless
.Dq \&*
is used in which case the client is expected to specify the number.
.Pp
In client mode,
.Nm
will attempt to use one of the given numbers (whichever it finds to
be agreeable with the peer), or if
.Dq \&*
is specified,
.Nm
will expect the peer to specify the number.
.It set ctsrts|crtscts on|off
This sets hardware flow control. Hardware flow control is
.Ar on

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.12 1998/05/01 19:25:40 brian Exp $
* $Id: pred.c,v 1.21 1998/05/21 21:47:53 brian Exp $
*/
#include <sys/types.h>
@ -34,6 +34,7 @@
#include <stdlib.h>
#include <string.h>
#include "defs.h"
#include "mbuf.h"
#include "log.h"
#include "timer.h"

View File

@ -23,7 +23,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $Id: prompt.c,v 1.8 1998/06/24 19:33:35 brian Exp $
* $Id: prompt.c,v 1.9 1998/07/04 22:04:12 brian Exp $
*/
#include <sys/param.h>
@ -66,6 +66,7 @@
#include "bundle.h"
#include "chat.h"
#include "chap.h"
#include "cbcp.h"
#include "datalink.h"
#include "server.h"
#include "main.h"

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.20 1998/06/16 19:40:42 brian Exp $
* $Id: vjcomp.c,v 1.21 1998/06/27 23:48:54 brian Exp $
*
* TODO:
*/
@ -28,7 +28,6 @@
#include <sys/un.h>
#include <stdio.h>
#include <string.h>
#include "mbuf.h"
#include "log.h"