o Bump version to 1.3 to reflect major changes

o  Report modem connect time properly
o  Report bytes in/out over physical media
o  Fix phases (TERMINATE is *higher than* DEAD)
o  Do a LayerFinish from LcpDown
o  Bring down IPCP & CCP when we enter PHASE_TERMINATE
o  Give a new prompt when we go to PHASE_DEAD
o  Stop the modem timer properly when idle
o  Treat sig 15 like an exiting carrier loss
o  Log (DEBUG) offline & online transitions
This commit is contained in:
Brian Somers 1997-10-29 01:19:51 +00:00
parent 0e5e974182
commit 0fe7ca3165
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=30825
11 changed files with 97 additions and 93 deletions

View File

@ -17,7 +17,7 @@
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* $Id: async.c,v 1.11 1997/08/25 00:29:05 brian Exp $
* $Id: async.c,v 1.12 1997/10/26 01:02:05 brian Exp $
*
*/
#include <sys/param.h>
@ -129,7 +129,7 @@ AsyncOutput(int pri, struct mbuf *bp, int proto)
cnt = cp - hs->xbuff;
LogDumpBuff(LogASYNC, "WriteModem", hs->xbuff, cnt);
WriteModem(pri, (char *) hs->xbuff, cnt);
OsAddOutOctets(cnt);
ModemAddOutOctets(cnt);
pfree(bp);
}
@ -181,7 +181,7 @@ AsyncInput(u_char *buff, int cnt)
{
struct mbuf *bp;
OsAddInOctets(cnt);
ModemAddInOctets(cnt);
if (DEV_IS_SYNC) {
bp = mballoc(cnt, MB_ASYNC);
memcpy(MBUF_CTOP(bp), buff, cnt);

View File

@ -18,7 +18,7 @@
* Columbus, OH 43221
* (614)451-1883
*
* $Id: chat.c,v 1.34 1997/10/24 22:36:27 brian Exp $
* $Id: chat.c,v 1.35 1997/10/26 01:02:22 brian Exp $
*
* TODO:
* o Support more UUCP compatible control sequences.
@ -638,9 +638,6 @@ DoChat(char *script)
SendString(*argv++);
break;
case ABORT:
#ifdef notdef
HangupModem();
#endif
case NOMATCH:
signal(SIGINT, oint);
return (NOMATCH);

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.31 1997/10/26 01:02:54 brian Exp $
* $Id: ipcp.c,v 1.32 1997/10/26 12:42:11 brian Exp $
*
* TODO:
* o More RFC1772 backwoard compatibility
@ -296,6 +296,7 @@ IpcpLayerDown(struct fsm * fp)
LogPrintf(LogIPCP, "%d octets in, %d octets out\n",
IpcpOctetsIn(), IpcpOctetsOut());
StopTimer(&IpcpReportTimer);
Prompt();
}
/*

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.40 1997/10/26 01:02:57 brian Exp $
* $Id: lcp.c,v 1.41 1997/10/26 12:42:11 brian Exp $
*
* TODO:
* o Validate magic number received from peer.
@ -311,12 +311,10 @@ static void
LcpLayerFinish(struct fsm * fp)
{
LogPrintf(LogLCP, "LcpLayerFinish\n");
OsCloseLink(1);
NewPhase(PHASE_DEAD);
HangupModem(0);
StopAllTimers();
(void) OsInterfaceDown(0);
/* We're down at last. Lets tell background and direct mode to get out */
NewPhase(PHASE_TERMINATE);
NewPhase(PHASE_DEAD);
LcpInit();
IpcpInit();
CcpInit();
@ -363,13 +361,9 @@ void
LcpDown()
{ /* Sudden death */
LcpFailedMagic = 0;
NewPhase(PHASE_DEAD);
StopAllTimers();
FsmDown(&LcpFsm);
/*
* We now wait for the FsmDown() to result in a LcpLayerDown() (if we're
* open).
*/
/* FsmDown() results in a LcpLayerDown() if we're currently open. */
LcpLayerFinish(&LcpFsm);
}
void
@ -383,6 +377,8 @@ LcpOpen(int mode)
void
LcpClose()
{
NewPhase(PHASE_TERMINATE);
OsInterfaceDown(0);
FsmClose(&LcpFsm);
LcpFailedMagic = 0;
}

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.84 1997/10/24 22:36:30 brian Exp $
* $Id: main.c,v 1.85 1997/10/26 01:03:14 brian Exp $
*
* TODO:
* o Add commands for traffic summary, version display, etc.
@ -173,14 +173,13 @@ TtyOldMode()
void
Cleanup(int excode)
{
OsLinkdown();
OsCloseLink(1);
OsInterfaceDown(1);
HangupModem(1);
nointr_sleep(1);
if (mode & MODE_AUTO)
DeleteIfRoutes(1);
(void) unlink(pid_filename);
(void) unlink(if_filename);
OsInterfaceDown(1);
if (mode & MODE_BACKGROUND && BGFiledes[1] != -1) {
char c = EX_ERRDEAD;
@ -800,7 +799,6 @@ DoLoop()
reconnectState = RECON_UNKNOWN;
tries = 0;
} else {
CloseModem();
if (mode & MODE_BACKGROUND) {
if (VarNextPhone == NULL || res == EX_SIG)
Cleanup(EX_DIAL); /* Tried all numbers - no luck */

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.59 1997/10/24 22:36:31 brian Exp $
* $Id: modem.c,v 1.60 1997/10/26 01:03:24 brian Exp $
*
* TODO:
*/
@ -76,6 +76,8 @@ static struct mbuf *modemout;
static struct mqueue OutputQueues[PRI_LINK + 1];
static int dev_is_modem;
static void CloseLogicalModem(void);
void
Enqueue(struct mqueue * queue, struct mbuf * bp)
{
@ -266,22 +268,13 @@ IntToSpeed(int nspeed)
}
static time_t uptime;
u_long OctetsIn, OctetsOut;
void
DownConnection()
{
char ScriptBuffer[200];
LogPrintf(LogPHASE, "Disconnected!\n");
if (uptime)
LogPrintf(LogPHASE, "Connect time: %d secs\n", time(NULL) - uptime);
uptime = 0;
strcpy(ScriptBuffer, VarHangupScript); /* arrays are the same size */
DoChat(ScriptBuffer);
if (!TermMode) {
CloseModem();
LcpDown();
}
LcpDown();
}
/*
@ -309,10 +302,7 @@ ModemTimeout()
change = ombits ^ mbits;
if (change & TIOCM_CD) {
if (Online) {
time(&uptime);
LogPrintf(LogPHASE, "*Connected!\n");
connect_count++;
LogPrintf(LogDEBUG, "ModemTimeout: offline -> online\n");
/*
* In dedicated mode, start packet mode immediate after we detected
* carrier.
@ -320,18 +310,17 @@ ModemTimeout()
if (mode & MODE_DEDICATED)
PacketMode();
} else {
LogPrintf(LogDEBUG, "ModemTimeout: online -> offline\n");
reconnect(RECON_TRUE);
DownConnection();
}
}
else
LogPrintf(LogDEBUG, "ModemTimeout: Still %sline\n",
Online ? "on" : "off");
} else if (!Online) {
/* mbits was set to zero in OpenModem() */
time(&uptime);
LogPrintf(LogPHASE, "Connected!\n");
mbits = TIOCM_CD;
connect_count++;
} else if (uptime == 0) {
time(&uptime);
}
}
@ -426,7 +415,7 @@ OpenConnection(char *host, char *port)
return (-1);
}
}
LogPrintf(LogPHASE, "Connected to %s:%s\n", host, port);
LogPrintf(LogPHASE, "Connecting to %s:%s\n", host, port);
sock = socket(PF_INET, SOCK_STREAM, 0);
if (sock < 0) {
@ -486,6 +475,15 @@ UnlockModem()
LogPrintf(LogALERT, "Warning: Can't uu_unlock %s\n", fn);
}
static void
HaveModem()
{
time(&uptime);
OctetsIn = OctetsOut = 0;
connect_count++;
LogPrintf(LogPHASE, "Connected!\n");
}
static struct termios modemios;
int
@ -499,6 +497,7 @@ OpenModem(int mode)
LogPrintf(LogDEBUG, "OpenModem: Modem is already open!\n");
/* We're going back into "term" mode */
else if (mode & MODE_DIRECT) {
HaveModem();
if (isatty(0)) {
LogPrintf(LogDEBUG, "OpenModem(direct): Modem is a tty\n");
cp = ttyname(0);
@ -511,6 +510,7 @@ OpenModem(int mode)
} else {
LogPrintf(LogDEBUG, "OpenModem(direct): Modem is not a tty\n");
SetVariable(0, 0, 0, VAR_DEVICE);
/* We don't call ModemTimeout() with this type of connection */
return modem = 0;
}
} else {
@ -524,6 +524,7 @@ OpenModem(int mode)
UnlockModem();
return (-1);
}
HaveModem();
LogPrintf(LogDEBUG, "OpenModem: Modem is %s\n", VarDevice);
} else {
/* PPP over TCP */
@ -537,6 +538,7 @@ OpenModem(int mode)
*cp = ':'; /* Don't destroy VarDevice */
if (modem < 0)
return (-1);
HaveModem();
LogPrintf(LogDEBUG, "OpenModem: Modem is socket %s\n", VarDevice);
} else {
*cp = ':'; /* Don't destroy VarDevice */
@ -597,7 +599,8 @@ OpenModem(int mode)
if (ioctl(modem, TIOCMGET, &mbits)) {
LogPrintf(LogERROR, "OpenModem: Cannot get modem status: %s\n",
strerror(errno));
CloseModem();
uptime = 0;
CloseLogicalModem();
return (-1);
}
LogPrintf(LogDEBUG, "OpenModem: modem control = %o\n", mbits);
@ -606,7 +609,8 @@ OpenModem(int mode)
if (oldflag < 0) {
LogPrintf(LogERROR, "OpenModem: Cannot get modem flags: %s\n",
strerror(errno));
CloseModem();
uptime = 0;
CloseLogicalModem();
return (-1);
}
(void) fcntl(modem, F_SETFL, oldflag & ~O_NONBLOCK);
@ -670,15 +674,50 @@ UnrawModem(int modem)
}
}
void ModemAddInOctets(int n)
{
OctetsIn += n;
}
void ModemAddOutOctets(int n)
{
OctetsOut += n;
}
static void
ClosePhysicalModem()
{
close(modem);
if (uptime) {
LogPrintf(LogPHASE, "Connect time: %d secs\n", time(NULL) - uptime);
LogPrintf(LogPHASE, "Modem: %d octets in, %d octets out\n",
OctetsIn, OctetsOut);
OctetsIn = OctetsOut = 0;
uptime = 0;
}
modem = -1; /* Mark modem as closed */
}
void
HangupModem(int flag)
{
struct termios tio;
LogPrintf(LogDEBUG, "Hangup modem (%s), uptime %ld\n",
modem >= 0 ? "open" : "closed", (long)uptime);
StopTimer(&ModemTimer);
if (modem < 0)
return;
if (TermMode) {
LogPrintf(LogDEBUG, "HangupModem: Not in 'term' mode\n");
return;
}
if (!isatty(modem)) {
mbits &= ~TIOCM_DTR;
close(modem);
modem = -1; /* Mark as modem has closed */
ClosePhysicalModem();
return;
}
@ -697,13 +736,6 @@ HangupModem(int flag)
* directed to quit program.
*/
if (modem >= 0 && (flag || !(mode & MODE_DEDICATED))) {
ModemTimeout(); /* XXX */
StopTimer(&ModemTimer); /* XXX */
/*
* ModemTimeout() may call DownConection() to close the modem resulting
* in modem == -1.
*/
if (modem >= 0) {
char ScriptBuffer[200];
@ -711,7 +743,7 @@ HangupModem(int flag)
DoChat(ScriptBuffer);
tcflush(modem, TCIOFLUSH);
UnrawModem(modem);
CloseModem();
CloseLogicalModem();
}
} else if (modem >= 0) {
char ScriptBuffer[200];
@ -729,11 +761,11 @@ HangupModem(int flag)
}
}
void
CloseModem()
static void
CloseLogicalModem()
{
if (modem >= 0) {
close(modem);
ClosePhysicalModem();
if (Utmp) {
struct utmp ut;
strncpy(ut.ut_line, VarBaseDevice, sizeof(ut.ut_line)-1);
@ -741,12 +773,11 @@ CloseModem()
if (logout(ut.ut_line))
logwtmp(ut.ut_line, "", "");
else
LogPrintf(LogERROR, "CloseModem: No longer logged in on %s\n",
LogPrintf(LogERROR, "CloseLogicalModem: No longer logged in on %s\n",
ut.ut_line);
Utmp = 0;
}
UnlockModem();
modem = -1;
}
}

View File

@ -15,7 +15,7 @@
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* $Id: modem.h,v 1.10 1997/10/26 01:03:25 brian Exp $
* $Id: modem.h,v 1.11 1997/10/26 12:42:13 brian Exp $
*
* TODO:
*/
@ -26,7 +26,6 @@ extern void DownModem(int);
extern void WriteModem(int, char *, int);
extern void ModemStartOutput(int);
extern int OpenModem(int);
extern void CloseModem(void);
extern int ModemSpeed(void);
extern int ModemQlen(void);
extern int DialModem(void);
@ -39,3 +38,5 @@ extern void HangupModem(int);
extern int ShowModemStatus(void);
extern void Enqueue(struct mqueue *, struct mbuf *);
extern struct mbuf *Dequeue(struct mqueue *);
extern void ModemAddInOctets(int);
extern void ModemAddOutOctets(int);

View File

@ -17,7 +17,7 @@
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* $Id: os.c,v 1.27 1997/09/03 02:08:20 brian Exp $
* $Id: os.c,v 1.28 1997/10/26 01:03:26 brian Exp $
*
*/
#include <sys/param.h>
@ -240,13 +240,12 @@ OsLinkdown()
int Level;
if (linkup) {
FsmDown(&CcpFsm); /* CCP must come down */
s = (char *) inet_ntoa(peer_addr);
Level = LogIsKept(LogLINK) ? LogLINK : LogIPCP;
LogPrintf(Level, "OsLinkdown: %s\n", s);
FsmDown(&IpcpFsm); /* IPCP must come down */
FsmDown(&CcpFsm); /* CCP must come down */
if (!(mode & MODE_AUTO))
DeleteIfRoutes(0);
@ -393,19 +392,3 @@ OpenTunnel(int *ptun)
close(s);
return (0);
}
void
OsCloseLink(int flag)
{
HangupModem(flag);
}
void
OsAddInOctets(int cnt)
{
}
void
OsAddOutOctets(int cnt)
{
}

View File

@ -15,7 +15,7 @@
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* $Id: os.h,v 1.8 1997/09/03 00:40:50 brian Exp $
* $Id: os.h,v 1.9 1997/10/26 01:03:27 brian Exp $
*
* TODO:
*/
@ -26,11 +26,8 @@ int OsSetIpaddress(struct in_addr, struct in_addr, struct in_addr);
int OsInterfaceDown(int);
void OsSetInterfaceParams(int, int, int);
int OpenTunnel(int *);
void OsCloseLink(int);
void OsLinkup(void);
int OsLinkIsUp(void);
void OsLinkdown(void);
void OsSetRoute(int, struct in_addr, struct in_addr, struct in_addr);
void DeleteIfRoutes(int);
void OsAddInOctets(int);
void OsAddOutOctets(int);

View File

@ -1,5 +1,5 @@
/*
* $Id: $
* $Id: phase.c,v 1.1 1997/10/26 01:03:31 brian Exp $
*/
#include <sys/param.h>
@ -56,7 +56,7 @@ NewPhase(int new)
CcpUp();
CcpOpen();
break;
case PHASE_TERMINATE:
case PHASE_DEAD:
if (mode & MODE_DIRECT)
Cleanup(EX_DEAD);
if (mode & MODE_BACKGROUND && reconnectState != RECON_TRUE)

View File

@ -17,7 +17,7 @@
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* $Id: vars.c,v 1.30 1997/09/22 23:59:16 brian Exp $
* $Id: vars.c,v 1.31 1997/10/26 01:03:58 brian Exp $
*
*/
#include <sys/param.h>
@ -39,8 +39,8 @@
#include "auth.h"
#include "defs.h"
char VarVersion[] = "PPP Version 1.2";
char VarLocalVersion[] = "$Date: 1997/09/22 23:59:16 $";
char VarVersion[] = "PPP Version 1.3";
char VarLocalVersion[] = "$Date: 1997/10/26 01:03:58 $";
int Utmp = 0;
int ipInOctets = 0;
int ipOutOctets = 0;