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:
parent
da1fbd5e25
commit
f9ee8808e7
@ -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 \
|
||||
|
@ -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 */
|
||||
}
|
||||
|
@ -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 *);
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
|
@ -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"
|
||||
|
@ -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);
|
||||
|
@ -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,
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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 *);
|
||||
|
@ -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"
|
||||
|
@ -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"
|
||||
|
@ -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++;
|
||||
|
@ -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>
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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"
|
||||
|
@ -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",
|
||||
|
@ -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;
|
||||
|
@ -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 {
|
||||
|
@ -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
|
||||
|
@ -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 *
|
||||
|
@ -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;
|
||||
|
@ -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"
|
||||
|
||||
|
||||
|
@ -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"
|
||||
|
@ -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" };
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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"
|
||||
|
@ -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"
|
||||
|
@ -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"
|
||||
|
Loading…
Reference in New Issue
Block a user