New user Process PPP based on iij-ppp0.94beta2.
o Supporting SYNC SIO device (But need a device driver) - add "set speed sync" o Fixing bug for Predictor-1 function. o Add new parameter that re-sent interval for set timeout commands. o Improving RTT (Round Trip Time) and reducing processor time. - Previous Timer service was using polling, and now using SIGALRM ;-) - A 0.94beta2 will not work correctly.... -- Follows are additinal feature not including 0.94beta2 o Support Proxy ARP - add "enable/disable proxy" commands o Marging common routine in CHAP/PAP. o Enhancing LCP/IPCP log information. o Support local Authfication connection on port 300x and tty. - You can set up pair of your "hostname -s" and password in ppp.secret. if either ppp.secret file nor your hostname line don't exist, It will notify a message and working as same as previous version.(Backword compatibility) - If you did set up them, It's allow connection but nothing to do except help and passwd command. - add "passwd yourpasswd" commands o Support afilter - keep Alive filter that a packet can send/receiving according to ifilter/ofilter but doesn't count it as preventing idle timer expires. - Same syntax of other filters. o Fixing bugs reported by current user for previous one. Thanks !! Reviewed by: Atsushi Murai (amurai@spec.co.jp)
This commit is contained in:
parent
54897980a3
commit
7f3209e0ba
@ -1,10 +1,19 @@
|
||||
#
|
||||
# $Id:$
|
||||
# $Id: ppp.conf.filter.sample,v 1.1.1.1 1995/01/31 06:24:33 amurai Exp $
|
||||
#
|
||||
# An example of packet filter definition.
|
||||
#
|
||||
#
|
||||
filterd:
|
||||
#
|
||||
# Don't keep Alive with ICMP,DNS and RIP packet
|
||||
#
|
||||
set afilter 0 deny icmp
|
||||
set afilter 1 deny udp src eq 53
|
||||
set afilter 2 deny udp dst eq 53
|
||||
set afilter 3 deny udp src eq 520
|
||||
set afilter 4 deny udp dst eq 520
|
||||
set afilter 5 permit 0/0 0/0
|
||||
#
|
||||
# Don't dial with ICMP packet
|
||||
#
|
||||
|
@ -4,7 +4,7 @@
|
||||
#
|
||||
# Written by Toshiharu OHNO
|
||||
#
|
||||
# $Id:$
|
||||
# $Id: ppp.conf.sample,v 1.1.1.1 1995/01/31 06:24:33 amurai Exp $
|
||||
#
|
||||
#################################################################
|
||||
#
|
||||
@ -99,6 +99,7 @@ pmdemend:
|
||||
users:
|
||||
disable pap
|
||||
enable chap
|
||||
enable proxy
|
||||
set authname ppp-server
|
||||
set ifaddr 192.244.176.44 292.244.184.31
|
||||
#
|
||||
|
@ -1,8 +1,9 @@
|
||||
##################################################
|
||||
# Sysname Secret Key Peer's IP address
|
||||
#
|
||||
# $Id:$
|
||||
# $Id: ppp.secret.sample,v 1.1.1.1 1995/01/31 06:24:33 amurai Exp $
|
||||
#
|
||||
##################################################
|
||||
oscar OurSecretKey 192.244.184.34/24
|
||||
BigBird X4dWg9327 192.244.184.33/32
|
||||
tama localPasswdForControl
|
||||
|
190
sys/net/if_tun.c
190
sys/net/if_tun.c
@ -1,3 +1,5 @@
|
||||
/* $NetBSD: if_tun.c,v 1.14 1994/06/29 06:36:25 cgd Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1988, Julian Onions <jpo@cs.nott.ac.uk>
|
||||
* Nottingham University 1987.
|
||||
@ -10,25 +12,26 @@
|
||||
* roots in a similar driver written by Phil Cockcroft (formerly) at
|
||||
* UCL. This driver is based much more on read/write/select mode of
|
||||
* operation though.
|
||||
*
|
||||
* $Id: if_tun.c,v 1.9 1993/12/24 03:20:59 deraadt Exp $
|
||||
*/
|
||||
|
||||
#include "tun.h"
|
||||
#if NTUN > 0
|
||||
|
||||
#include "param.h"
|
||||
#include "kernel.h" /* sigh */
|
||||
#include "proc.h"
|
||||
#include "systm.h"
|
||||
#include "mbuf.h"
|
||||
#include "buf.h"
|
||||
#include "protosw.h"
|
||||
#include "socket.h"
|
||||
#include "ioctl.h"
|
||||
#include "errno.h"
|
||||
#include "syslog.h"
|
||||
#include <sys/param.h>
|
||||
#include <sys/proc.h>
|
||||
#include <sys/systm.h>
|
||||
#include <sys/mbuf.h>
|
||||
#include <sys/buf.h>
|
||||
#include <sys/protosw.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/errno.h>
|
||||
#include <sys/syslog.h>
|
||||
#include <sys/select.h>
|
||||
#include <sys/file.h>
|
||||
#ifdef __FreeBSD__
|
||||
#include <sys/kernel.h>
|
||||
#endif
|
||||
|
||||
#include <machine/cpu.h>
|
||||
|
||||
@ -57,11 +60,6 @@
|
||||
|
||||
#include <net/if_tun.h>
|
||||
|
||||
|
||||
#ifndef MIN
|
||||
#define MIN(a,b) (((a)<(b))?(a):(b))
|
||||
#endif
|
||||
|
||||
#define TUNDEBUG if (tundebug) printf
|
||||
int tundebug = 0;
|
||||
|
||||
@ -69,15 +67,21 @@ struct tun_softc tunctl[NTUN];
|
||||
extern int ifqmaxlen;
|
||||
|
||||
int tunopen __P((dev_t, int, int, struct proc *));
|
||||
int tunoutput __P((struct ifnet *, struct mbuf *, struct sockaddr *, struct rtentry *rt));
|
||||
int tunselect __P((dev_t, int, struct proc *));
|
||||
int tunclose __P((dev_t, int));
|
||||
int tunoutput __P((struct ifnet *, struct mbuf *, struct sockaddr *,
|
||||
struct rtentry *rt));
|
||||
int tunread __P((dev_t, struct uio *));
|
||||
int tunwrite __P((dev_t, struct uio *));
|
||||
int tunioctl __P((dev_t, int, caddr_t, int, struct proc *));
|
||||
int tunifioctl __P((struct ifnet *, int, caddr_t));
|
||||
int tunioctl __P((dev_t, int, caddr_t, int));
|
||||
int tunselect __P((dev_t, int));
|
||||
void tunattach __P((int));
|
||||
|
||||
static int tuninit __P((int));
|
||||
|
||||
void
|
||||
tunattach(void)
|
||||
tunattach(unused)
|
||||
int unused;
|
||||
{
|
||||
register int i;
|
||||
struct ifnet *ifp;
|
||||
@ -106,7 +110,9 @@ tunattach(void)
|
||||
}
|
||||
}
|
||||
|
||||
TEXT_SET(pseudo_set, tunattach);
|
||||
#ifdef __FreeBSD__
|
||||
PSEUDO_SET(tunattach);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* tunnel open - must be superuser & the device must be
|
||||
@ -122,7 +128,6 @@ tunopen(dev, flag, mode, p)
|
||||
struct tun_softc *tp;
|
||||
register int unit, error;
|
||||
|
||||
|
||||
if (error = suser(p->p_ucred, &p->p_acflag))
|
||||
return (error);
|
||||
|
||||
@ -133,7 +138,6 @@ tunopen(dev, flag, mode, p)
|
||||
return ENXIO;
|
||||
ifp = &tp->tun_if;
|
||||
tp->tun_flags |= TUN_OPEN;
|
||||
|
||||
TUNDEBUG("%s%d: open\n", ifp->if_name, ifp->if_unit);
|
||||
return (0);
|
||||
}
|
||||
@ -151,9 +155,7 @@ tunclose(dev, flag)
|
||||
struct tun_softc *tp = &tunctl[unit];
|
||||
struct ifnet *ifp = &tp->tun_if;
|
||||
struct mbuf *m;
|
||||
int rcoll;
|
||||
|
||||
rcoll = tp->tun_flags & TUN_RCOLL;
|
||||
tp->tun_flags &= ~TUN_OPEN;
|
||||
|
||||
/*
|
||||
@ -170,24 +172,21 @@ tunclose(dev, flag)
|
||||
if (ifp->if_flags & IFF_UP) {
|
||||
s = splimp();
|
||||
if_down(ifp);
|
||||
#ifdef notdef
|
||||
if (ifp->if_flags & IFF_RUNNING) {
|
||||
rtinit(ifp->if_addrlist, (int)RTM_DELETE,
|
||||
tp->tun_flags & TUN_DSTADDR ? RTF_HOST : 0);
|
||||
/* find internet addresses and delete routes */
|
||||
register struct ifaddr *ifa;
|
||||
for (ifa = ifp->if_addrlist; ifa; ifa = ifa->ifa_next) {
|
||||
if (ifa->ifa_addr->sa_family == AF_INET) {
|
||||
rtinit(ifa, (int)RTM_DELETE,
|
||||
tp->tun_flags & TUN_DSTADDR ? RTF_HOST : 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
splx(s);
|
||||
}
|
||||
tp->tun_pgrp = 0;
|
||||
#if BSD >= 199103
|
||||
selwakeup(&tp->tun_sel);
|
||||
/* XXX */
|
||||
tp->tun_sel.si_pid = 0;
|
||||
#else
|
||||
if (tp->tun_rsel)
|
||||
selwakeup(tp->tun_rsel->p_pid, rcoll);
|
||||
tp -> tun_rsel = tp -> tun_wsel = (struct proc *)0;
|
||||
#endif
|
||||
selwakeup(&tp->tun_rsel);
|
||||
|
||||
TUNDEBUG ("%s%d: closed\n", ifp->if_name, ifp->if_unit);
|
||||
return (0);
|
||||
}
|
||||
@ -204,17 +203,18 @@ tuninit(unit)
|
||||
|
||||
ifp->if_flags |= IFF_UP | IFF_RUNNING;
|
||||
|
||||
for (ifa = ifp->if_addrlist; ifa; ifa = ifa->ifa_next) {
|
||||
struct sockaddr_in *si;
|
||||
for (ifa = ifp->if_addrlist; ifa; ifa = ifa->ifa_next)
|
||||
if (ifa->ifa_addr->sa_family == AF_INET) {
|
||||
struct sockaddr_in *si;
|
||||
|
||||
si = (struct sockaddr_in *)ifa->ifa_addr;
|
||||
if (si && si->sin_addr.s_addr)
|
||||
tp->tun_flags |= TUN_IASET;
|
||||
si = (struct sockaddr_in *)ifa->ifa_addr;
|
||||
if (si && si->sin_addr.s_addr)
|
||||
tp->tun_flags |= TUN_IASET;
|
||||
|
||||
si = (struct sockaddr_in *)ifa->ifa_dstaddr;
|
||||
if (si && si->sin_addr.s_addr)
|
||||
tp->tun_flags |= TUN_DSTADDR;
|
||||
}
|
||||
si = (struct sockaddr_in *)ifa->ifa_dstaddr;
|
||||
if (si && si->sin_addr.s_addr)
|
||||
tp->tun_flags |= TUN_DSTADDR;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -235,11 +235,13 @@ tunifioctl(ifp, cmd, data)
|
||||
switch(cmd) {
|
||||
case SIOCSIFADDR:
|
||||
tuninit(ifp->if_unit);
|
||||
TUNDEBUG("%s%d: address set\n",
|
||||
ifp->if_name, ifp->if_unit);
|
||||
break;
|
||||
case SIOCSIFDSTADDR:
|
||||
tp->tun_flags |= TUN_DSTADDR;
|
||||
TUNDEBUG("%s%d: destination address set\n", ifp->if_name,
|
||||
ifp->if_unit);
|
||||
tuninit(ifp->if_unit);
|
||||
TUNDEBUG("%s%d: destination address set\n",
|
||||
ifp->if_name, ifp->if_unit);
|
||||
break;
|
||||
default:
|
||||
error = EINVAL;
|
||||
@ -322,17 +324,7 @@ tunoutput(ifp, m0, dst, rt)
|
||||
else if (p = pfind(-tp->tun_pgrp))
|
||||
psignal(p, SIGIO);
|
||||
}
|
||||
#if BSD >= 199103
|
||||
selwakeup(&tp->tun_sel);
|
||||
/* XXX */
|
||||
tp->tun_sel.si_pid = 0;
|
||||
#else
|
||||
if (tp->tun_rsel) {
|
||||
selwakeup(tp->tun_rsel->p_pid, tp->tun_flags & TUN_RCOLL);
|
||||
tp->tun_flags &= ~TUN_RCOLL;
|
||||
tp->tun_rsel = (struct proc *)0;
|
||||
}
|
||||
#endif
|
||||
selwakeup(&tp->tun_rsel);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -340,29 +332,30 @@ tunoutput(ifp, m0, dst, rt)
|
||||
* the cdevsw interface is now pretty minimal.
|
||||
*/
|
||||
int
|
||||
tunioctl(dev, cmd, data, flag)
|
||||
tunioctl(dev, cmd, data, flag, p)
|
||||
dev_t dev;
|
||||
int cmd;
|
||||
caddr_t data;
|
||||
int flag;
|
||||
struct proc *p;
|
||||
{
|
||||
int unit = minor(dev), s;
|
||||
struct tun_softc *tp = &tunctl[unit];
|
||||
struct tuninfo *tunp;
|
||||
struct tuninfo *tunp;
|
||||
|
||||
switch (cmd) {
|
||||
case TUNSIFINFO:
|
||||
tunp = (struct tuninfo *)data;
|
||||
tp->tun_if.if_mtu = tunp->tif_mtu;
|
||||
tp->tun_if.if_type = tunp->tif_type;
|
||||
tp->tun_if.if_baudrate = tunp->tif_baudrate;
|
||||
break;
|
||||
case TUNGIFINFO:
|
||||
tunp = (struct tuninfo *)data;
|
||||
tunp->tif_mtu = tp->tun_if.if_mtu;
|
||||
tunp->tif_type = tp->tun_if.if_type;
|
||||
tunp->tif_baudrate = tp->tun_if.if_baudrate;
|
||||
break;
|
||||
case TUNSIFINFO:
|
||||
tunp = (struct tuninfo *)data;
|
||||
tp->tun_if.if_mtu = tunp->mtu;
|
||||
tp->tun_if.if_type = tunp->type;
|
||||
tp->tun_if.if_baudrate = tunp->baudrate;
|
||||
break;
|
||||
case TUNGIFINFO:
|
||||
tunp = (struct tuninfo *)data;
|
||||
tunp->mtu = tp->tun_if.if_mtu;
|
||||
tunp->type = tp->tun_if.if_type;
|
||||
tunp->baudrate = tp->tun_if.if_baudrate;
|
||||
break;
|
||||
case TUNSDEBUG:
|
||||
tundebug = *(int *)data;
|
||||
break;
|
||||
@ -440,7 +433,7 @@ tunread(dev, uio)
|
||||
splx(s);
|
||||
|
||||
while (m0 && uio->uio_resid > 0 && error == 0) {
|
||||
len = MIN(uio->uio_resid, m0->m_len);
|
||||
len = min(uio->uio_resid, m0->m_len);
|
||||
if (len == 0)
|
||||
break;
|
||||
error = uiomove(mtod(m0, caddr_t), len, uio);
|
||||
@ -486,7 +479,7 @@ tunwrite(dev, uio)
|
||||
top = 0;
|
||||
mp = ⊤
|
||||
while (error == 0 && uio->uio_resid > 0) {
|
||||
m->m_len = MIN (mlen, uio->uio_resid);
|
||||
m->m_len = min(mlen, uio->uio_resid);
|
||||
error = uiomove(mtod (m, caddr_t), m->m_len, uio);
|
||||
*mp = m;
|
||||
mp = &m->m_next;
|
||||
@ -543,32 +536,15 @@ tunwrite(dev, uio)
|
||||
return error;
|
||||
}
|
||||
|
||||
/*
|
||||
* The new select interface passes down the proc pointer; the old select
|
||||
* stubs had to grab it out of the user struct. This glue allows either case.
|
||||
*/
|
||||
#if BSD >= 199103
|
||||
#define tun_select tunselect
|
||||
#else
|
||||
int
|
||||
tunselect(dev, rw)
|
||||
register dev_t dev;
|
||||
int rw;
|
||||
{
|
||||
return (tun_select(dev, rw, u.u_procp));
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* tunselect - the select interface, this is only useful on reads
|
||||
* really. The write detect always returns true, write never blocks
|
||||
* anyway, it either accepts the packet or drops it.
|
||||
*/
|
||||
int
|
||||
tun_select(dev, rw, p)
|
||||
tunselect(dev, rw)
|
||||
dev_t dev;
|
||||
int rw;
|
||||
struct proc *p;
|
||||
{
|
||||
int unit = minor(dev), s;
|
||||
struct tun_softc *tp = &tunctl[unit];
|
||||
@ -576,19 +552,7 @@ tun_select(dev, rw, p)
|
||||
|
||||
s = splimp();
|
||||
TUNDEBUG("%s%d: tunselect\n", ifp->if_name, ifp->if_unit);
|
||||
#if BSD >= 199103
|
||||
if (rw != FREAD) {
|
||||
splx(s);
|
||||
return 1;
|
||||
}
|
||||
if (ifp->if_snd.ifq_len > 0) {
|
||||
splx(s);
|
||||
TUNDEBUG("%s%d: tunselect q=%d\n", ifp->if_name,
|
||||
ifp->if_unit, ifp->if_snd.ifq_len);
|
||||
return 1;
|
||||
}
|
||||
selrecord(p, &tp->tun_sel);
|
||||
#else
|
||||
|
||||
switch (rw) {
|
||||
case FREAD:
|
||||
if (ifp->if_snd.ifq_len > 0) {
|
||||
@ -597,16 +561,12 @@ tun_select(dev, rw, p)
|
||||
ifp->if_unit, ifp->if_snd.ifq_len);
|
||||
return 1;
|
||||
}
|
||||
if (tp->tun_rsel && tp->tun_rsel == p)
|
||||
tp->tun_flags |= TUN_RCOLL;
|
||||
else
|
||||
tp->tun_rsel = p;
|
||||
selrecord(curproc, &tp->tun_rsel);
|
||||
break;
|
||||
case FWRITE:
|
||||
splx(s);
|
||||
return 1;
|
||||
}
|
||||
#endif
|
||||
splx(s);
|
||||
TUNDEBUG("%s%d: tunselect waiting\n", ifp->if_name, ifp->if_unit);
|
||||
return 0;
|
||||
|
@ -1,3 +1,5 @@
|
||||
/* $NetBSD: if_tun.h,v 1.5 1994/06/29 06:36:27 cgd Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1988, Julian Onions <jpo@cs.nott.ac.uk>
|
||||
* Nottingham University 1987.
|
||||
@ -11,8 +13,7 @@
|
||||
* UCL. This driver is based much more on read/write/select mode of
|
||||
* operation though.
|
||||
*
|
||||
* from: $Header: if_tnreg.h,v 1.1.2.1 1992/07/16 22:39:16 friedl Exp
|
||||
* $Id: if_tun.h,v 1.3 1993/12/13 14:27:01 deraadt Exp $
|
||||
* : $Header: if_tnreg.h,v 1.1.2.1 1992/07/16 22:39:16 friedl Exp
|
||||
*/
|
||||
|
||||
#ifndef _NET_IF_TUN_H_
|
||||
@ -25,23 +26,16 @@ struct tun_softc {
|
||||
#define TUN_RCOLL 0x0004
|
||||
#define TUN_IASET 0x0008
|
||||
#define TUN_DSTADDR 0x0010
|
||||
#ifdef notdef
|
||||
#define TUN_READY 0x0020
|
||||
#else
|
||||
#define TUN_READY (TUN_IASET|TUN_OPEN|TUN_DSTADDR)
|
||||
#endif
|
||||
#define TUN_RWAIT 0x0040
|
||||
#define TUN_ASYNC 0x0080
|
||||
#define TUN_NBIO 0x0100
|
||||
|
||||
#define TUN_READY (TUN_OPEN | TUN_INITED | TUN_IASET)
|
||||
|
||||
struct ifnet tun_if; /* the interface */
|
||||
int tun_pgrp; /* the process group - if any */
|
||||
#if BSD < 199103
|
||||
struct proc *tun_rsel;
|
||||
struct proc *tun_wsel;
|
||||
#else
|
||||
u_char tun_pad; /* explicit alignment */
|
||||
struct selinfo tun_sel; /* bsd select info */
|
||||
#endif
|
||||
struct selinfo tun_rsel; /* read select */
|
||||
struct selinfo tun_wsel; /* write select (not used) */
|
||||
#if NBPFILTER > 0
|
||||
caddr_t tun_bpf;
|
||||
#endif
|
||||
@ -50,23 +44,17 @@ struct tun_softc {
|
||||
/* Maximum packet size */
|
||||
#define TUNMTU 1500
|
||||
|
||||
struct tuninfo {
|
||||
int baudrate; /* linespeed */
|
||||
short mtu; /* maximum transmission unit */
|
||||
u_char type; /* ethernet, tokenring, etc. */
|
||||
u_char dummy; /* place holder */
|
||||
};
|
||||
|
||||
/* ioctl's for get/set debug */
|
||||
#ifdef __NetBSD__
|
||||
#define TUNSDEBUG _IOW('t', 90, int)
|
||||
#define TUNGDEBUG _IOR('t', 89, int)
|
||||
#define TUNSIFINFO _IOW('t', 91, struct tuninfo)
|
||||
#define TUNGIFINFO _IOR('t', 92, struct tuninfo)
|
||||
#else /* Assume BSDI */
|
||||
#define TUNSDEBUG _IOW('T', 90, int)
|
||||
#define TUNGDEBUG _IOR('T', 89, int)
|
||||
#define TUNSIFINFO _IOW('T', 91, struct tuninfo)
|
||||
#define TUNGIFINFO _IOR('T', 92, struct tuninfo)
|
||||
#endif
|
||||
|
||||
struct tuninfo {
|
||||
int tif_baudrate; /* linespeed */
|
||||
short tif_mtu; /* maximum transmission unit */
|
||||
u_char tif_type; /* ethernet, tokenring, etc. */
|
||||
u_char tif_dummy; /* place holder */
|
||||
};
|
||||
#endif /* !_NET_IF_TUN_H_ */
|
||||
|
@ -1,10 +1,10 @@
|
||||
# $Id:$
|
||||
# $Id: Makefile,v 1.1.1.1 1995/01/31 06:29:55 amurai Exp $
|
||||
|
||||
PROG= ppp
|
||||
SRCS= async.c auth.c ccp.c chap.c chat.c command.c filter.c fsm.c hdlc.c \
|
||||
ip.c ipcp.c lcp.c lqr.c log.c main.c mbuf.c md5c.c modem.c os.c \
|
||||
pap.c pred.c route.c slcompress.c timer.c systems.c uucplock.c vars.c \
|
||||
vjcomp.c
|
||||
vjcomp.c arp.c
|
||||
MAN8= ppp.8
|
||||
BINMODE=4555
|
||||
BINOWN= root
|
||||
|
423
usr.sbin/ppp/arp.c
Normal file
423
usr.sbin/ppp/arp.c
Normal file
@ -0,0 +1,423 @@
|
||||
/*
|
||||
* sys-bsd.c - System-dependent procedures for setting up
|
||||
* PPP interfaces on bsd-4.4-ish systems (including 386BSD, NetBSD, etc.)
|
||||
*
|
||||
* Copyright (c) 1989 Carnegie Mellon University.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms are permitted
|
||||
* provided that the above copyright notice and this paragraph are
|
||||
* duplicated in all such forms and that any documentation,
|
||||
* advertising materials, and other materials related to such
|
||||
* distribution and use acknowledge that the software was developed
|
||||
* by Carnegie Mellon University. The name of the
|
||||
* University may not be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* $Id:$
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
* TODO:
|
||||
*/
|
||||
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/errno.h>
|
||||
|
||||
#include <net/if.h>
|
||||
#include <net/route.h>
|
||||
#include <net/if_dl.h>
|
||||
#include <netinet/in.h>
|
||||
#include <stdio.h>
|
||||
#include <fcntl.h>
|
||||
#ifdef __bsdi__
|
||||
#include <kvm.h>
|
||||
#endif
|
||||
#include <net/if_types.h>
|
||||
#include <netinet/in_var.h>
|
||||
#include <netinet/if_ether.h>
|
||||
#include "log.h"
|
||||
|
||||
#if RTM_VERSION >= 3
|
||||
#include <netinet/if_ether.h>
|
||||
#endif
|
||||
|
||||
static int rtm_seq;
|
||||
|
||||
#define BCOPY(s, d, l) memcpy(d, s, l)
|
||||
#define BZERO(s, n) memset(s, 0, n)
|
||||
/*
|
||||
* SET_SA_FAMILY - set the sa_family field of a struct sockaddr,
|
||||
* if it exists.
|
||||
*/
|
||||
#define SET_SA_FAMILY(addr, family) \
|
||||
BZERO((char *) &(addr), sizeof(addr)); \
|
||||
addr.sa_family = (family); \
|
||||
addr.sa_len = sizeof(addr);
|
||||
|
||||
|
||||
#if RTM_VERSION >= 3
|
||||
|
||||
/*
|
||||
* sifproxyarp - Make a proxy ARP entry for the peer.
|
||||
*/
|
||||
static struct {
|
||||
struct rt_msghdr hdr;
|
||||
struct sockaddr_inarp dst;
|
||||
struct sockaddr_dl hwa;
|
||||
char extra[128];
|
||||
} arpmsg;
|
||||
|
||||
static int arpmsg_valid;
|
||||
|
||||
int
|
||||
sifproxyarp(unit, hisaddr)
|
||||
int unit;
|
||||
u_long hisaddr;
|
||||
{
|
||||
int routes;
|
||||
int l;
|
||||
|
||||
/*
|
||||
* Get the hardware address of an interface on the same subnet
|
||||
* as our local address.
|
||||
*/
|
||||
memset(&arpmsg, 0, sizeof(arpmsg));
|
||||
if (!get_ether_addr(unit, hisaddr, &arpmsg.hwa)) {
|
||||
logprintf("Cannot determine ethernet address for proxy ARP\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
if ((routes = socket(PF_ROUTE, SOCK_RAW, AF_INET)) < 0) {
|
||||
logprintf("sifproxyarp: opening routing socket: \n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
arpmsg.hdr.rtm_type = RTM_ADD;
|
||||
arpmsg.hdr.rtm_flags = RTF_ANNOUNCE | RTF_HOST | RTF_STATIC;
|
||||
arpmsg.hdr.rtm_version = RTM_VERSION;
|
||||
arpmsg.hdr.rtm_seq = ++rtm_seq;
|
||||
arpmsg.hdr.rtm_addrs = RTA_DST | RTA_GATEWAY;
|
||||
arpmsg.hdr.rtm_inits = RTV_EXPIRE;
|
||||
arpmsg.dst.sin_len = sizeof(struct sockaddr_inarp);
|
||||
arpmsg.dst.sin_family = AF_INET;
|
||||
arpmsg.dst.sin_addr.s_addr = hisaddr;
|
||||
arpmsg.dst.sin_other = SIN_PROXY;
|
||||
|
||||
arpmsg.hdr.rtm_msglen = (char *) &arpmsg.hwa - (char *) &arpmsg
|
||||
+ arpmsg.hwa.sdl_len;
|
||||
if (write(routes, &arpmsg, arpmsg.hdr.rtm_msglen) < 0) {
|
||||
logprintf("add proxy arp entry: \n");
|
||||
close(routes);
|
||||
return 0;
|
||||
}
|
||||
|
||||
close(routes);
|
||||
arpmsg_valid = 1;
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* cifproxyarp - Delete the proxy ARP entry for the peer.
|
||||
*/
|
||||
int
|
||||
cifproxyarp(unit, hisaddr)
|
||||
int unit;
|
||||
u_long hisaddr;
|
||||
{
|
||||
int routes;
|
||||
|
||||
if (!arpmsg_valid)
|
||||
return 0;
|
||||
arpmsg_valid = 0;
|
||||
|
||||
arpmsg.hdr.rtm_type = RTM_DELETE;
|
||||
arpmsg.hdr.rtm_seq = ++rtm_seq;
|
||||
|
||||
if ((routes = socket(PF_ROUTE, SOCK_RAW, AF_INET)) < 0) {
|
||||
logprintf("sifproxyarp: opening routing socket: \n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (write(routes, &arpmsg, arpmsg.hdr.rtm_msglen) < 0) {
|
||||
logprintf("delete proxy arp entry: \n");
|
||||
close(routes);
|
||||
return 0;
|
||||
}
|
||||
|
||||
close(routes);
|
||||
return 1;
|
||||
}
|
||||
|
||||
#else /* RTM_VERSION */
|
||||
|
||||
/*
|
||||
* sifproxyarp - Make a proxy ARP entry for the peer.
|
||||
*/
|
||||
int
|
||||
sifproxyarp(unit, hisaddr)
|
||||
int unit;
|
||||
u_long hisaddr;
|
||||
{
|
||||
struct arpreq arpreq;
|
||||
struct {
|
||||
struct sockaddr_dl sdl;
|
||||
char space[128];
|
||||
} dls;
|
||||
|
||||
BZERO(&arpreq, sizeof(arpreq));
|
||||
|
||||
/*
|
||||
* Get the hardware address of an interface on the same subnet
|
||||
* as our local address.
|
||||
*/
|
||||
if (!get_ether_addr(unit, hisaddr, &dls.sdl)) {
|
||||
LogPrintf(LOG_PHASE, "Cannot determine ethernet address for proxy ARP\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
arpreq.arp_ha.sa_len = sizeof(struct sockaddr);
|
||||
arpreq.arp_ha.sa_family = AF_UNSPEC;
|
||||
BCOPY(LLADDR(&dls.sdl), arpreq.arp_ha.sa_data, dls.sdl.sdl_alen);
|
||||
SET_SA_FAMILY(arpreq.arp_pa, AF_INET);
|
||||
((struct sockaddr_in *) &arpreq.arp_pa)->sin_addr.s_addr = hisaddr;
|
||||
arpreq.arp_flags = ATF_PERM | ATF_PUBL;
|
||||
if (ioctl(unit, SIOCSARP, (caddr_t)&arpreq) < 0) {
|
||||
fprintf(stderr, "ioctl(SIOCSARP): \n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* cifproxyarp - Delete the proxy ARP entry for the peer.
|
||||
*/
|
||||
int
|
||||
cifproxyarp(unit, hisaddr)
|
||||
int unit;
|
||||
u_long hisaddr;
|
||||
{
|
||||
struct arpreq arpreq;
|
||||
|
||||
BZERO(&arpreq, sizeof(arpreq));
|
||||
SET_SA_FAMILY(arpreq.arp_pa, AF_INET);
|
||||
((struct sockaddr_in *) &arpreq.arp_pa)->sin_addr.s_addr = hisaddr;
|
||||
if (ioctl(unit, SIOCDARP, (caddr_t)&arpreq) < 0) {
|
||||
fprintf(stderr, "ioctl(SIOCDARP): \n");
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
#endif /* RTM_VERSION */
|
||||
|
||||
|
||||
/*
|
||||
* get_ether_addr - get the hardware address of an interface on the
|
||||
* the same subnet as ipaddr.
|
||||
*/
|
||||
#define MAX_IFS 32
|
||||
|
||||
int
|
||||
get_ether_addr(s, ipaddr, hwaddr)
|
||||
int s;
|
||||
u_long ipaddr;
|
||||
struct sockaddr_dl *hwaddr;
|
||||
{
|
||||
struct ifreq *ifr, *ifend, *ifp;
|
||||
u_long ina, mask;
|
||||
struct sockaddr_dl *dla;
|
||||
struct ifreq ifreq;
|
||||
struct ifconf ifc;
|
||||
struct ifreq ifs[MAX_IFS];
|
||||
struct ifreq ifx;
|
||||
|
||||
ifc.ifc_len = sizeof(ifs);
|
||||
ifc.ifc_req = ifs;
|
||||
if (ioctl(s, SIOCGIFCONF, &ifc) < 0) {
|
||||
fprintf(stderr, "ioctl(SIOCGIFCONF): \n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Scan through looking for an interface with an Internet
|
||||
* address on the same subnet as `ipaddr'.
|
||||
*/
|
||||
ifend = (struct ifreq *) (ifc.ifc_buf + ifc.ifc_len);
|
||||
for (ifr = ifc.ifc_req; ifr < ifend; ) {
|
||||
if (ifr->ifr_addr.sa_family == AF_INET) {
|
||||
ina = ((struct sockaddr_in *) &ifr->ifr_addr)->sin_addr.s_addr;
|
||||
strncpy(ifreq.ifr_name, ifr->ifr_name, sizeof(ifreq.ifr_name));
|
||||
/*
|
||||
* Check that the interface is up, and not point-to-point
|
||||
* or loopback.
|
||||
*/
|
||||
if (ioctl(s, SIOCGIFFLAGS, &ifreq) < 0)
|
||||
continue;
|
||||
if ((ifreq.ifr_flags &
|
||||
(IFF_UP|IFF_BROADCAST|IFF_POINTOPOINT|IFF_LOOPBACK|IFF_NOARP))
|
||||
!= (IFF_UP|IFF_BROADCAST))
|
||||
goto nextif;
|
||||
/*
|
||||
* Get its netmask and check that it's on the right subnet.
|
||||
*/
|
||||
if (ioctl(s, SIOCGIFNETMASK, &ifreq) < 0)
|
||||
continue;
|
||||
mask = ((struct sockaddr_in *) &ifreq.ifr_addr)->sin_addr.s_addr;
|
||||
if ((ipaddr & mask) != (ina & mask))
|
||||
goto nextif;
|
||||
|
||||
break;
|
||||
}
|
||||
nextif:
|
||||
ifr = (struct ifreq *) ((char *)&ifr->ifr_addr + ifr->ifr_addr.sa_len);
|
||||
}
|
||||
|
||||
if (ifr >= ifend)
|
||||
return 0;
|
||||
LogPrintf(LOG_PHASE, "found interface %s for proxy arp\n", ifr->ifr_name);
|
||||
|
||||
/*
|
||||
* Now scan through again looking for a link-level address
|
||||
* for this interface.
|
||||
*/
|
||||
ifp = ifr;
|
||||
for (ifr = ifc.ifc_req; ifr < ifend; ) {
|
||||
if (strcmp(ifp->ifr_name, ifr->ifr_name) == 0
|
||||
&& ifr->ifr_addr.sa_family == AF_LINK) {
|
||||
/*
|
||||
* Found the link-level address - copy it out
|
||||
*/
|
||||
dla = (struct sockaddr_dl *) &ifr->ifr_addr;
|
||||
#ifdef __bsdi__
|
||||
if (dla->sdl_alen == 0)
|
||||
kmemgetether(ifr->ifr_name, dla);
|
||||
#endif
|
||||
BCOPY(dla, hwaddr, dla->sdl_len);
|
||||
return 1;
|
||||
}
|
||||
ifr = (struct ifreq *) ((char *)&ifr->ifr_addr + ifr->ifr_addr.sa_len);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef __bsdi__
|
||||
#include <nlist.h>
|
||||
|
||||
struct nlist nl[] = {
|
||||
#define N_IFNET 0
|
||||
{ "_ifnet" },
|
||||
"",
|
||||
};
|
||||
|
||||
|
||||
kvm_t *kvmd;
|
||||
|
||||
/*
|
||||
* Read kernel memory, return 0 on success.
|
||||
*/
|
||||
int
|
||||
kread(addr, buf, size)
|
||||
u_long addr;
|
||||
char *buf;
|
||||
int size;
|
||||
{
|
||||
|
||||
if (kvm_read(kvmd, addr, buf, size) != size) {
|
||||
/* XXX this duplicates kvm_read's error printout */
|
||||
(void)fprintf(stderr, "kvm_read %s\n",
|
||||
kvm_geterr(kvmd));
|
||||
return (-1);
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
kmemgetether(ifname, dlo)
|
||||
char *ifname;
|
||||
struct sockaddr_dl *dlo;
|
||||
{
|
||||
struct ifnet ifnet;
|
||||
int n;
|
||||
u_long addr, ifaddraddr, ifnetfound, ifaddrfound;
|
||||
char name[32];
|
||||
struct sockaddr *sa;
|
||||
char *cp;
|
||||
struct sockaddr_dl *sdl;
|
||||
union {
|
||||
struct ifaddr ifa;
|
||||
struct in_ifaddr in;
|
||||
} ifaddr;
|
||||
struct arpcom ac;
|
||||
|
||||
kvmd = kvm_open(NULL, NULL, NULL, O_RDONLY, NULL);
|
||||
if (kvmd) {
|
||||
n = kvm_nlist(kvmd, nl);
|
||||
if (n >= 0) {
|
||||
addr = nl[N_IFNET].n_value;
|
||||
kread(addr, (char *)&addr, sizeof(addr));
|
||||
ifaddraddr = ifnetfound = 0;
|
||||
while (addr || ifaddraddr) {
|
||||
ifnetfound = addr;
|
||||
if (ifaddraddr == 0) {
|
||||
if (kread(addr, (char *)&ifnet, sizeof(ifnet)) ||
|
||||
kread((u_long)ifnet.if_name, name, 16))
|
||||
return;
|
||||
name[15] = 0;
|
||||
addr = (u_long) ifnet.if_next;
|
||||
cp = (char *)index(name, '\0');
|
||||
cp += sprintf(cp, "%d", ifnet.if_unit);
|
||||
*cp = '\0';
|
||||
ifaddraddr = (u_long)ifnet.if_addrlist;
|
||||
}
|
||||
ifaddrfound = ifaddraddr;
|
||||
if (ifaddraddr) {
|
||||
if (kread(ifaddraddr, (char *)&ifaddr, sizeof ifaddr)) {
|
||||
ifaddraddr = 0;
|
||||
continue;
|
||||
}
|
||||
#define CP(x) ((char *)(x))
|
||||
cp = (CP(ifaddr.ifa.ifa_addr) - CP(ifaddraddr)) + CP(&ifaddr);
|
||||
sa = (struct sockaddr *)cp;
|
||||
if (sa->sa_family == AF_LINK && strcmp(ifname, name) == 0) {
|
||||
sdl = (struct sockaddr_dl *)sa;
|
||||
cp = (char *)LLADDR(sdl);
|
||||
n = sdl->sdl_alen;
|
||||
if (ifnet.if_type == IFT_ETHER) {
|
||||
if (n == 0) {
|
||||
kread(ifnetfound, (char *)&ac, sizeof(ac));
|
||||
cp = (char *)LLADDR(sdl);
|
||||
bcopy((char *)ac.ac_enaddr, cp, 6);
|
||||
sdl->sdl_alen = 6;
|
||||
}
|
||||
bcopy(sdl, dlo, sizeof(*sdl));
|
||||
return;
|
||||
}
|
||||
}
|
||||
ifaddraddr = (u_long)ifaddr.ifa.ifa_next;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG
|
||||
main()
|
||||
{
|
||||
u_long ipaddr;
|
||||
int s;
|
||||
|
||||
s = socket(AF_INET, SOCK_DGRAM, 0);
|
||||
ipaddr = inet_addr("192.168.1.32");
|
||||
sifproxyarp(s, ipaddr);
|
||||
close(s);
|
||||
}
|
||||
#endif
|
@ -18,20 +18,20 @@
|
||||
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* $Id:$
|
||||
*
|
||||
*
|
||||
*/
|
||||
#include "fsm.h"
|
||||
#include "hdlc.h"
|
||||
#include "lcp.h"
|
||||
#include "lcpproto.h"
|
||||
#include "modem.h"
|
||||
#include "vars.h"
|
||||
|
||||
#define HDLCSIZE (MAX_MRU*2+6)
|
||||
|
||||
struct async_state {
|
||||
int mode;
|
||||
int length;
|
||||
struct mbuf *hpacket;
|
||||
u_char hbuff[HDLCSIZE]; /* recv buffer */
|
||||
u_char xbuff[HDLCSIZE]; /* xmit buffer */
|
||||
u_long my_accmap;
|
||||
@ -47,6 +47,7 @@ AsyncInit()
|
||||
struct async_state *stp = &AsyncState;
|
||||
|
||||
stp->mode = MODE_HUNT;
|
||||
stp->length = 0;
|
||||
stp->my_accmap = stp->his_accmap = 0xffffffff;
|
||||
}
|
||||
|
||||
@ -176,10 +177,17 @@ int cnt;
|
||||
struct mbuf *bp;
|
||||
|
||||
OsAddInOctets(cnt);
|
||||
while (cnt > 0) {
|
||||
bp = AsyncDecode(*buff++);
|
||||
if (bp)
|
||||
HdlcInput(bp);
|
||||
cnt--;
|
||||
if (DEV_IS_SYNC) {
|
||||
bp = mballoc(cnt, MB_ASYNC);
|
||||
bcopy(buff, MBUF_CTOP(bp), cnt);
|
||||
bp->cnt = cnt;
|
||||
HdlcInput(bp);
|
||||
} else {
|
||||
while (cnt > 0) {
|
||||
bp = AsyncDecode(*buff++);
|
||||
if (bp)
|
||||
HdlcInput(bp);
|
||||
cnt--;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -16,18 +16,69 @@
|
||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*
|
||||
* $Id:$
|
||||
*
|
||||
*
|
||||
* TODO:
|
||||
* o Imprement check against with registerd IP addresses.
|
||||
*/
|
||||
#include "fsm.h"
|
||||
#include "lcpproto.h"
|
||||
#include "ipcp.h"
|
||||
#include "vars.h"
|
||||
#include "auth.h"
|
||||
|
||||
extern FILE *OpenSecret();
|
||||
extern void CloseSecret();
|
||||
|
||||
LOCAL_AUTH_VALID
|
||||
LocalAuthInit(void){
|
||||
|
||||
char *p;
|
||||
|
||||
if ( gethostname( VarShortHost, sizeof(VarShortHost))) {
|
||||
return(1);
|
||||
}
|
||||
if ( p = strchr( VarShortHost, '.' ) )
|
||||
*p = '\0';
|
||||
|
||||
return LocalAuthValidate( SECRETFILE, VarShortHost, "" );
|
||||
|
||||
}
|
||||
|
||||
LOCAL_AUTH_VALID
|
||||
LocalAuthValidate( char *fname, char *system, char *key) {
|
||||
FILE *fp;
|
||||
int n;
|
||||
char *vector[20]; /* XXX */
|
||||
char buff[200]; /* XXX */
|
||||
LOCAL_AUTH_VALID rc;
|
||||
|
||||
rc = NOT_FOUND; /* No system entry */
|
||||
fp = OpenSecret(fname);
|
||||
if (fp == NULL)
|
||||
return( rc );
|
||||
while (fgets(buff, sizeof(buff), fp)) {
|
||||
if (buff[0] == '#')
|
||||
continue;
|
||||
buff[strlen(buff)-1] = 0;
|
||||
bzero(vector, sizeof(vector));
|
||||
n = MakeArgs(buff, &vector);
|
||||
if (n < 1)
|
||||
continue;
|
||||
if (strcmp(vector[0], system) == 0) {
|
||||
if ( vector[1] != (char *) NULL && strcmp(vector[1], key) == 0) {
|
||||
rc = VALID; /* Valid */
|
||||
} else {
|
||||
rc = INVALID; /* Invalid */
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
CloseSecret(fp);
|
||||
return( rc );
|
||||
}
|
||||
|
||||
int
|
||||
AuthValidate(fname, system, key)
|
||||
char *fname, *system, *key;
|
||||
@ -110,3 +161,42 @@ int len, setaddr;
|
||||
CloseSecret(fp);
|
||||
return(NULL); /* Invalid */
|
||||
}
|
||||
|
||||
static void
|
||||
AuthTimeout(authp)
|
||||
struct authinfo *authp;
|
||||
{
|
||||
struct pppTimer *tp;
|
||||
|
||||
tp = &authp->authtimer;
|
||||
StopTimer(tp);
|
||||
if (--authp->retry > 0) {
|
||||
StartTimer(tp);
|
||||
(authp->ChallengeFunc)(++authp->id);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
StartAuthChallenge(authp)
|
||||
struct authinfo *authp;
|
||||
{
|
||||
struct pppTimer *tp;
|
||||
|
||||
tp = &authp->authtimer;
|
||||
StopTimer(tp);
|
||||
tp->func = AuthTimeout;
|
||||
tp->load = VarRetryTimeout * SECTICKS;
|
||||
tp->state = TIMER_STOPPED;
|
||||
tp->arg = (void *)authp;
|
||||
StartTimer(tp);
|
||||
authp->retry = 3;
|
||||
authp->id = 1;
|
||||
(authp->ChallengeFunc)(authp->id);
|
||||
}
|
||||
|
||||
void
|
||||
StopAuthTimer(authp)
|
||||
struct authinfo *authp;
|
||||
{
|
||||
StopTimer(&authp->authtimer);
|
||||
}
|
||||
|
@ -16,9 +16,9 @@
|
||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*
|
||||
* $Id:$
|
||||
*
|
||||
*
|
||||
* TODO:
|
||||
* o Support other compression protocols
|
||||
*/
|
||||
@ -28,20 +28,21 @@
|
||||
#include "ccp.h"
|
||||
#include "phase.h"
|
||||
#include "vars.h"
|
||||
|
||||
extern void PutConfValue();
|
||||
#include "cdefs.h"
|
||||
|
||||
extern void PutConfValue __P((void));
|
||||
|
||||
struct ccpstate CcpInfo;
|
||||
|
||||
static void CcpSendConfigReq(struct fsm *);
|
||||
static void CcpSendTerminateReq(struct fsm *fp);
|
||||
static void CcpSendTerminateAck(struct fsm *fp);
|
||||
static void CcpDecodeConfig(struct mbuf *bp, int mode);
|
||||
static void CcpLayerStart(struct fsm *);
|
||||
static void CcpLayerFinish(struct fsm *);
|
||||
static void CcpLayerUp(struct fsm *);
|
||||
static void CcpLayerDown(struct fsm *);
|
||||
static void CcpInitRestartCounter(struct fsm *);
|
||||
static void CcpSendConfigReq __P((struct fsm *));
|
||||
static void CcpSendTerminateReq __P((struct fsm *fp));
|
||||
static void CcpSendTerminateAck __P((struct fsm *fp));
|
||||
static void CcpDecodeConfig __P((u_char *cp, int flen, int mode));
|
||||
static void CcpLayerStart __P((struct fsm *));
|
||||
static void CcpLayerFinish __P((struct fsm *));
|
||||
static void CcpLayerUp __P((struct fsm *));
|
||||
static void CcpLayerDown __P((struct fsm *));
|
||||
static void CcpInitRestartCounter __P((struct fsm *));
|
||||
|
||||
#define REJECTED(p, x) (p->his_reject & (1<<x))
|
||||
|
||||
@ -105,7 +106,7 @@ static void
|
||||
CcpInitRestartCounter(fp)
|
||||
struct fsm *fp;
|
||||
{
|
||||
fp->FsmTimer.load = 3 * SECTICKS;
|
||||
fp->FsmTimer.load = VarRetryTimeout * SECTICKS;
|
||||
fp->restart = 5;
|
||||
}
|
||||
|
||||
@ -207,20 +208,17 @@ CcpOpen()
|
||||
}
|
||||
|
||||
static void
|
||||
CcpDecodeConfig(bp, mode)
|
||||
struct mbuf *bp;
|
||||
CcpDecodeConfig(cp, plen, mode)
|
||||
u_char *cp;
|
||||
int plen;
|
||||
int mode;
|
||||
{
|
||||
u_char *cp;
|
||||
int plen, type, length;
|
||||
int type, length;
|
||||
u_long *lp, compproto;
|
||||
struct compreq *pcomp;
|
||||
struct in_addr ipaddr, dstipaddr;
|
||||
char tbuff[100];
|
||||
|
||||
plen = plength(bp);
|
||||
|
||||
cp = MBUF_CTOP(bp);
|
||||
ackp = AckBuff;
|
||||
nakp = NakBuff;
|
||||
rejp = RejBuff;
|
||||
|
@ -16,11 +16,10 @@
|
||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*
|
||||
* $Id:$
|
||||
*
|
||||
*
|
||||
* TODO:
|
||||
* o Imprement retransmission timer.
|
||||
*/
|
||||
#include "fsm.h"
|
||||
#include "chap.h"
|
||||
@ -29,13 +28,16 @@
|
||||
#include "hdlc.h"
|
||||
#include "phase.h"
|
||||
#include "vars.h"
|
||||
|
||||
static int chapid;
|
||||
#include "auth.h"
|
||||
|
||||
static char *chapcodes[] = {
|
||||
"???", "CHALLENGE", "RESPONCE", "SUCCESS", "FAILURE"
|
||||
};
|
||||
|
||||
struct authinfo AuthChapInfo = {
|
||||
SendChapChallenge,
|
||||
};
|
||||
|
||||
extern char *AuthGetSecret();
|
||||
|
||||
void
|
||||
@ -68,13 +70,13 @@ static char challenge_data[80];
|
||||
static int challenge_len;
|
||||
|
||||
void
|
||||
SendChapChallenge()
|
||||
SendChapChallenge(chapid)
|
||||
int chapid;
|
||||
{
|
||||
int keylen, len, i;
|
||||
char *cp;
|
||||
|
||||
srandom(time(NULL));
|
||||
++chapid;
|
||||
|
||||
cp = challenge_data;
|
||||
*cp++ = challenge_len = random() % 32 + 16;
|
||||
@ -91,6 +93,7 @@ void
|
||||
DumpDigest(mes, cp, len)
|
||||
char *mes;
|
||||
char *cp;
|
||||
int len;
|
||||
{
|
||||
int i;
|
||||
|
||||
@ -244,8 +247,10 @@ ChapInput(struct mbuf *bp)
|
||||
bp->cnt -= sizeof(struct fsmheader);
|
||||
|
||||
switch (chp->code) {
|
||||
case CHAP_CHALLENGE:
|
||||
case CHAP_RESPONSE:
|
||||
StopAuthTimer(&AuthChapInfo);
|
||||
/* Fall into.. */
|
||||
case CHAP_CHALLENGE:
|
||||
RecvChapTalk(chp, bp);
|
||||
break;
|
||||
case CHAP_SUCCESS:
|
||||
|
@ -17,9 +17,9 @@
|
||||
* 1760 Zollinger Road
|
||||
* Columbus, OH 43221
|
||||
* (614)451-1883
|
||||
*
|
||||
*
|
||||
* $Id:$
|
||||
*
|
||||
*
|
||||
* TODO:
|
||||
* o Support more UUCP compatible control sequences.
|
||||
* o Dialing shoud not block monitor process.
|
||||
@ -32,13 +32,19 @@
|
||||
#endif
|
||||
#include <sys/time.h>
|
||||
#include <fcntl.h>
|
||||
#include <errno.h>
|
||||
#include <signal.h>
|
||||
#include <sys/wait.h>
|
||||
#include "timeout.h"
|
||||
#include "vars.h"
|
||||
|
||||
#define IBSIZE 200
|
||||
|
||||
static int TimeoutSec;
|
||||
static int abort_next, timeout_next;
|
||||
static int numaborts;
|
||||
char *AbortStrings[50];
|
||||
char inbuff[IBSIZE];
|
||||
|
||||
extern int ChangeParity(char *);
|
||||
|
||||
@ -177,15 +183,17 @@ int
|
||||
WaitforString(estr)
|
||||
char *estr;
|
||||
{
|
||||
#define IBSIZE 200
|
||||
struct timeval timeout;
|
||||
char *s, *str, ch;
|
||||
char *inp;
|
||||
fd_set rfds;
|
||||
int i, nfds;
|
||||
int i, nfds, nb;
|
||||
char buff[200];
|
||||
char inbuff[IBSIZE];
|
||||
|
||||
#ifdef SIGALRM
|
||||
int omask;
|
||||
omask = sigblock(sigmask(SIGALRM));
|
||||
#endif
|
||||
(void) ExpandString(estr, buff, 0);
|
||||
LogPrintf(LOG_CHAT, "Wait for (%d): %s --> %s\n", TimeoutSec, estr, buff);
|
||||
str = buff;
|
||||
@ -202,52 +210,150 @@ char *estr;
|
||||
*/
|
||||
timeout.tv_sec = TimeoutSec;
|
||||
timeout.tv_usec = 0;
|
||||
|
||||
i = select(nfds, &rfds, NULL, NULL, &timeout);
|
||||
#ifdef notdef
|
||||
TimerService();
|
||||
#endif
|
||||
if (i < 0) {
|
||||
#ifdef SIGALRM
|
||||
if (errno == EINTR)
|
||||
continue;
|
||||
sigsetmask(omask);
|
||||
#endif
|
||||
perror("select");
|
||||
*inp = 0;
|
||||
return(NOMATCH);
|
||||
} else if (i == 0) { /* Timeout reached! */
|
||||
*inp = 0;
|
||||
if (inp != inbuff)
|
||||
LogPrintf(LOG_CHAT, "got: %s\n", inbuff);
|
||||
LogPrintf(LOG_CHAT, "can't get (%d).\n", timeout.tv_sec);
|
||||
#ifdef SIGALRM
|
||||
sigsetmask(omask);
|
||||
#endif
|
||||
return(NOMATCH);
|
||||
}
|
||||
if (FD_ISSET(modem, &rfds)) { /* got something */
|
||||
read(modem, &ch, 1);
|
||||
*inp++ = ch;
|
||||
if (ch == *s) {
|
||||
s++;
|
||||
if (*s == '\0') {
|
||||
if (DEV_IS_SYNC) {
|
||||
nb = read(modem, inbuff, IBSIZE-1);
|
||||
inbuff[nb] = 0;
|
||||
if (strstr(inbuff, str)) {
|
||||
#ifdef SIGALRM
|
||||
sigsetmask(omask);
|
||||
#endif
|
||||
return(MATCH);
|
||||
}
|
||||
} else {
|
||||
s = str;
|
||||
if (inp == inbuff+ IBSIZE) {
|
||||
bcopy(inp - 100, inbuff, 100);
|
||||
inp = inbuff + 100;
|
||||
}
|
||||
for (i = 0; i < numaborts; i++) { /* Look for Abort strings */
|
||||
int len;
|
||||
char *s1;
|
||||
|
||||
s1 = AbortStrings[i];
|
||||
len = strlen(s1);
|
||||
if ((len <= inp - inbuff) && (strncmp(inp - len, s1, len) == 0)) {
|
||||
LogPrintf(LOG_CHAT, "Abort: %s\n", s1);
|
||||
for (i = 0; i < numaborts; i++) {
|
||||
if (strstr(inbuff, AbortStrings[i])) {
|
||||
LogPrintf(LOG_CHAT, "Abort: %s\n", AbortStrings[i]);
|
||||
#ifdef SIGALRM
|
||||
sigsetmask(omask);
|
||||
#endif
|
||||
return(ABORT);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
read(modem, &ch, 1);
|
||||
*inp++ = ch;
|
||||
if (ch == *s) {
|
||||
s++;
|
||||
if (*s == '\0') {
|
||||
#ifdef SIGALRM
|
||||
sigsetmask(omask);
|
||||
#endif
|
||||
*inp = 0;
|
||||
return(MATCH);
|
||||
}
|
||||
} else {
|
||||
s = str;
|
||||
if (inp == inbuff+ IBSIZE) {
|
||||
bcopy(inp - 100, inbuff, 100);
|
||||
inp = inbuff + 100;
|
||||
}
|
||||
for (i = 0; i < numaborts; i++) { /* Look for Abort strings */
|
||||
int len;
|
||||
char *s1;
|
||||
|
||||
s1 = AbortStrings[i];
|
||||
len = strlen(s1);
|
||||
if ((len <= inp - inbuff) && (strncmp(inp - len, s1, len) == 0)) {
|
||||
LogPrintf(LOG_CHAT, "Abort: %s\n", s1);
|
||||
*inp = 0;
|
||||
#ifdef SIGALRM
|
||||
sigsetmask(omask);
|
||||
#endif
|
||||
return(ABORT);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#ifdef SIGALRM
|
||||
sigsetmask(omask);
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
ExecStr(command, out)
|
||||
char *command, *out;
|
||||
{
|
||||
int pid;
|
||||
int fids[2];
|
||||
char *vector[20];
|
||||
int stat, nb;
|
||||
char *cp;
|
||||
char tmp[300];
|
||||
extern int errno;
|
||||
|
||||
cp = inbuff + strlen(inbuff) - 1;
|
||||
while (cp > inbuff) {
|
||||
if (*cp < ' ' && *cp != '\t') {
|
||||
cp++;
|
||||
break;
|
||||
}
|
||||
cp--;
|
||||
}
|
||||
sprintf(tmp, "%s %s", command, cp);
|
||||
(void) MakeArgs(tmp, &vector);
|
||||
|
||||
pipe(fids);
|
||||
pid = fork();
|
||||
if (pid == 0) {
|
||||
signal(SIGINT, SIG_DFL);
|
||||
signal(SIGQUIT, SIG_DFL);
|
||||
signal(SIGTERM, SIG_DFL);
|
||||
signal(SIGHUP, SIG_DFL);
|
||||
close(fids[0]);
|
||||
dup2(fids[1], 1);
|
||||
close(fids[1]);
|
||||
nb = open("/dev/tty", O_RDWR);
|
||||
dup2(nb, 0);
|
||||
LogPrintf(LOG_CHAT, "exec: %s\n", command);
|
||||
pid = execvp(command, vector);
|
||||
LogPrintf(LOG_CHAT, "execvp failed for (%d/%d): %s\n", pid, errno, command);
|
||||
exit(127);
|
||||
} else {
|
||||
close(fids[1]);
|
||||
for (;;) {
|
||||
nb = read(fids[0], out, 1);
|
||||
if (nb <= 0)
|
||||
break;
|
||||
out++;
|
||||
}
|
||||
*out = '\0';
|
||||
close(fids[0]);
|
||||
close(fids[1]);
|
||||
waitpid(pid, &stat, WNOHANG);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
SendString(str)
|
||||
char *str;
|
||||
{
|
||||
char *cp;
|
||||
int nb, on;
|
||||
char buff[200];
|
||||
|
||||
if (abort_next) {
|
||||
@ -260,9 +366,20 @@ char *str;
|
||||
if (TimeoutSec <= 0)
|
||||
TimeoutSec = 30;
|
||||
} else {
|
||||
(void) ExpandString(str, buff, 1);
|
||||
LogPrintf(LOG_CHAT, "sending: %s\n", buff);
|
||||
write(modem, buff, strlen(buff));
|
||||
if (*str == '!') {
|
||||
(void) ExpandString(str+1, buff+2, 0);
|
||||
ExecStr(buff + 2, buff + 2);
|
||||
} else {
|
||||
(void) ExpandString(str, buff+2, 1);
|
||||
}
|
||||
LogPrintf(LOG_CHAT, "sending: %s\n", buff+2);
|
||||
cp = buff;
|
||||
if (DEV_IS_SYNC)
|
||||
bcopy("\377\003", buff, 2); /* Prepend HDLC header */
|
||||
else
|
||||
cp += 2;
|
||||
on = strlen(cp);
|
||||
nb = write(modem, cp, on);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -16,11 +16,12 @@
|
||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*
|
||||
* $Id:$
|
||||
*
|
||||
*
|
||||
*/
|
||||
#include <ctype.h>
|
||||
#include <termios.h>
|
||||
#include "fsm.h"
|
||||
#include "phase.h"
|
||||
#include "lcp.h"
|
||||
@ -29,6 +30,7 @@
|
||||
#include "command.h"
|
||||
#include "hdlc.h"
|
||||
#include "vars.h"
|
||||
#include "auth.h"
|
||||
#include <netdb.h>
|
||||
#include <sys/socket.h>
|
||||
#include <arpa/inet.h>
|
||||
@ -39,10 +41,12 @@ extern int MakeArgs();
|
||||
extern void Cleanup(), TtyTermMode(), PacketMode();
|
||||
extern int EnableCommand(), DisableCommand(), DisplayCommand();
|
||||
extern int AcceptCommand(), DenyCommand();
|
||||
extern int LocalAuthCommand();
|
||||
extern int LoadCommand(), SaveCommand();
|
||||
extern int ChangeParity(char *);
|
||||
extern int SelectSystem();
|
||||
extern int ShowRoute();
|
||||
extern struct pppvars pppVars;
|
||||
|
||||
struct in_addr ifnetmask;
|
||||
|
||||
@ -113,18 +117,18 @@ char **argv;
|
||||
}
|
||||
if (!IsInteractive())
|
||||
return(1);
|
||||
modem = OpenModem(mode);
|
||||
if (modem < 0) {
|
||||
printf("failed to open modem.\n");
|
||||
modem = 0;
|
||||
return(1);
|
||||
}
|
||||
if (argc > 0) {
|
||||
if (SelectSystem(*argv, CONFFILE) < 0) {
|
||||
printf("%s: not found.\n", *argv);
|
||||
return(1);
|
||||
}
|
||||
}
|
||||
modem = OpenModem(mode);
|
||||
if (modem < 0) {
|
||||
printf("failed to open modem.\n");
|
||||
modem = 0;
|
||||
return(1);
|
||||
}
|
||||
if (DialModem()) {
|
||||
sleep(1);
|
||||
ModemTimeout();
|
||||
@ -138,40 +142,42 @@ static char StrRemote[] = "[remote]";
|
||||
char StrNull[] = "";
|
||||
|
||||
struct cmdtab Commands[] = {
|
||||
{ "accept", NULL, AcceptCommand,
|
||||
"accept option request", StrOption },
|
||||
{ "add", NULL, AddCommand,
|
||||
"add route", "dest mask gateway" },
|
||||
{ "close", NULL, CloseCommand,
|
||||
"Close connection", StrNull },
|
||||
{ "delete", NULL, DeleteCommand,
|
||||
"delete route", "dest gateway" },
|
||||
{ "deny", NULL, DenyCommand,
|
||||
"Deny option request", StrOption },
|
||||
{ "dial", "call", DialCommand,
|
||||
"Dial and login", StrRemote },
|
||||
{ "disable", NULL, DisableCommand,
|
||||
"Disable option", StrOption },
|
||||
{ "display", NULL, DisplayCommand,
|
||||
"Display option configs", StrNull },
|
||||
{ "enable", NULL, EnableCommand,
|
||||
"Enable option", StrOption },
|
||||
{ "load", NULL, LoadCommand,
|
||||
"Load settings", StrRemote },
|
||||
{ "save", NULL, SaveCommand,
|
||||
"Save settings", StrNull },
|
||||
{ "set", "setup", SetCommand,
|
||||
"Set parameters", "var value" },
|
||||
{ "show", NULL, ShowCommand,
|
||||
"Show status and statictics", "var" },
|
||||
{ "term", NULL, TerminalCommand,
|
||||
"Enter to terminal mode", StrNull },
|
||||
{ "quit", "bye", QuitCommand,
|
||||
"Quit PPP program", StrNull },
|
||||
{ "help", "?", HelpCommand,
|
||||
{ "accept", NULL, AcceptCommand, LOCAL_AUTH,
|
||||
"accept option request", StrOption},
|
||||
{ "add", NULL, AddCommand, LOCAL_AUTH,
|
||||
"add route", "dest mask gateway"},
|
||||
{ "close", NULL, CloseCommand, LOCAL_AUTH,
|
||||
"Close connection", StrNull},
|
||||
{ "delete", NULL, DeleteCommand, LOCAL_AUTH,
|
||||
"delete route", "dest gateway"},
|
||||
{ "deny", NULL, DenyCommand, LOCAL_AUTH,
|
||||
"Deny option request", StrOption},
|
||||
{ "dial", "call", DialCommand, LOCAL_AUTH,
|
||||
"Dial and login", StrRemote},
|
||||
{ "disable", NULL, DisableCommand, LOCAL_AUTH,
|
||||
"Disable option", StrOption},
|
||||
{ "display", NULL, DisplayCommand, LOCAL_AUTH,
|
||||
"Display option configs", StrNull},
|
||||
{ "enable", NULL, EnableCommand, LOCAL_AUTH,
|
||||
"Enable option", StrOption},
|
||||
{ "passwd", NULL, LocalAuthCommand,LOCAL_NO_AUTH | LOCAL_NO_AUTH,
|
||||
"Password for manupilation", StrOption},
|
||||
{ "load", NULL, LoadCommand, LOCAL_AUTH,
|
||||
"Load settings", StrRemote},
|
||||
{ "save", NULL, SaveCommand, LOCAL_AUTH,
|
||||
"Save settings", StrNull},
|
||||
{ "set", "setup", SetCommand, LOCAL_AUTH,
|
||||
"Set parameters", "var value"},
|
||||
{ "show", NULL, ShowCommand, LOCAL_AUTH,
|
||||
"Show status and statictics", "var"},
|
||||
{ "term", NULL, TerminalCommand,LOCAL_AUTH,
|
||||
"Enter to terminal mode", StrNull},
|
||||
{ "quit", "bye", QuitCommand, LOCAL_AUTH,
|
||||
"Quit PPP program", StrNull},
|
||||
{ "help", "?", HelpCommand, LOCAL_AUTH | LOCAL_NO_AUTH,
|
||||
"Display this message", "[command]", (void *)Commands },
|
||||
{ NULL, "down", DownCommand,
|
||||
"Generate down event", StrNull },
|
||||
{ NULL, "down", DownCommand, LOCAL_AUTH,
|
||||
"Generate down event", StrNull},
|
||||
{ NULL, NULL, NULL },
|
||||
};
|
||||
|
||||
@ -223,8 +229,8 @@ static int ShowEscape()
|
||||
|
||||
static int ShowTimeout()
|
||||
{
|
||||
printf(" Idle Timer: %d secs LQR Timer: %d secs\n",
|
||||
VarIdleTimeout, VarLqrTimeout);
|
||||
printf(" Idle Timer: %d secs LQR Timer: %d secs Retry Timer: %d secs\n",
|
||||
VarIdleTimeout, VarLqrTimeout, VarRetryTimeout);
|
||||
return(1);
|
||||
}
|
||||
|
||||
@ -249,47 +255,49 @@ static int ShowLogList()
|
||||
return(1);
|
||||
}
|
||||
|
||||
extern int ShowIfilter(), ShowOfilter(), ShowDfilter();
|
||||
extern int ShowIfilter(), ShowOfilter(), ShowDfilter(), ShowAfilter();
|
||||
|
||||
struct cmdtab ShowCommands[] = {
|
||||
{ "auth", NULL, ShowAuthKey, "Show auth name/key",
|
||||
StrNull, },
|
||||
{ "ccp", NULL, ReportCcpStatus, "Show CCP status",
|
||||
StrNull, },
|
||||
{ "compress", NULL, ReportCompress, "Show compression statictics",
|
||||
StrNull },
|
||||
{ "debug", NULL, ShowDebugLevel, "Show current debug level",
|
||||
StrNull },
|
||||
{ "dfilter", NULL, ShowDfilter, "Show Demand filters",
|
||||
StrOption },
|
||||
{ "escape", NULL, ShowEscape, "Show escape characters",
|
||||
StrNull },
|
||||
{ "hdlc", NULL, ReportHdlcStatus, "Show HDLC error summary",
|
||||
StrNull },
|
||||
{ "ifilter", NULL, ShowIfilter, "Show Input filters",
|
||||
StrOption },
|
||||
{ "ipcp", NULL, ReportIpcpStatus, "Show IPCP status",
|
||||
StrNull, },
|
||||
{ "lcp", NULL, ReportLcpStatus, "Show LCP status",
|
||||
StrNull, },
|
||||
{ "log", NULL, ShowLogList, "Show log records",
|
||||
StrNull, },
|
||||
{ "mem", NULL, ShowMemMap, "Show memory map",
|
||||
StrNull, },
|
||||
{ "modem", NULL, ShowModemStatus, "Show modem setups",
|
||||
StrNull, },
|
||||
{ "ofilter", NULL, ShowOfilter, "Show Output filters",
|
||||
StrOption },
|
||||
{ "proto", NULL, ReportProtStatus, "Show protocol summary",
|
||||
StrNull, },
|
||||
{ "route", NULL, ShowRoute, "Show routing table",
|
||||
StrNull, },
|
||||
{ "timeout", NULL, ShowTimeout, "Show Idle timeout value",
|
||||
StrNull, },
|
||||
{ "version", NULL, ShowVersion, "Show version string",
|
||||
StrNull, },
|
||||
{ "help", "?", HelpCommand, "Display this message",
|
||||
StrNull, (void *)ShowCommands },
|
||||
{ "afilter", NULL, ShowAfilter, LOCAL_AUTH,
|
||||
"Show keep Alive filters", StrOption},
|
||||
{ "auth", NULL, ShowAuthKey, LOCAL_AUTH,
|
||||
"Show auth name/key", StrNull},
|
||||
{ "ccp", NULL, ReportCcpStatus, LOCAL_AUTH,
|
||||
"Show CCP status", StrNull},
|
||||
{ "compress", NULL, ReportCompress, LOCAL_AUTH,
|
||||
"Show compression statictics", StrNull},
|
||||
{ "debug", NULL, ShowDebugLevel, LOCAL_AUTH,
|
||||
"Show current debug level", StrNull},
|
||||
{ "dfilter", NULL, ShowDfilter, LOCAL_AUTH,
|
||||
"Show Demand filters", StrOption},
|
||||
{ "escape", NULL, ShowEscape, LOCAL_AUTH,
|
||||
"Show escape characters", StrNull},
|
||||
{ "hdlc", NULL, ReportHdlcStatus, LOCAL_AUTH,
|
||||
"Show HDLC error summary", StrNull},
|
||||
{ "ifilter", NULL, ShowIfilter, LOCAL_AUTH,
|
||||
"Show Input filters", StrOption},
|
||||
{ "ipcp", NULL, ReportIpcpStatus, LOCAL_AUTH,
|
||||
"Show IPCP status", StrNull},
|
||||
{ "lcp", NULL, ReportLcpStatus, LOCAL_AUTH,
|
||||
"Show LCP status", StrNull},
|
||||
{ "log", NULL, ShowLogList, LOCAL_AUTH,
|
||||
"Show log records", StrNull},
|
||||
{ "mem", NULL, ShowMemMap, LOCAL_AUTH,
|
||||
"Show memory map", StrNull},
|
||||
{ "modem", NULL, ShowModemStatus, LOCAL_AUTH,
|
||||
"Show modem setups", StrNull},
|
||||
{ "ofilter", NULL, ShowOfilter, LOCAL_AUTH,
|
||||
"Show Output filters", StrOption},
|
||||
{ "proto", NULL, ReportProtStatus, LOCAL_AUTH,
|
||||
"Show protocol summary", StrNull},
|
||||
{ "route", NULL, ShowRoute, LOCAL_AUTH,
|
||||
"Show routing table", StrNull},
|
||||
{ "timeout", NULL, ShowTimeout, LOCAL_AUTH,
|
||||
"Show Idle timeout value", StrNull},
|
||||
{ "version", NULL, ShowVersion, LOCAL_NO_AUTH | LOCAL_AUTH,
|
||||
"Show version string", StrNull},
|
||||
{ "help", "?", HelpCommand, LOCAL_NO_AUTH | LOCAL_AUTH,
|
||||
"Display this message", StrNull, (void *)ShowCommands},
|
||||
{ NULL, NULL, NULL },
|
||||
};
|
||||
|
||||
@ -329,8 +337,8 @@ char **argv;
|
||||
|
||||
cmd = FindCommand(cmdlist, *argv, &nmatch);
|
||||
if (nmatch > 1)
|
||||
printf("Anbiguous.\n");
|
||||
else if (cmd)
|
||||
printf("Ambiguous.\n");
|
||||
else if (cmd && ( cmd->lauth & VarLocalAuth ) )
|
||||
val = (cmd->func)(cmd, --argc, ++argv, cmd->args);
|
||||
else
|
||||
printf("what?\n");
|
||||
@ -341,13 +349,22 @@ void
|
||||
Prompt(flag)
|
||||
int flag;
|
||||
{
|
||||
char *pconnect, *pauth;
|
||||
|
||||
if (!(mode & MODE_INTER))
|
||||
return;
|
||||
|
||||
if (flag) printf("\n");
|
||||
if (IpcpFsm.state == ST_OPENED && phase == PHASE_NETWORK)
|
||||
printf("PPP> ");
|
||||
|
||||
if ( VarLocalAuth == LOCAL_AUTH )
|
||||
pauth = " ON ";
|
||||
else
|
||||
printf("ppp> ");
|
||||
pauth = " on ";
|
||||
if (IpcpFsm.state == ST_OPENED && phase == PHASE_NETWORK)
|
||||
pconnect = "PPP";
|
||||
else
|
||||
pconnect = "ppp";
|
||||
printf("%s%s%s> ", pconnect, pauth, VarShortHost);
|
||||
fflush(stdout);
|
||||
}
|
||||
|
||||
@ -425,6 +442,7 @@ char **argv;
|
||||
if (argc > 0) {
|
||||
Cleanup(EX_NORMAL);
|
||||
} else {
|
||||
VarLocalAuth = LOCAL_NO_AUTH;
|
||||
close(netfd);
|
||||
close(1);
|
||||
netfd = -1;
|
||||
@ -449,25 +467,22 @@ DownCommand()
|
||||
return(1);
|
||||
}
|
||||
|
||||
static int validspeed[] = {
|
||||
1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200, 0
|
||||
};
|
||||
|
||||
static int SetModemSpeed(list, argc, argv)
|
||||
struct cmdtab *list;
|
||||
int argc;
|
||||
char **argv;
|
||||
{
|
||||
int speed;
|
||||
int *sp;
|
||||
|
||||
if (argc > 0) {
|
||||
if (strcmp(*argv, "sync") == 0) {
|
||||
VarSpeed = 0;
|
||||
return(1);
|
||||
}
|
||||
speed = atoi(*argv);
|
||||
for (sp = validspeed; *sp; sp++) {
|
||||
if (*sp == speed) {
|
||||
VarSpeed = speed;
|
||||
return(1);
|
||||
}
|
||||
if (IntToSpeed(speed) != B0) {
|
||||
VarSpeed = speed;
|
||||
return(1);
|
||||
}
|
||||
printf("invalid speed.\n");
|
||||
}
|
||||
@ -567,8 +582,16 @@ char **argv;
|
||||
{
|
||||
if (argc-- > 0) {
|
||||
VarIdleTimeout = atoi(*argv++);
|
||||
if (argc > 0)
|
||||
VarLqrTimeout = atoi(*argv);
|
||||
if (argc-- > 0) {
|
||||
VarLqrTimeout = atoi(*argv++);
|
||||
if (VarLqrTimeout < 1)
|
||||
VarLqrTimeout = 30;
|
||||
if (argc > 0) {
|
||||
VarRetryTimeout = atoi(*argv);
|
||||
if (VarRetryTimeout < 1 || VarRetryTimeout > 10)
|
||||
VarRetryTimeout = 3;
|
||||
}
|
||||
}
|
||||
}
|
||||
return(1);
|
||||
}
|
||||
@ -620,7 +643,7 @@ char **argv;
|
||||
DefHisAddress.width = 0;
|
||||
}
|
||||
|
||||
if ((mode & MODE_AUTO) |
|
||||
if ((mode & MODE_AUTO) ||
|
||||
((mode & MODE_DEDICATED) && dstsystem)) {
|
||||
OsSetIpaddress(DefMyAddress.ipaddr, DefHisAddress.ipaddr, ifnetmask);
|
||||
}
|
||||
@ -693,47 +716,49 @@ char **argv;
|
||||
static char StrChatStr[] = "chat-script";
|
||||
static char StrValue[] = "value";
|
||||
|
||||
extern int SetIfilter(), SetOfilter(), SetDfilter();
|
||||
extern int SetIfilter(), SetOfilter(), SetDfilter(), SetAfilter();
|
||||
|
||||
struct cmdtab SetCommands[] = {
|
||||
{ "accmap", NULL, SetVariable, "Set accmap value",
|
||||
"hex-value", (void *)VAR_ACCMAP },
|
||||
{ "authkey", "key", SetVariable, "Set authentication key",
|
||||
"key", (void *)VAR_AUTHKEY },
|
||||
{ "authname", NULL, SetVariable, "Set authentication name",
|
||||
"name", (void *)VAR_AUTHNAME },
|
||||
{ "debug", NULL, SetDebugLevel, "Set debug level",
|
||||
StrValue },
|
||||
{ "device", "line", SetVariable, "Set modem device name",
|
||||
"device-name", (void *)VAR_DEVICE },
|
||||
{ "dfilter", NULL, SetDfilter, "Set demand filter",
|
||||
"..." },
|
||||
{ "dial", NULL, SetVariable, "Set dialing script",
|
||||
StrChatStr, (void *)VAR_DIAL },
|
||||
{ "escape", NULL, SetEscape, "Set escape characters",
|
||||
"hex-digit ..."},
|
||||
{ "ifaddr", NULL, SetInterfaceAddr, "Set destination address",
|
||||
"src-addr dst-addr netmask" },
|
||||
{ "ifilter", NULL, SetIfilter, "Set input filter",
|
||||
"..." },
|
||||
{ "login", NULL, SetVariable, "Set login script",
|
||||
StrChatStr, (void *)VAR_LOGIN },
|
||||
{ "mru", "mtu", SetInitialMRU, "Set Initial MRU value",
|
||||
StrValue },
|
||||
{ "ofilter", NULL, SetOfilter, "Set output filter",
|
||||
"..." },
|
||||
{ "openmode", NULL, SetOpenMode, "Set open mode",
|
||||
"[active|passive]" },
|
||||
{ "parity", NULL, SetModemParity, "Set modem parity",
|
||||
"[odd|even|none]" },
|
||||
{ "phone", NULL, SetVariable, "Set telephone number",
|
||||
"phone-number", (void *)VAR_PHONE },
|
||||
{ "speed", NULL, SetModemSpeed, "Set modem speed",
|
||||
"speed" },
|
||||
{ "timeout", NULL, SetIdleTimeout, "Set Idle timeout",
|
||||
StrValue },
|
||||
{ "help", "?", HelpCommand, "Display this message",
|
||||
StrNull, (void *)SetCommands },
|
||||
{ "accmap", NULL, SetVariable, LOCAL_AUTH,
|
||||
"Set accmap value", "hex-value", (void *)VAR_ACCMAP},
|
||||
{ "afilter", NULL, SetAfilter, LOCAL_AUTH,
|
||||
"Set keep Alive filter", "..."},
|
||||
{ "authkey", "key", SetVariable, LOCAL_AUTH,
|
||||
"Set authentication key", "key", (void *)VAR_AUTHKEY},
|
||||
{ "authname", NULL, SetVariable, LOCAL_AUTH,
|
||||
"Set authentication name", "name", (void *)VAR_AUTHNAME},
|
||||
{ "debug", NULL, SetDebugLevel, LOCAL_AUTH,
|
||||
"Set debug level", StrValue},
|
||||
{ "device", "line", SetVariable, LOCAL_AUTH,
|
||||
"Set modem device name", "device-name", (void *)VAR_DEVICE},
|
||||
{ "dfilter", NULL, SetDfilter, LOCAL_AUTH,
|
||||
"Set demand filter", "..."},
|
||||
{ "dial", NULL, SetVariable, LOCAL_AUTH,
|
||||
"Set dialing script", StrChatStr, (void *)VAR_DIAL},
|
||||
{ "escape", NULL, SetEscape, LOCAL_AUTH,
|
||||
"Set escape characters", "hex-digit ..."},
|
||||
{ "ifaddr", NULL, SetInterfaceAddr, LOCAL_AUTH,
|
||||
"Set destination address", "src-addr dst-addr netmask"},
|
||||
{ "ifilter", NULL, SetIfilter, LOCAL_AUTH,
|
||||
"Set input filter", "..."},
|
||||
{ "login", NULL, SetVariable, LOCAL_AUTH,
|
||||
"Set login script", StrChatStr, (void *)VAR_LOGIN },
|
||||
{ "mru", "mtu", SetInitialMRU, LOCAL_AUTH,
|
||||
"Set Initial MRU value", StrValue },
|
||||
{ "ofilter", NULL, SetOfilter, LOCAL_AUTH,
|
||||
"Set output filter", "..." },
|
||||
{ "openmode", NULL, SetOpenMode, LOCAL_AUTH,
|
||||
"Set open mode", "[active|passive]"},
|
||||
{ "parity", NULL, SetModemParity, LOCAL_AUTH,
|
||||
"Set modem parity", "[odd|even|none]"},
|
||||
{ "phone", NULL, SetVariable, LOCAL_AUTH,
|
||||
"Set telephone number", "phone-number", (void *)VAR_PHONE },
|
||||
{ "speed", NULL, SetModemSpeed, LOCAL_AUTH,
|
||||
"Set modem speed", "speed"},
|
||||
{ "timeout", NULL, SetIdleTimeout, LOCAL_AUTH,
|
||||
"Set Idle timeout", StrValue},
|
||||
{ "help", "?", HelpCommand, LOCAL_AUTH | LOCAL_NO_AUTH,
|
||||
"Display this message", StrNull, (void *)SetCommands},
|
||||
{ NULL, NULL, NULL },
|
||||
};
|
||||
|
||||
|
@ -24,6 +24,7 @@ struct cmdtab {
|
||||
char *name;
|
||||
char *alias;
|
||||
int (*func)();
|
||||
u_char lauth;
|
||||
char *helpmes;
|
||||
char *syntax;
|
||||
void *args;
|
||||
|
@ -29,6 +29,7 @@
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <termios.h>
|
||||
#include "mbuf.h"
|
||||
#include "log.h"
|
||||
|
||||
@ -36,7 +37,11 @@
|
||||
* Check follwiing definitions for your machine envirinment
|
||||
*/
|
||||
#define LOGFILE "/var/log/ppp.log" /* Name of log file */
|
||||
#ifdef __FreeBSD__
|
||||
#define MODEM_DEV "/dev/cua01" /* name of tty device */
|
||||
#else
|
||||
#define MODEM_DEV "/dev/tty01" /* name of tty device */
|
||||
#endif
|
||||
#define MODEM_SPEED B38400 /* tty speed */
|
||||
#define SERVER_PORT 3000 /* Base server port no. */
|
||||
|
||||
@ -74,4 +79,11 @@ int tun_in, tun_out;
|
||||
int netfd;
|
||||
char *dstsystem;
|
||||
|
||||
#ifndef TRUE
|
||||
#define TRUE (1)
|
||||
#endif
|
||||
#ifndef FALSE
|
||||
#define FALSE (0)
|
||||
#endif
|
||||
|
||||
#endif /* _DEFS_H_ */
|
||||
|
@ -16,9 +16,9 @@
|
||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* $Id: filter.c,v 1.1.1.1 1995/01/31 06:29:57 amurai Exp $
|
||||
*
|
||||
*
|
||||
* $Id:$
|
||||
*
|
||||
* TODO: Shoud send ICMP error message when we discard packets.
|
||||
*/
|
||||
|
||||
@ -326,9 +326,9 @@ struct filterent *ofp;
|
||||
argc--; argv++;
|
||||
}
|
||||
proto = ParseProto(argc, argv);
|
||||
}
|
||||
if (proto) {
|
||||
argc--; argv++;
|
||||
if (proto) {
|
||||
argc--; argv++;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
printf("Address/protocol expected.\n");
|
||||
@ -409,6 +409,19 @@ char **argv;
|
||||
return(1);
|
||||
}
|
||||
|
||||
int
|
||||
SetAfilter(list, argc, argv)
|
||||
struct cmdtab *list;
|
||||
int argc;
|
||||
char **argv;
|
||||
{
|
||||
if (argc > 0)
|
||||
(void) Parse(argc, argv, afilters);
|
||||
else
|
||||
printf("syntax error.\n");
|
||||
return(1);
|
||||
}
|
||||
|
||||
static char *protoname[] = {
|
||||
"none", "tcp", "udp", "icmp",
|
||||
};
|
||||
@ -474,3 +487,13 @@ char **argv;
|
||||
ShowFilter(dfilters);
|
||||
return(1);
|
||||
}
|
||||
|
||||
int
|
||||
ShowAfilter(list, argc, argv)
|
||||
struct cmdtab *list;
|
||||
int argc;
|
||||
char **argv;
|
||||
{
|
||||
ShowFilter(afilters);
|
||||
return(1);
|
||||
}
|
||||
|
@ -73,5 +73,6 @@ struct filterent {
|
||||
struct filterent ifilters[MAXFILTERS];
|
||||
struct filterent ofilters[MAXFILTERS];
|
||||
struct filterent dfilters[MAXFILTERS];
|
||||
struct filterent afilters[MAXFILTERS]; /* keep Alive packet filter */
|
||||
|
||||
#endif _FILTER_H_
|
||||
|
@ -16,9 +16,9 @@
|
||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*
|
||||
* $Id:$
|
||||
*
|
||||
*
|
||||
* TODO:
|
||||
* o Refer loglevel for log output
|
||||
* o Better option log display
|
||||
@ -229,6 +229,7 @@ u_char *option;
|
||||
int count;
|
||||
{
|
||||
LogPrintf(LOG_LCP, "%s: SendConfigAck(%s)\n", fp->name, StateNames[fp->state]);
|
||||
(fp->DecodeConfig)(option, count, MODE_NOP);
|
||||
FsmOutput(fp, CODE_CONFIGACK, lhp->id, option, count);
|
||||
}
|
||||
|
||||
@ -240,6 +241,7 @@ u_char *option;
|
||||
int count;
|
||||
{
|
||||
LogPrintf(LOG_LCP, "%s: SendConfigRej(%s)\n", fp->name, StateNames[fp->state]);
|
||||
(fp->DecodeConfig)(option, count, MODE_NOP);
|
||||
FsmOutput(fp, CODE_CONFIGREJ, lhp->id, option, count);
|
||||
}
|
||||
|
||||
@ -252,6 +254,7 @@ int count;
|
||||
{
|
||||
LogPrintf(LOG_LCP, "%s: SendConfigNak(%s)\n",
|
||||
fp->name, StateNames[fp->state]);
|
||||
(fp->DecodeConfig)(option, count, MODE_NOP);
|
||||
FsmOutput(fp, CODE_CONFIGNAK, lhp->id, option, count);
|
||||
}
|
||||
|
||||
@ -318,16 +321,18 @@ struct fsm *fp;
|
||||
struct fsmheader *lhp;
|
||||
struct mbuf *bp;
|
||||
{
|
||||
int plen;
|
||||
int plen, flen;
|
||||
int ackaction = 0;
|
||||
|
||||
plen = plength(bp);
|
||||
if (plen < sizeof(struct fsmconfig)) {
|
||||
logprintf("** plen = %d\n", plen);
|
||||
flen = ntohs(lhp->length) - sizeof(*lhp);
|
||||
if (plen < flen) {
|
||||
logprintf("** plen (%d) < flen (%d)\n", plen, flen);
|
||||
pfree(bp);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Check and process easy case
|
||||
*/
|
||||
@ -349,7 +354,7 @@ logprintf("## state = %d\n", fp->state);
|
||||
return;
|
||||
}
|
||||
|
||||
(fp->DecodeConfig)(bp, MODE_REQ);
|
||||
(fp->DecodeConfig)(MBUF_CTOP(bp), flen, MODE_REQ);
|
||||
|
||||
if (nakp == NakBuff && rejp == RejBuff)
|
||||
ackaction = 1;
|
||||
@ -440,10 +445,11 @@ struct fsm *fp;
|
||||
struct fsmheader *lhp;
|
||||
struct mbuf *bp;
|
||||
{
|
||||
int plen;
|
||||
int plen, flen;
|
||||
|
||||
plen = plength(bp);
|
||||
if (plen < sizeof(struct fsmconfig)) {
|
||||
flen = ntohs(lhp->length) - sizeof(*lhp);
|
||||
if (plen < flen) {
|
||||
pfree(bp);
|
||||
return;
|
||||
}
|
||||
@ -469,7 +475,7 @@ struct mbuf *bp;
|
||||
return;
|
||||
}
|
||||
|
||||
(fp->DecodeConfig)(bp, MODE_NAK);
|
||||
(fp->DecodeConfig)(MBUF_CTOP(bp), flen, MODE_NAK);
|
||||
|
||||
switch (fp->state) {
|
||||
case ST_REQSENT:
|
||||
@ -556,10 +562,11 @@ struct fsm *fp;
|
||||
struct fsmheader *lhp;
|
||||
struct mbuf *bp;
|
||||
{
|
||||
int plen;
|
||||
int plen, flen;
|
||||
|
||||
plen = plength(bp);
|
||||
if (plen < sizeof(struct fsmconfig)) {
|
||||
flen = ntohs(lhp->length) - sizeof(*lhp);
|
||||
if (plen < flen) {
|
||||
pfree(bp);
|
||||
return;
|
||||
}
|
||||
@ -586,7 +593,7 @@ struct mbuf *bp;
|
||||
return;
|
||||
}
|
||||
|
||||
(fp->DecodeConfig)(bp, MODE_REJ);
|
||||
(fp->DecodeConfig)(MBUF_CTOP(bp), flen, MODE_REJ);
|
||||
|
||||
switch (fp->state) {
|
||||
case ST_REQSENT:
|
||||
@ -791,7 +798,7 @@ struct mbuf *bp;
|
||||
|
||||
codep = FsmCodes + lhp->code - 1;
|
||||
LogPrintf(LOG_LCP, "%s: Received %s (%d) state = %s (%d)\n",
|
||||
fp->name, codep->name, lhp->code, StateNames[fp->state], fp->state);
|
||||
fp->name, codep->name, lhp->id, StateNames[fp->state], fp->state);
|
||||
#ifdef DEBUG
|
||||
LogMemory();
|
||||
#endif
|
||||
|
@ -19,12 +19,14 @@
|
||||
*
|
||||
* TODO:
|
||||
*/
|
||||
|
||||
#ifndef _FSM_H_
|
||||
#define _FSM_H_
|
||||
|
||||
#include "defs.h"
|
||||
#include <netinet/in.h>
|
||||
#include "timeout.h"
|
||||
#include "cdefs.h"
|
||||
|
||||
/*
|
||||
* State of machine
|
||||
@ -46,6 +48,7 @@
|
||||
#define MODE_REQ 0
|
||||
#define MODE_NAK 1
|
||||
#define MODE_REJ 2
|
||||
#define MODE_NOP 3
|
||||
|
||||
#define OPEN_ACTIVE 0
|
||||
#define OPEN_PASSIVE 1
|
||||
@ -63,15 +66,15 @@ struct fsm {
|
||||
int reqcode; /* Request code sent */
|
||||
struct pppTimer FsmTimer; /* Restart Timer */
|
||||
|
||||
void (*LayerUp)();
|
||||
void (*LayerDown)();
|
||||
void (*LayerStart)();
|
||||
void (*LayerFinish)();
|
||||
void (*InitRestartCounter)();
|
||||
void (*SendConfigReq)();
|
||||
void (*SendTerminateReq)();
|
||||
void (*SendTerminateAck)();
|
||||
void (*DecodeConfig)();
|
||||
void (*LayerUp) __P((struct fsm *));
|
||||
void (*LayerDown) __P((struct fsm *));
|
||||
void (*LayerStart) __P((struct fsm *));
|
||||
void (*LayerFinish) __P((struct fsm *));
|
||||
void (*InitRestartCounter) __P((struct fsm *));
|
||||
void (*SendConfigReq) __P((struct fsm *));
|
||||
void (*SendTerminateReq) __P((struct fsm *));
|
||||
void (*SendTerminateAck) __P((struct fsm *));
|
||||
void (*DecodeConfig) __P((u_char *, int, int));
|
||||
};
|
||||
|
||||
struct fsmheader {
|
||||
@ -97,7 +100,7 @@ struct fsmheader {
|
||||
#define CODE_RESETACK 15 /* Used in CCP */
|
||||
|
||||
struct fsmcodedesc {
|
||||
void (*action)();
|
||||
void (*action) __P((struct fsm *, struct fsmheader *, struct mbuf *));
|
||||
char *name;
|
||||
};
|
||||
|
||||
@ -114,20 +117,20 @@ u_char ReqBuff[200];
|
||||
u_char *ackp, *nakp, *rejp;
|
||||
|
||||
extern char *StateNames[];
|
||||
extern void FsmInit(struct fsm *);
|
||||
extern void NewState(struct fsm *, int);
|
||||
extern void FsmOutput(struct fsm *, u_int, u_int, u_char *, int);
|
||||
extern void FsmOpen(struct fsm *);
|
||||
extern void FsmUp(struct fsm *);
|
||||
extern void FsmDown(struct fsm *);
|
||||
extern void FsmInput(struct fsm *, struct mbuf *);
|
||||
extern void FsmInit __P((struct fsm *));
|
||||
extern void NewState __P((struct fsm *, int));
|
||||
extern void FsmOutput __P((struct fsm *, u_int, u_int, u_char *, int));
|
||||
extern void FsmOpen __P((struct fsm *));
|
||||
extern void FsmUp __P((struct fsm *));
|
||||
extern void FsmDown __P((struct fsm *));
|
||||
extern void FsmInput __P((struct fsm *, struct mbuf *));
|
||||
|
||||
extern void FsmRecvConfigReq(struct fsm *, struct fsmheader *, struct mbuf *);
|
||||
extern void FsmRecvConfigAck(struct fsm *, struct fsmheader *, struct mbuf *);
|
||||
extern void FsmRecvConfigNak(struct fsm *, struct fsmheader *, struct mbuf *);
|
||||
extern void FsmRecvTermReq(struct fsm *, struct fsmheader *, struct mbuf *);
|
||||
extern void FsmRecvTermAck(struct fsm *, struct fsmheader *, struct mbuf *);
|
||||
extern void FsmClose(struct fsm *fp);
|
||||
extern void FsmRecvConfigReq __P((struct fsm *, struct fsmheader *, struct mbuf *));
|
||||
extern void FsmRecvConfigAck __P((struct fsm *, struct fsmheader *, struct mbuf *));
|
||||
extern void FsmRecvConfigNak __P((struct fsm *, struct fsmheader *, struct mbuf *));
|
||||
extern void FsmRecvTermReq __P((struct fsm *, struct fsmheader *, struct mbuf *));
|
||||
extern void FsmRecvTermAck __P((struct fsm *, struct fsmheader *, struct mbuf *));
|
||||
extern void FsmClose __P((struct fsm *fp));
|
||||
|
||||
extern struct fsm LcpFsm, IpcpFsm, CcpFsm;
|
||||
|
||||
|
@ -1,6 +1,4 @@
|
||||
/*
|
||||
* GLOBAL.H - RSAREF types and constants
|
||||
*
|
||||
* Written by Toshiharu OHNO (tony-o@iij.ad.jp)
|
||||
*
|
||||
* Copyright (C) 1993, Internet Initiative Japan, Inc. All rights reserverd.
|
||||
@ -22,10 +20,14 @@
|
||||
* TODO:
|
||||
*/
|
||||
|
||||
/*
|
||||
* GLOBAL.H - RSAREF types and constants
|
||||
*/
|
||||
|
||||
/* PROTOTYPES should be set to one if and only if the compiler supports
|
||||
function argument prototyping.
|
||||
The following makes PROTOTYPES default to 0 if it has not already
|
||||
been defined with C compiler flags.
|
||||
function argument prototyping.
|
||||
The following makes PROTOTYPES default to 0 if it has not already
|
||||
been defined with C compiler flags.
|
||||
*/
|
||||
#ifndef PROTOTYPES
|
||||
#define PROTOTYPES 0
|
||||
|
@ -16,9 +16,9 @@
|
||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*
|
||||
* $Id:$
|
||||
*
|
||||
*
|
||||
* TODO:
|
||||
*/
|
||||
#include "fsm.h"
|
||||
@ -26,6 +26,7 @@
|
||||
#include "lcpproto.h"
|
||||
#include "lcp.h"
|
||||
#include "lqr.h"
|
||||
#include "vars.h"
|
||||
|
||||
struct hdlcstat {
|
||||
int badfcs;
|
||||
@ -129,7 +130,10 @@ HdlcOutput(int pri, u_short proto, struct mbuf *bp)
|
||||
return;
|
||||
}
|
||||
}
|
||||
mfcs = mballoc(2, MB_HDLCOUT);
|
||||
if (DEV_IS_SYNC)
|
||||
mfcs = NULLBUFF;
|
||||
else
|
||||
mfcs = mballoc(2, MB_HDLCOUT);
|
||||
mhp = mballoc(4, MB_HDLCOUT);
|
||||
mhp->cnt = 0;
|
||||
cp = MBUF_CTOP(mhp);
|
||||
@ -172,19 +176,24 @@ HdlcOutput(int pri, u_short proto, struct mbuf *bp)
|
||||
LqrChangeOrder(lqr, (struct lqrdata *)(MBUF_CTOP(bp)));
|
||||
}
|
||||
|
||||
fcs = HdlcFcs(INITFCS, MBUF_CTOP(mhp), mhp->cnt);
|
||||
fcs = HdlcFcs(fcs, MBUF_CTOP(bp), bp->cnt);
|
||||
fcs = ~fcs;
|
||||
cp = MBUF_CTOP(mfcs);
|
||||
*cp++ = fcs & 0377; /* Low byte first!! */
|
||||
*cp++ = fcs >> 8;
|
||||
if (!DEV_IS_SYNC) {
|
||||
fcs = HdlcFcs(INITFCS, MBUF_CTOP(mhp), mhp->cnt);
|
||||
fcs = HdlcFcs(fcs, MBUF_CTOP(bp), bp->cnt);
|
||||
fcs = ~fcs;
|
||||
cp = MBUF_CTOP(mfcs);
|
||||
*cp++ = fcs & 0377; /* Low byte first!! */
|
||||
*cp++ = fcs >> 8;
|
||||
}
|
||||
|
||||
LogDumpBp(LOG_HDLC, "HdlcOutput", mhp);
|
||||
for (statp = ProtocolStat; statp->number; statp++)
|
||||
if (statp->number == proto)
|
||||
break;
|
||||
statp->out_count++;
|
||||
AsyncOutput(pri, mhp, proto);
|
||||
if (DEV_IS_SYNC)
|
||||
ModemOutput(pri, mhp);
|
||||
else
|
||||
AsyncOutput(pri, mhp, proto);
|
||||
}
|
||||
|
||||
DecodePacket(proto, bp)
|
||||
@ -211,6 +220,9 @@ struct mbuf *bp;
|
||||
case PROTO_VJUNCOMP:
|
||||
case PROTO_VJCOMP:
|
||||
bp = VjCompInput(bp, proto);
|
||||
if (bp == NULLBUFF) {
|
||||
break;
|
||||
}
|
||||
/* fall down */
|
||||
case PROTO_IP:
|
||||
IpInput(bp);
|
||||
@ -295,7 +307,10 @@ HdlcInput(struct mbuf *bp)
|
||||
struct protostat *statp;
|
||||
|
||||
LogDumpBp(LOG_HDLC, "HdlcInput:", bp);
|
||||
fcs = HdlcFcs(INITFCS, MBUF_CTOP(bp), bp->cnt);
|
||||
if (DEV_IS_SYNC)
|
||||
fcs = GOODFCS;
|
||||
else
|
||||
fcs = HdlcFcs(INITFCS, MBUF_CTOP(bp), bp->cnt);
|
||||
HisLqrSave.SaveInOctets += bp->cnt + 1;
|
||||
|
||||
#ifdef DEBUG
|
||||
@ -310,7 +325,8 @@ HdlcInput(struct mbuf *bp)
|
||||
pfree(bp);
|
||||
return;
|
||||
}
|
||||
bp->cnt -= 2; /* discard FCS part */
|
||||
if (!DEV_IS_SYNC)
|
||||
bp->cnt -= 2; /* discard FCS part */
|
||||
cp = MBUF_CTOP(bp);
|
||||
|
||||
ifInPackets++;
|
||||
|
@ -51,8 +51,9 @@
|
||||
|
||||
unsigned char EscMap[33];
|
||||
|
||||
void HdlcInput(struct mbuf *bp);
|
||||
void HdlcOutput(int pri, u_short proto, struct mbuf *bp);
|
||||
void AsyncOutput(int pri, struct mbuf *bp, int proto);
|
||||
void HdlcInit __P((void));
|
||||
void HdlcInput __P((struct mbuf *bp));
|
||||
void HdlcOutput __P((int pri, u_short proto, struct mbuf *bp));
|
||||
void AsyncOutput __P((int pri, struct mbuf *bp, int proto));
|
||||
|
||||
#endif
|
||||
|
@ -16,9 +16,9 @@
|
||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*
|
||||
* $Id:$
|
||||
*
|
||||
*
|
||||
* TODO:
|
||||
* o Return ICMP message for filterd packet
|
||||
* and optionaly record it into log.
|
||||
@ -34,7 +34,7 @@
|
||||
#include "vars.h"
|
||||
#include "filter.h"
|
||||
|
||||
extern void SendPppFlame();
|
||||
extern void SendPppFrame();
|
||||
extern int PacketCheck();
|
||||
extern void LcpClose();
|
||||
|
||||
@ -74,8 +74,8 @@ StopIdleTimer()
|
||||
static void
|
||||
RestartIdleTimer()
|
||||
{
|
||||
if (!(mode & MODE_DEDICATED)) {
|
||||
StopTimer(&IdleTimer);
|
||||
if (!(mode & MODE_DEDICATED) && ipKeepAlive ) {
|
||||
/* StopTimer(&IdleTimer); */
|
||||
StartTimer(&IdleTimer);
|
||||
ipIdleSecs = 0;
|
||||
}
|
||||
@ -91,8 +91,8 @@ static char *TcpFlags[] = {
|
||||
"FIN", "SYN", "RST", "PSH", "ACK", "URG",
|
||||
};
|
||||
|
||||
static char *Direction[] = { "INP", "OUT", "OUT" };
|
||||
static struct filterent *Filters[] = { ifilters, ofilters, dfilters };
|
||||
static char *Direction[] = { "INP", "OUT", "OUT", "IN/OUT" };
|
||||
static struct filterent *Filters[] = { ifilters, ofilters, dfilters, afilters };
|
||||
|
||||
static int
|
||||
PortMatch(op, pport, rport)
|
||||
@ -155,6 +155,10 @@ logprintf("rule = %d\n", n);
|
||||
cproto = P_TCP; th = (struct tcphdr *)ptop;
|
||||
sport = ntohs(th->th_sport); dport = ntohs(th->th_dport);
|
||||
estab = (th->th_flags & TH_ACK);
|
||||
#ifdef DEBUG
|
||||
if (estab == 0)
|
||||
logprintf("flag = %02x, sport = %d, dport = %d\n", th->th_flags, sport, dport);
|
||||
#endif
|
||||
break;
|
||||
default:
|
||||
return(A_DENY); /* We'll block unknown type of packet */
|
||||
@ -163,8 +167,6 @@ logprintf("rule = %d\n", n);
|
||||
#ifdef DEBUG
|
||||
logprintf("dir = %d, proto = %d, srcop = %d, dstop = %d, estab = %d\n",
|
||||
direction, cproto, fp->opt.srcop, fp->opt.dstop, estab);
|
||||
if (estab == 0)
|
||||
logprintf("flag = %02x, sport = %d, dport = %d\n", th->th_flags, sport, dport);
|
||||
#endif
|
||||
}
|
||||
#ifdef DEBUG
|
||||
@ -211,7 +213,7 @@ int code;
|
||||
if (pip->ip_p != IPPROTO_ICMP) {
|
||||
bp = mballoc(cnt, MB_IPIN);
|
||||
bcopy(ptr, MBUF_CTOP(bp), cnt);
|
||||
SendPppFlame(PRI_URGENT, bp);
|
||||
SendPppFrame(PRI_URGENT, bp);
|
||||
RestartIdleTimer();
|
||||
ipOutOctets += cnt;
|
||||
}
|
||||
@ -299,6 +301,11 @@ int direction;
|
||||
if (direction == 0) IcmpError(pip, pri);
|
||||
return(-1);
|
||||
} else {
|
||||
if ( FilterCheck(pip, 3) & A_DENY ) { /* Check Keep Alive filter */
|
||||
ipKeepAlive = FALSE;
|
||||
} else {
|
||||
ipKeepAlive = TRUE;
|
||||
}
|
||||
return(pri);
|
||||
}
|
||||
}
|
||||
@ -352,7 +359,7 @@ int cnt; /* IN: Length of packet */
|
||||
if (pri >= 0) {
|
||||
bp = mballoc(cnt, MB_IPIN);
|
||||
bcopy(ptr, MBUF_CTOP(bp), cnt);
|
||||
SendPppFlame(pri, bp);
|
||||
SendPppFrame(pri, bp);
|
||||
RestartIdleTimer();
|
||||
ipOutOctets += cnt;
|
||||
}
|
||||
@ -388,7 +395,7 @@ IpStartOutput()
|
||||
bp = Dequeue(queue);
|
||||
if (bp) {
|
||||
cnt = plength(bp);
|
||||
SendPppFlame(pri, bp);
|
||||
SendPppFrame(pri, bp);
|
||||
RestartIdleTimer();
|
||||
ipOutOctets += cnt;
|
||||
}
|
||||
|
@ -18,7 +18,7 @@
|
||||
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* $Id:$
|
||||
*
|
||||
*
|
||||
* TODO:
|
||||
* o More RFC1772 backwoard compatibility
|
||||
*/
|
||||
@ -43,15 +43,15 @@ extern struct in_addr ifnetmask;
|
||||
struct ipcpstate IpcpInfo;
|
||||
struct in_range DefMyAddress, DefHisAddress;
|
||||
|
||||
static void IpcpSendConfigReq(struct fsm *);
|
||||
static void IpcpSendTerminateAck(struct fsm *);
|
||||
static void IpcpSendTerminateReq(struct fsm *);
|
||||
static void IpcpDecodeConfig();
|
||||
static void IpcpLayerStart(struct fsm *);
|
||||
static void IpcpLayerFinish(struct fsm *);
|
||||
static void IpcpLayerUp(struct fsm *);
|
||||
static void IpcpLayerDown(struct fsm *);
|
||||
static void IpcpInitRestartCounter(struct fsm *);
|
||||
static void IpcpSendConfigReq __P((struct fsm *));
|
||||
static void IpcpSendTerminateAck __P((struct fsm *));
|
||||
static void IpcpSendTerminateReq __P((struct fsm *));
|
||||
static void IpcpDecodeConfig __P((u_char *, int, int));
|
||||
static void IpcpLayerStart __P((struct fsm *));
|
||||
static void IpcpLayerFinish __P((struct fsm *));
|
||||
static void IpcpLayerUp __P((struct fsm *));
|
||||
static void IpcpLayerDown __P((struct fsm *));
|
||||
static void IpcpInitRestartCounter __P((struct fsm *));
|
||||
|
||||
static struct pppTimer IpcpReportTimer;
|
||||
|
||||
@ -174,7 +174,7 @@ static void
|
||||
IpcpInitRestartCounter(fp)
|
||||
struct fsm *fp;
|
||||
{
|
||||
fp->FsmTimer.load = 3 * SECTICKS;
|
||||
fp->FsmTimer.load = VarRetryTimeout * SECTICKS;
|
||||
fp->restart = 5;
|
||||
}
|
||||
|
||||
@ -187,7 +187,8 @@ struct fsm *fp;
|
||||
|
||||
cp = ReqBuff;
|
||||
LogPrintf(LOG_LCP, "%s: SendConfigReq\n", fp->name);
|
||||
PutConfValue(&cp, cftypes, TY_IPADDR, 6, ntohl(icp->want_ipaddr.s_addr));
|
||||
if (!DEV_IS_SYNC || !REJECTED(icp, TY_IPADDR))
|
||||
PutConfValue(&cp, cftypes, TY_IPADDR, 6, ntohl(icp->want_ipaddr.s_addr));
|
||||
if (icp->want_compproto && !REJECTED(icp, TY_COMPPROTO)) {
|
||||
if (icp->heis1172)
|
||||
PutConfValue(&cp, cftypes, TY_COMPPROTO, 4, icp->want_compproto >> 16);
|
||||
@ -288,20 +289,17 @@ struct in_addr ipaddr;
|
||||
}
|
||||
|
||||
static void
|
||||
IpcpDecodeConfig(bp, mode)
|
||||
struct mbuf *bp;
|
||||
IpcpDecodeConfig(cp, plen, mode)
|
||||
u_char *cp;
|
||||
int plen;
|
||||
int mode;
|
||||
{
|
||||
u_char *cp;
|
||||
int plen, type, length;
|
||||
int type, length;
|
||||
u_long *lp, compproto;
|
||||
struct compreq *pcomp;
|
||||
struct in_addr ipaddr, dstipaddr;
|
||||
char tbuff[100];
|
||||
|
||||
plen = plength(bp);
|
||||
|
||||
cp = MBUF_CTOP(bp);
|
||||
ackp = AckBuff;
|
||||
nakp = NakBuff;
|
||||
rejp = RejBuff;
|
||||
|
@ -57,6 +57,6 @@ extern struct ipcpstate IpcpInfo;
|
||||
extern struct in_range DefMyAddress;
|
||||
extern struct in_range DefHisAddress;
|
||||
|
||||
extern void IpcpInit(void);
|
||||
extern void IpcpDefAddress();
|
||||
extern void IpcpInit __P((void));
|
||||
extern void IpcpDefAddress __P((void));
|
||||
#endif
|
||||
|
@ -16,16 +16,14 @@
|
||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*
|
||||
* $Id:$
|
||||
*
|
||||
*
|
||||
* TODO:
|
||||
* o Validate magic number received from peer.
|
||||
* o Limit data field length by MRU
|
||||
*/
|
||||
#if __FreeBSD__ >=2
|
||||
#include <sys/time.h>
|
||||
#endif
|
||||
#include "fsm.h"
|
||||
#include "lcp.h"
|
||||
#include "ipcp.h"
|
||||
@ -35,29 +33,29 @@
|
||||
#include "lqr.h"
|
||||
#include "phase.h"
|
||||
#include "vars.h"
|
||||
#include "auth.h"
|
||||
|
||||
extern void IpcpUp();
|
||||
extern void IpcpOpen();
|
||||
extern void SendPapChallenge();
|
||||
extern void SendChapChallenge();
|
||||
extern void StartPapChallenge();
|
||||
extern void StartChapChallenge();
|
||||
extern void SetLinkParams(struct lcpstate *);
|
||||
extern void Prompt();
|
||||
extern void StopIdleTimer();
|
||||
extern void HdlcInit();
|
||||
extern void OsLinkdown();
|
||||
extern void Cleanup();
|
||||
|
||||
struct lcpstate LcpInfo;
|
||||
|
||||
static void LcpSendConfigReq(struct fsm *);
|
||||
static void LcpSendTerminateReq(struct fsm *fp);
|
||||
static void LcpSendTerminateAck(struct fsm *fp);
|
||||
static void LcpDecodeConfig(struct mbuf *bp, int mode);
|
||||
static void LcpInitRestartCounter(struct fsm *);
|
||||
static void LcpLayerUp(struct fsm *);
|
||||
static void LcpLayerDown(struct fsm *);
|
||||
static void LcpLayerStart(struct fsm *);
|
||||
static void LcpLayerFinish(struct fsm *);
|
||||
static void LcpSendConfigReq __P((struct fsm *));
|
||||
static void LcpSendTerminateReq __P((struct fsm *fp));
|
||||
static void LcpSendTerminateAck __P((struct fsm *fp));
|
||||
static void LcpDecodeConfig __P((u_char *cp, int flen,int mode));
|
||||
static void LcpInitRestartCounter __P((struct fsm *));
|
||||
static void LcpLayerUp __P((struct fsm *));
|
||||
static void LcpLayerDown __P((struct fsm *));
|
||||
static void LcpLayerStart __P((struct fsm *));
|
||||
static void LcpLayerFinish __P((struct fsm *));
|
||||
|
||||
extern int ModemSpeed();
|
||||
|
||||
@ -111,9 +109,9 @@ int new;
|
||||
LogPrintf(LOG_PHASE, " his = %x, mine = %x\n", lcp->his_auth, lcp->want_auth);
|
||||
if (lcp->his_auth || lcp->want_auth) {
|
||||
if (lcp->his_auth == PROTO_PAP)
|
||||
SendPapChallenge();
|
||||
StartAuthChallenge(&AuthPapInfo);
|
||||
if (lcp->want_auth == PROTO_CHAP)
|
||||
SendChapChallenge();
|
||||
StartAuthChallenge(&AuthChapInfo);
|
||||
} else
|
||||
NewPhase(PHASE_NETWORK);
|
||||
break;
|
||||
@ -208,7 +206,7 @@ static void
|
||||
LcpInitRestartCounter(fp)
|
||||
struct fsm *fp;
|
||||
{
|
||||
fp->FsmTimer.load = 5 * SECTICKS;
|
||||
fp->FsmTimer.load = VarRetryTimeout * SECTICKS;
|
||||
fp->restart = 5;
|
||||
}
|
||||
|
||||
@ -250,18 +248,20 @@ struct fsm *fp;
|
||||
|
||||
LogPrintf(LOG_LCP, "%s: SendConfigReq\n", fp->name);
|
||||
cp = ReqBuff;
|
||||
if (lcp->want_acfcomp && !REJECTED(lcp, TY_ACFCOMP)) {
|
||||
*cp++ = TY_ACFCOMP; *cp++ = 2;
|
||||
LogPrintf(LOG_LCP, " %s\n", cftypes[TY_ACFCOMP]);
|
||||
}
|
||||
if (lcp->want_protocomp && !REJECTED(lcp, TY_PROTOCOMP)) {
|
||||
*cp++ = TY_PROTOCOMP; *cp++ = 2;
|
||||
LogPrintf(LOG_LCP, " %s\n", cftypes[TY_PROTOCOMP]);
|
||||
if (!DEV_IS_SYNC) {
|
||||
if (lcp->want_acfcomp && !REJECTED(lcp, TY_ACFCOMP)) {
|
||||
*cp++ = TY_ACFCOMP; *cp++ = 2;
|
||||
LogPrintf(LOG_LCP, " %s\n", cftypes[TY_ACFCOMP]);
|
||||
}
|
||||
if (lcp->want_protocomp && !REJECTED(lcp, TY_PROTOCOMP)) {
|
||||
*cp++ = TY_PROTOCOMP; *cp++ = 2;
|
||||
LogPrintf(LOG_LCP, " %s\n", cftypes[TY_PROTOCOMP]);
|
||||
}
|
||||
if (!REJECTED(lcp, TY_ACCMAP))
|
||||
PutConfValue(&cp, cftypes, TY_ACCMAP, 6, lcp->want_accmap);
|
||||
}
|
||||
if (!REJECTED(lcp, TY_MRU))
|
||||
PutConfValue(&cp, cftypes, TY_MRU, 4, lcp->want_mru);
|
||||
if (!REJECTED(lcp, TY_ACCMAP))
|
||||
PutConfValue(&cp, cftypes, TY_ACCMAP, 6, lcp->want_accmap);
|
||||
if (lcp->want_magic && !REJECTED(lcp, TY_MAGICNUM))
|
||||
PutConfValue(&cp, cftypes, TY_MAGICNUM, 6, lcp->want_magic);
|
||||
if (lcp->want_lqrperiod && !REJECTED(lcp, TY_QUALPROTO)) {
|
||||
@ -318,6 +318,15 @@ struct fsm *fp;
|
||||
NewPhase(PHASE_ESTABLISH);
|
||||
}
|
||||
|
||||
static void
|
||||
StopAllTimers()
|
||||
{
|
||||
StopTimer(&LcpReportTimer);
|
||||
StopIdleTimer();
|
||||
StopTimer(&AuthPapInfo.authtimer);
|
||||
StopTimer(&AuthChapInfo.authtimer);
|
||||
}
|
||||
|
||||
static void
|
||||
LcpLayerFinish(fp)
|
||||
struct fsm *fp;
|
||||
@ -333,8 +342,7 @@ struct fsm *fp;
|
||||
OsCloseLink(1);
|
||||
#endif
|
||||
NewPhase(PHASE_DEAD);
|
||||
StopTimer(&LcpReportTimer);
|
||||
StopIdleTimer();
|
||||
StopAllTimers();
|
||||
OsInterfaceDown(0);
|
||||
}
|
||||
|
||||
@ -361,6 +369,7 @@ LcpLayerDown(fp)
|
||||
struct fsm *fp;
|
||||
{
|
||||
LogPrintf(LOG_LCP, "%s: LayerDown\n", fp->name);
|
||||
StopAllTimers();
|
||||
OsLinkdown();
|
||||
NewPhase(PHASE_TERMINATE);
|
||||
}
|
||||
@ -372,9 +381,10 @@ LcpUp()
|
||||
}
|
||||
|
||||
void
|
||||
LcpDown()
|
||||
LcpDown() /* Sudden death */
|
||||
{
|
||||
NewPhase(PHASE_DEAD);
|
||||
StopAllTimers();
|
||||
FsmDown(&LcpFsm);
|
||||
}
|
||||
|
||||
@ -396,20 +406,17 @@ LcpClose()
|
||||
* XXX: Should validate option length
|
||||
*/
|
||||
static void
|
||||
LcpDecodeConfig(bp, mode)
|
||||
struct mbuf *bp;
|
||||
LcpDecodeConfig(cp, plen, mode)
|
||||
u_char *cp;
|
||||
int plen;
|
||||
int mode;
|
||||
{
|
||||
u_char *cp;
|
||||
char *request;
|
||||
int plen, type, length, mru;
|
||||
int type, length, mru;
|
||||
u_long *lp, magic, accmap;
|
||||
u_short *sp, proto;
|
||||
struct lqrreq *req;
|
||||
|
||||
plen = plength(bp);
|
||||
|
||||
cp = MBUF_CTOP(bp);
|
||||
ackp = AckBuff;
|
||||
nakp = NakBuff;
|
||||
rejp = RejBuff;
|
||||
@ -471,7 +478,7 @@ int mode;
|
||||
case TY_AUTHPROTO:
|
||||
sp = (u_short *)(cp + 2);
|
||||
proto = ntohs(*sp);
|
||||
LogPrintf(LOG_LCP, " %s proto = %x\n", request, proto);
|
||||
LogPrintf(LOG_LCP, " %s proto = %04x\n", request, proto);
|
||||
|
||||
switch (mode) {
|
||||
case MODE_REQ:
|
||||
@ -486,7 +493,7 @@ int mode;
|
||||
bcopy(cp, ackp, length); ackp += length;
|
||||
} else if (Acceptable(ConfChap)) {
|
||||
*nakp++ = *cp; *nakp++ = 5;
|
||||
*nakp++ = (unsigned char)PROTO_CHAP >> 8;
|
||||
*nakp++ = (unsigned char)(PROTO_CHAP >> 8);
|
||||
*nakp++ = (unsigned char)PROTO_CHAP;
|
||||
*nakp++ = 5;
|
||||
} else
|
||||
@ -502,7 +509,7 @@ int mode;
|
||||
bcopy(cp, ackp, length); ackp += length;
|
||||
} else if (Acceptable(ConfPap)) {
|
||||
*nakp++ = *cp; *nakp++ = 4;
|
||||
*nakp++ = (unsigned char)PROTO_PAP >> 8;
|
||||
*nakp++ = (unsigned char)(PROTO_PAP >> 8);
|
||||
*nakp++ = (unsigned char)PROTO_PAP;
|
||||
} else
|
||||
goto reqreject;
|
||||
@ -638,10 +645,13 @@ int mode;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
LogPrintf(LOG_LCP, " ???[%02x]\n", type);
|
||||
if (mode == MODE_REQ) {
|
||||
reqreject:
|
||||
bcopy(cp, rejp, length);
|
||||
rejp += length;
|
||||
LcpInfo.my_reject |= (1 << type);
|
||||
bcopy(cp, rejp, length);
|
||||
rejp += length;
|
||||
LcpInfo.my_reject |= (1 << type);
|
||||
}
|
||||
break;
|
||||
}
|
||||
plen -= length;
|
||||
|
@ -22,6 +22,7 @@
|
||||
|
||||
#ifndef _LCP_H_
|
||||
#define _LPC_H_
|
||||
#include "cdefs.h"
|
||||
|
||||
struct lcpstate {
|
||||
u_long his_mru;
|
||||
@ -74,10 +75,10 @@ struct lqrreq {
|
||||
|
||||
extern struct lcpstate LcpInfo;
|
||||
|
||||
extern void LcpInit(void);
|
||||
extern void LcpUp(void);
|
||||
extern void LcpSendProtoRej(u_char *, int);
|
||||
extern void LcpOpen(int mode);
|
||||
extern void LcpClose(void);
|
||||
extern void LcpDown(void);
|
||||
extern void LcpInit __P((void));
|
||||
extern void LcpUp __P((void));
|
||||
extern void LcpSendProtoRej __P((u_char *, int));
|
||||
extern void LcpOpen __P((int mode));
|
||||
extern void LcpClose __P((void));
|
||||
extern void LcpDown __P((void));
|
||||
#endif
|
||||
|
@ -22,6 +22,7 @@
|
||||
|
||||
#ifndef _LCPPROTO_H_
|
||||
#define _LCPPROTO_H_
|
||||
#include "cdefs.h"
|
||||
|
||||
/*
|
||||
* Definition of protocol numbers
|
||||
@ -41,12 +42,12 @@
|
||||
#define PROTO_LQR 0xc025
|
||||
#define PROTO_CHAP 0xc223
|
||||
|
||||
extern void LcpInput(struct mbuf *bp);
|
||||
extern void PapInput(struct mbuf *bp);
|
||||
extern void LqpInput(struct mbuf *bp);
|
||||
extern void ChapInput(struct mbuf *bp);
|
||||
extern void IpInput(struct mbuf *bp);
|
||||
extern struct mbuf *VjCompInput(struct mbuf *bp, int proto);
|
||||
extern void IpcpInput(struct mbuf *bp);
|
||||
extern void LqrInput(struct mbuf *bp);
|
||||
extern void LcpInput __P((struct mbuf *bp));
|
||||
extern void PapInput __P((struct mbuf *bp));
|
||||
extern void LqpInput __P((struct mbuf *bp));
|
||||
extern void ChapInput __P((struct mbuf *bp));
|
||||
extern void IpInput __P((struct mbuf *bp));
|
||||
extern struct mbuf *VjCompInput __P((struct mbuf *bp, int proto));
|
||||
extern void IpcpInput __P((struct mbuf *bp));
|
||||
extern void LqrInput __P((struct mbuf *bp));
|
||||
#endif
|
||||
|
@ -18,13 +18,19 @@
|
||||
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* $Id:$
|
||||
*
|
||||
* TODO:
|
||||
*
|
||||
*
|
||||
*/
|
||||
#include "defs.h"
|
||||
#include <time.h>
|
||||
#include <netdb.h>
|
||||
#ifdef __STDC__
|
||||
#include <stdarg.h>
|
||||
#else
|
||||
#include <varargs.h>
|
||||
#endif
|
||||
#ifdef NO_VSPRINTF
|
||||
#include <stdio.h>
|
||||
#endif
|
||||
|
||||
#include "hdlc.h"
|
||||
|
||||
@ -118,16 +124,54 @@ LogClose()
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef NO_VSPRINTF
|
||||
void
|
||||
logprintf(format, arg1, arg2, arg3, arg4, arg5, arg6)
|
||||
char *format;
|
||||
void *arg1, *arg2, *arg3, *arg4, *arg5, *arg6;
|
||||
vsprintf(buf, fmt, av)
|
||||
char *buf;
|
||||
char *fmt;
|
||||
va_list av;
|
||||
{
|
||||
sprintf(logptr, format, arg1, arg2, arg3, arg4, arg5, arg6);
|
||||
FILE foo;
|
||||
|
||||
foo._cnt = BUFSIZ;
|
||||
foo._base = foo._ptr = buf; /* may have to cast(unsigned char *) */
|
||||
foo._flag = _IOWRT+_IOSTRG;
|
||||
(void) _doprnt(fmt, (va_list)av, &foo);
|
||||
*foo._ptr = '\0'; /* plant terminating null character */
|
||||
}
|
||||
#endif
|
||||
|
||||
static void
|
||||
vlogprintf(format, ap)
|
||||
char *format;
|
||||
va_list ap;
|
||||
{
|
||||
vsprintf(logptr, format, ap);
|
||||
logptr += strlen(logptr);
|
||||
LogFlush();
|
||||
}
|
||||
|
||||
void
|
||||
#ifdef __STDC__
|
||||
logprintf(char *format, ...)
|
||||
#else
|
||||
logprintf(va_alist)
|
||||
va_dcl
|
||||
#endif
|
||||
{
|
||||
va_list ap;
|
||||
#ifdef __STDC__
|
||||
va_start(ap, format);
|
||||
#else
|
||||
char *format;
|
||||
|
||||
va_start(ap);
|
||||
format = va_arg(ap, char *);
|
||||
#endif
|
||||
vlogprintf(format, ap);
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
void
|
||||
LogDumpBp(level, header, bp)
|
||||
int level;
|
||||
@ -211,13 +255,27 @@ LogTimeStamp()
|
||||
}
|
||||
|
||||
void
|
||||
LogPrintf(level, format, arg1, arg2, arg3, arg4, arg5, arg6)
|
||||
int level;
|
||||
char *format;
|
||||
void *arg1, *arg2, *arg3, *arg4, *arg5, *arg6;
|
||||
#ifdef __STDC__
|
||||
LogPrintf(int level, char *format, ...)
|
||||
#else
|
||||
LogPrintf(va_alist)
|
||||
va_dcl
|
||||
#endif
|
||||
{
|
||||
va_list ap;
|
||||
#ifdef __STDC__
|
||||
va_start(ap, format);
|
||||
#else
|
||||
int level;
|
||||
char *format;
|
||||
|
||||
va_start(ap);
|
||||
int = va_arg(ap, int);
|
||||
format = va_arg(ap, char *);
|
||||
#endif
|
||||
if (!(loglevel & (1 << level)))
|
||||
return;
|
||||
LogTimeStamp();
|
||||
logprintf(format, arg1, arg2, arg3, arg4, arg5, arg6);
|
||||
vlogprintf(format, ap);
|
||||
va_end(ap);
|
||||
}
|
||||
|
@ -22,6 +22,7 @@
|
||||
|
||||
#ifndef _LOG_H_
|
||||
#define _LOG_H_
|
||||
#include "cdefs.h"
|
||||
/*
|
||||
* Definition of log level
|
||||
*/
|
||||
@ -43,11 +44,11 @@
|
||||
|
||||
extern int loglevel;
|
||||
|
||||
extern void LogTimeStamp();
|
||||
extern int LogOpen();
|
||||
extern void DupLog();
|
||||
extern void LogClose();
|
||||
extern void logprintf(), LogPrintf();
|
||||
extern void LogDumpBp(int level, char *header, struct mbuf *bp);
|
||||
extern void LogDumpBuff(int level, char *header, u_char *ptr, int cnt);
|
||||
extern void LogTimeStamp __P((void));
|
||||
extern int LogOpen __P((void));
|
||||
extern void DupLog __P((void));
|
||||
extern void LogClose __P((void));
|
||||
extern void logprintf __P((char *, ...)), LogPrintf __P((int, char *, ...));
|
||||
extern void LogDumpBp __P((int level, char *header, struct mbuf *bp));
|
||||
extern void LogDumpBuff __P((int level, char *header, u_char *ptr, int cnt));
|
||||
#endif
|
||||
|
@ -17,9 +17,9 @@
|
||||
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* o LQR based on RFC1333
|
||||
*
|
||||
* $Id:$
|
||||
*
|
||||
* o LQR based on RFC1333
|
||||
*
|
||||
* TODO:
|
||||
* o LQM policy
|
||||
|
@ -58,9 +58,9 @@ struct lqrsave HisLqrSave;
|
||||
#define LQM_LQR 1
|
||||
#define LQM_ECHO 2
|
||||
|
||||
extern void LqrDump(char *, struct lqrdata *);
|
||||
extern void LqrChangeOrder(struct lqrdata *, struct lqrdata *);
|
||||
extern void StartLqm(void);
|
||||
extern void StopLqr(int);
|
||||
extern void RecvEchoLqr(struct mbuf *);
|
||||
extern void LqrDump __P((char *, struct lqrdata *));
|
||||
extern void LqrChangeOrder __P((struct lqrdata *, struct lqrdata *));
|
||||
extern void StartLqm __P((void));
|
||||
extern void StopLqr __P((int));
|
||||
extern void RecvEchoLqr __P((struct mbuf *));
|
||||
#endif
|
||||
|
@ -18,7 +18,7 @@
|
||||
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* $Id:$
|
||||
*
|
||||
*
|
||||
* TODO:
|
||||
* o Add commands for traffic summary, version display, etc.
|
||||
* o Add signal handler for misc controls.
|
||||
@ -27,7 +27,6 @@
|
||||
#include <fcntl.h>
|
||||
#include <sys/time.h>
|
||||
#include <termios.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <signal.h>
|
||||
#include <sys/wait.h>
|
||||
#include <errno.h>
|
||||
@ -40,6 +39,13 @@
|
||||
#include "lcp.h"
|
||||
#include "ipcp.h"
|
||||
#include "vars.h"
|
||||
#include "auth.h"
|
||||
|
||||
#ifndef O_NONBLOCK
|
||||
#ifdef O_NDELAY
|
||||
#define O_NONBLOCK O_NDELAY
|
||||
#endif
|
||||
#endif
|
||||
|
||||
extern void VjInit(), AsyncInit();
|
||||
extern void AsyncInput(), IpOutput();
|
||||
@ -74,7 +80,7 @@ TtyInit()
|
||||
newtio.c_cc[VMIN] = 1;
|
||||
newtio.c_cc[VTIME] = 0;
|
||||
newtio.c_cflag |= CS8;
|
||||
ioctl(0, TIOCSETA, &newtio);
|
||||
tcsetattr(0, TCSADRAIN, &newtio);
|
||||
comtio = newtio;
|
||||
}
|
||||
|
||||
@ -89,11 +95,11 @@ TtyCommandMode()
|
||||
|
||||
if (!(mode & MODE_INTER))
|
||||
return;
|
||||
ioctl(0, TIOCGETA, &newtio);
|
||||
tcgetattr(0, &newtio);
|
||||
newtio.c_lflag |= (ECHO|ICANON);
|
||||
newtio.c_iflag = oldtio.c_iflag;
|
||||
newtio.c_oflag |= OPOST;
|
||||
ioctl(0, TIOCSETA, &newtio);
|
||||
tcsetattr(0, TCSADRAIN, &newtio);
|
||||
stat = fcntl(0, F_GETFL, 0);
|
||||
stat |= O_NONBLOCK;
|
||||
fcntl(0, F_SETFL, stat);
|
||||
@ -109,7 +115,7 @@ TtyTermMode()
|
||||
{
|
||||
int stat;
|
||||
|
||||
ioctl(0, TIOCSETA, &comtio);
|
||||
tcsetattr(0, TCSADRAIN, &comtio);
|
||||
stat = fcntl(0, F_GETFL, 0);
|
||||
stat &= ~O_NONBLOCK;
|
||||
fcntl(0, F_SETFL, stat);
|
||||
@ -123,10 +129,12 @@ int excode;
|
||||
int stat;
|
||||
|
||||
OsLinkdown();
|
||||
#ifdef notdef
|
||||
stat = fcntl(0, F_GETFL, 0);
|
||||
stat &= ~O_NONBLOCK;
|
||||
fcntl(0, F_SETFL, stat);
|
||||
ioctl(0, TIOCSETA, &oldtio);
|
||||
tcsetattr(0, TCSANOW, &oldtio);
|
||||
#endif
|
||||
OsCloseLink(1);
|
||||
sleep(1);
|
||||
if (mode & MODE_AUTO)
|
||||
@ -136,6 +144,12 @@ int excode;
|
||||
LogClose();
|
||||
if (server > 0)
|
||||
close(server);
|
||||
#ifndef notdef
|
||||
stat = fcntl(0, F_GETFL, 0);
|
||||
stat &= ~O_NONBLOCK;
|
||||
fcntl(0, F_SETFL, stat);
|
||||
tcsetattr(0, TCSANOW, &oldtio);
|
||||
#endif
|
||||
|
||||
exit(excode);
|
||||
}
|
||||
@ -226,6 +240,16 @@ char **argv;
|
||||
if (LogOpen())
|
||||
exit(EX_START);
|
||||
|
||||
switch ( LocalAuthInit() ) {
|
||||
case NOT_FOUND:
|
||||
fprintf(stderr, "Warning: No password entry in secret file\n");
|
||||
fprintf(stderr, "Warning: Anyone is allowd manipulating!!!\n");
|
||||
VarLocalAuth = LOCAL_AUTH;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (OpenTunnel(&tunno) < 0) {
|
||||
perror("open_tun");
|
||||
exit(EX_START);
|
||||
@ -244,12 +268,20 @@ char **argv;
|
||||
}
|
||||
}
|
||||
|
||||
ioctl(0, TIOCGETA, &oldtio); /* Save original tty mode */
|
||||
tcgetattr(0, &oldtio); /* Save original tty mode */
|
||||
|
||||
signal(SIGHUP, Hangup);
|
||||
signal(SIGTERM, CloseSession);
|
||||
signal(SIGINT, CloseSession);
|
||||
#ifdef SIGSEGV
|
||||
signal(SIGSEGV, Hangup);
|
||||
#endif
|
||||
#ifdef SIGPIPE
|
||||
signal(SIGPIPE, Hangup);
|
||||
#endif
|
||||
#ifdef SIGALRM
|
||||
signal(SIGALRM, SIG_IGN);
|
||||
#endif
|
||||
|
||||
if (dstsystem) {
|
||||
if (SelectSystem(dstsystem, CONFFILE) < 0) {
|
||||
@ -298,7 +330,7 @@ char **argv;
|
||||
}
|
||||
LogPrintf(LOG_PHASE, "Listening at %d.\n", port);
|
||||
#ifdef DOTTYINIT
|
||||
if (mode & (MODE_DIRECT|MODE_DEDICATED)) {
|
||||
if (mode & (MODE_DIRECT|MODE_DEDICATED)) { /* } */
|
||||
#else
|
||||
if (mode & MODE_DIRECT) {
|
||||
#endif
|
||||
@ -371,12 +403,13 @@ ReadTty()
|
||||
#endif
|
||||
if (!TermMode) {
|
||||
n = read(netfd, linebuff, sizeof(linebuff)-1);
|
||||
if (n > 0)
|
||||
if (n > 0) {
|
||||
DecodeCommand(linebuff, n, 1);
|
||||
else {
|
||||
} else {
|
||||
#ifdef DEBUG
|
||||
logprintf("connection closed.\n");
|
||||
#endif
|
||||
VarLocalAuth = LOCAL_NO_AUTH;
|
||||
close(netfd);
|
||||
netfd = -1;
|
||||
mode &= ~MODE_INTER;
|
||||
@ -455,10 +488,11 @@ ReadTty()
|
||||
*/
|
||||
|
||||
static char *FrameHeaders[] = {
|
||||
"\176\177\175\043",
|
||||
"\176\377\175\043",
|
||||
"\176\175\137\175\043",
|
||||
"\176\175\337\175\043",
|
||||
"\176\377\003\300\041",
|
||||
"\176\377\175\043\300\041",
|
||||
"\176\177\175\043\100\041",
|
||||
"\176\175\337\175\043\300\041",
|
||||
"\176\175\137\175\043\100\041",
|
||||
NULL,
|
||||
};
|
||||
|
||||
@ -467,12 +501,15 @@ HdlcDetect(cp, n)
|
||||
u_char *cp;
|
||||
int n;
|
||||
{
|
||||
char *ptr, **hp;
|
||||
char *ptr, *fp, **hp;
|
||||
|
||||
cp[n] = '\0'; /* be sure to null terminated */
|
||||
ptr = NULL;
|
||||
for (hp = FrameHeaders; *hp; hp++) {
|
||||
if (ptr = strstr((char *)cp, *hp))
|
||||
fp = *hp;
|
||||
if (DEV_IS_SYNC)
|
||||
fp++;
|
||||
if (ptr = strstr((char *)cp, fp))
|
||||
break;
|
||||
}
|
||||
return((u_char *)ptr);
|
||||
@ -509,6 +546,7 @@ DoLoop()
|
||||
int ssize = sizeof(hisaddr);
|
||||
u_char *cp;
|
||||
u_char rbuff[MAX_MRU];
|
||||
struct itimerval itimer;
|
||||
|
||||
if (mode & MODE_DIRECT) {
|
||||
modem = OpenModem(mode);
|
||||
@ -522,7 +560,14 @@ DoLoop()
|
||||
fflush(stdout);
|
||||
|
||||
timeout.tv_sec = 0;;
|
||||
#ifdef SIGALRM
|
||||
signal(SIGALRM, (void (*)(int))TimerService);
|
||||
itimer.it_interval.tv_sec = itimer.it_value.tv_sec = 0;
|
||||
itimer.it_interval.tv_usec = itimer.it_value.tv_usec = TICKUNIT;
|
||||
setitimer(ITIMER_REAL, &itimer, NULL);
|
||||
#else
|
||||
timeout.tv_usec = 0;
|
||||
#endif
|
||||
|
||||
for (;;) {
|
||||
IpStartOutput();
|
||||
@ -537,18 +582,23 @@ DoLoop()
|
||||
* too big, it results loss of characters from modem and poor responce.
|
||||
* If this values is too small, ppp process eats many CPU time.
|
||||
*/
|
||||
#ifndef SIGALRM
|
||||
usleep(TICKUNIT);
|
||||
TimerService();
|
||||
#endif
|
||||
|
||||
if (modem) {
|
||||
FD_SET(modem, &rfds);
|
||||
FD_SET(modem, &efds);
|
||||
FD_SET(modem, &wfds);
|
||||
if (ModemQlen() > 0) {
|
||||
FD_SET(modem, &wfds);
|
||||
}
|
||||
}
|
||||
if (netfd > -1) {
|
||||
FD_SET(netfd, &rfds);
|
||||
FD_SET(netfd, &efds);
|
||||
}
|
||||
#ifndef SIGALRM
|
||||
/*
|
||||
* Normally, slect() will not block because modem is writable.
|
||||
* In AUTO mode, select will block until we find packet from tun.
|
||||
@ -556,10 +606,16 @@ DoLoop()
|
||||
*/
|
||||
tp = (RedialTimer.state == TIMER_RUNNING)? &timeout : NULL;
|
||||
i = select(tun_in+10, &rfds, &wfds, &efds, tp);
|
||||
#else
|
||||
i = select(tun_in+10, &rfds, &wfds, &efds, NULL);
|
||||
#endif
|
||||
if (i == 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (i < 0) {
|
||||
if (errno == EINTR)
|
||||
continue;
|
||||
perror("select");
|
||||
break;
|
||||
}
|
||||
@ -596,6 +652,8 @@ DoLoop()
|
||||
ModemStartOutput(modem);
|
||||
}
|
||||
if (FD_ISSET(modem, &rfds)) { /* something to read from modem */
|
||||
if (LcpFsm.state <= ST_CLOSED)
|
||||
usleep(10000);
|
||||
n = read(modem, rbuff, sizeof(rbuff));
|
||||
if ((mode & MODE_DIRECT) && n <= 0) {
|
||||
DownConnection();
|
||||
@ -668,12 +726,9 @@ DoLoop()
|
||||
|
||||
if (DialModem()) {
|
||||
sleep(1); /* little pause to allow peer starts */
|
||||
ModemTimeout();
|
||||
ModemTimeout();
|
||||
PacketMode();
|
||||
} else {
|
||||
#ifdef notdef
|
||||
Cleanup(EX_DIAL);
|
||||
#endif
|
||||
CloseModem();
|
||||
/* Dial failed. Keep quite during redial wait period. */
|
||||
/* XXX: We shoud implement re-dial */
|
||||
@ -689,5 +744,10 @@ DoLoop()
|
||||
IpEnqueue(pri, rbuff, n);
|
||||
}
|
||||
}
|
||||
#ifdef SIGALRM
|
||||
itimer.it_value.tv_usec = itimer.it_value.tv_sec = 0;
|
||||
setitimer(ITIMER_REAL, &itimer, NULL);
|
||||
signal(SIGALRM, SIG_DFL);
|
||||
#endif
|
||||
logprintf("job done.\n");
|
||||
}
|
||||
|
@ -18,8 +18,7 @@
|
||||
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* $Id:$
|
||||
*
|
||||
* TODO:
|
||||
*
|
||||
*/
|
||||
#include "defs.h"
|
||||
|
||||
|
@ -55,13 +55,13 @@ struct mqueue {
|
||||
#define MB_IPQ 10
|
||||
#define MB_MAX MB_IPQ
|
||||
|
||||
extern int plength(struct mbuf *bp);
|
||||
extern struct mbuf *mballoc(int cnt, int type);
|
||||
extern struct mbuf *mbfree(struct mbuf *bp);
|
||||
extern void pfree(struct mbuf *bp);
|
||||
extern void mbwrite(struct mbuf *bp, u_char *ptr, int cnt);
|
||||
extern struct mbuf *mbread(struct mbuf *bp, u_char *ptr, int cnt);
|
||||
extern void DumpBp(struct mbuf *bp);
|
||||
extern void Enqueue(struct mqueue *queue, struct mbuf *bp);
|
||||
extern struct mbuf *Dequeue(struct mqueue *queue);
|
||||
extern int plength __P((struct mbuf *bp));
|
||||
extern struct mbuf *mballoc __P((int cnt, int type));
|
||||
extern struct mbuf *mbfree __P((struct mbuf *bp));
|
||||
extern void pfree __P((struct mbuf *bp));
|
||||
extern void mbwrite __P((struct mbuf *bp, u_char *ptr, int cnt));
|
||||
extern struct mbuf *mbread __P((struct mbuf *bp, u_char *ptr, int cnt));
|
||||
extern void DumpBp __P((struct mbuf *bp));
|
||||
extern void Enqueue __P((struct mqueue *queue, struct mbuf *bp));
|
||||
extern struct mbuf *Dequeue __P((struct mqueue *queue));
|
||||
#endif
|
||||
|
@ -1,29 +1,29 @@
|
||||
/*
|
||||
* MD5C.C - RSA Data Security, Inc., MD5 message-digest algorithm
|
||||
*
|
||||
* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
|
||||
* rights reserved.
|
||||
*
|
||||
* License to copy and use this software is granted provided that it
|
||||
* is identified as the "RSA Data Security, Inc. MD5 Message-Digest
|
||||
* Algorithm" in all material mentioning or referencing this software
|
||||
* or this function.
|
||||
/* MD5C.C - RSA Data Security, Inc., MD5 message-digest algorithm
|
||||
*
|
||||
* License is also granted to make and use derivative works provided
|
||||
* that such works are identified as "derived from the RSA Data
|
||||
* Security, Inc. MD5 Message-Digest Algorithm" in all material
|
||||
* mentioning or referencing the derived work.
|
||||
*
|
||||
* RSA Data Security, Inc. makes no representations concerning either
|
||||
* the merchantability of this software or the suitability of this
|
||||
* software for any particular purpose. It is provided "as is"
|
||||
* without express or implied warranty of any kind.
|
||||
*
|
||||
* These notices must be retained in any copies of any part of this
|
||||
* documentation and/or software.
|
||||
*
|
||||
* $Id:$
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
|
||||
rights reserved.
|
||||
|
||||
License to copy and use this software is granted provided that it
|
||||
is identified as the "RSA Data Security, Inc. MD5 Message-Digest
|
||||
Algorithm" in all material mentioning or referencing this software
|
||||
or this function.
|
||||
|
||||
License is also granted to make and use derivative works provided
|
||||
that such works are identified as "derived from the RSA Data
|
||||
Security, Inc. MD5 Message-Digest Algorithm" in all material
|
||||
mentioning or referencing the derived work.
|
||||
|
||||
RSA Data Security, Inc. makes no representations concerning either
|
||||
the merchantability of this software or the suitability of this
|
||||
software for any particular purpose. It is provided "as is"
|
||||
without express or implied warranty of any kind.
|
||||
|
||||
These notices must be retained in any copies of any part of this
|
||||
documentation and/or software.
|
||||
*/
|
||||
|
||||
#include "global.h"
|
||||
|
@ -18,18 +18,25 @@
|
||||
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* $Id:$
|
||||
*
|
||||
*
|
||||
* TODO:
|
||||
*/
|
||||
#include "fsm.h"
|
||||
#include <fcntl.h>
|
||||
#include <termios.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/tty.h>
|
||||
#include "hdlc.h"
|
||||
#include "lcp.h"
|
||||
#include "modem.h"
|
||||
#include "vars.h"
|
||||
|
||||
#ifndef O_NONBLOCK
|
||||
#ifdef O_NDELAY
|
||||
#define O_NONBLOCK O_NDELAY
|
||||
#endif
|
||||
#endif
|
||||
|
||||
extern int DoChat();
|
||||
|
||||
static int mbits; /* Current DCD status */
|
||||
@ -86,6 +93,113 @@ struct mqueue *queue;
|
||||
return(bp);
|
||||
}
|
||||
|
||||
static struct speeds{
|
||||
int nspeed;
|
||||
speed_t speed;
|
||||
} speeds[] = {
|
||||
#ifdef B50
|
||||
{ 50, B50, },
|
||||
#endif
|
||||
#ifdef B75
|
||||
{ 75, B75, },
|
||||
#endif
|
||||
#ifdef B110
|
||||
{ 110, B110, },
|
||||
#endif
|
||||
#ifdef B134
|
||||
{ 134, B134, },
|
||||
#endif
|
||||
#ifdef B150
|
||||
{ 150, B150, },
|
||||
#endif
|
||||
#ifdef B200
|
||||
{ 200, B200, },
|
||||
#endif
|
||||
#ifdef B300
|
||||
{ 300, B300, },
|
||||
#endif
|
||||
#ifdef B600
|
||||
{ 600, B600, },
|
||||
#endif
|
||||
#ifdef B1200
|
||||
{ 1200, B1200, },
|
||||
#endif
|
||||
#ifdef B1800
|
||||
{ 1800, B1800, },
|
||||
#endif
|
||||
#ifdef B2400
|
||||
{ 2400, B2400, },
|
||||
#endif
|
||||
#ifdef B4800
|
||||
{ 4800, B4800, },
|
||||
#endif
|
||||
#ifdef B9600
|
||||
{ 9600, B9600, },
|
||||
#endif
|
||||
#ifdef B19200
|
||||
{ 19200, B19200, },
|
||||
#endif
|
||||
#ifdef B38400
|
||||
{ 38400, B38400, },
|
||||
#endif
|
||||
#ifndef POSIX_SOURCE
|
||||
#ifdef B7200
|
||||
{ 7200, B7200, },
|
||||
#endif
|
||||
#ifdef B14400
|
||||
{ 14400, B14400, },
|
||||
#endif
|
||||
#ifdef B28800
|
||||
{ 28800, B28800, },
|
||||
#endif
|
||||
#ifdef B57600
|
||||
{ 57600, B57600, },
|
||||
#endif
|
||||
#ifdef B76800
|
||||
{ 76800, B76800, },
|
||||
#endif
|
||||
#ifdef B115200
|
||||
{ 115200, B115200, },
|
||||
#endif
|
||||
#ifdef B230400
|
||||
{ 230400, B230400, },
|
||||
#endif
|
||||
#ifdef EXTA
|
||||
{ 19200, EXTA, },
|
||||
#endif
|
||||
#ifdef EXTB
|
||||
{ 38400, EXTB, },
|
||||
#endif
|
||||
#endif /*_POSIX_SOURCE */
|
||||
{ 0, 0 }
|
||||
};
|
||||
|
||||
int SpeedToInt(speed)
|
||||
speed_t speed;
|
||||
{
|
||||
struct speeds *sp;
|
||||
|
||||
for (sp = speeds; sp->nspeed; sp++) {
|
||||
if (sp->speed == speed) {
|
||||
return(sp->nspeed);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
speed_t IntToSpeed(nspeed)
|
||||
int nspeed;
|
||||
{
|
||||
struct speeds *sp;
|
||||
|
||||
for (sp = speeds; sp->nspeed; sp++) {
|
||||
if (sp->nspeed == nspeed) {
|
||||
return(sp->speed);
|
||||
}
|
||||
}
|
||||
return B0;
|
||||
}
|
||||
|
||||
static time_t uptime;
|
||||
|
||||
void
|
||||
@ -132,12 +246,13 @@ ModemTimeout()
|
||||
}
|
||||
} else {
|
||||
if (!Online) {
|
||||
online:
|
||||
time(&uptime);
|
||||
LogPrintf(LOG_PHASE, "Connected!\n");
|
||||
mbits = TIOCM_CD;
|
||||
connect_count++;
|
||||
connect_time = 0;
|
||||
} else if (uptime == 0) {
|
||||
time(&uptime);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -188,10 +303,10 @@ char *str;
|
||||
val = GetParityValue(str);
|
||||
if (val > 0) {
|
||||
VarParity = val;
|
||||
ioctl(modem, TIOCGETA, &rstio);
|
||||
tcgetattr(modem, &rstio);
|
||||
rstio.c_cflag &= ~(CSIZE|PARODD|PARENB);
|
||||
rstio.c_cflag |= val;
|
||||
ioctl(modem, TIOCSETA, &rstio);
|
||||
tcsetattr(modem, TCSADRAIN, &rstio);
|
||||
}
|
||||
return(val);
|
||||
}
|
||||
@ -254,7 +369,7 @@ int mode;
|
||||
mbits = 0;
|
||||
if (mode & MODE_DIRECT) {
|
||||
if (isatty(0))
|
||||
modem = open("/dev/tty", O_RDWR|O_NONBLOCK);
|
||||
modem = open(ctermid(NULL), O_RDWR|O_NONBLOCK);
|
||||
} else if (modem == 0) {
|
||||
if (strncmp(VarDevice, "/dev", 4) == 0) {
|
||||
uucplock = rindex(VarDevice, '/')+1;
|
||||
@ -295,8 +410,11 @@ int mode;
|
||||
* the one desired for further operation. In this implementation,
|
||||
* we assume that modem is configuted to use CTS/RTS flow control.
|
||||
*/
|
||||
if (dev_is_modem = isatty(modem)) {
|
||||
ioctl(modem, TIOCGETA, &rstio);
|
||||
dev_is_modem = isatty(modem) || DEV_IS_SYNC;
|
||||
if (DEV_IS_SYNC)
|
||||
sleep(1);
|
||||
if (dev_is_modem && !DEV_IS_SYNC) {
|
||||
tcgetattr(modem, &rstio);
|
||||
#ifdef DEBUG
|
||||
logprintf("## modem = %d\n", modem);
|
||||
logprintf("modem (get): iflag = %x, oflag = %x, cflag = %x\n",
|
||||
@ -314,7 +432,7 @@ int mode;
|
||||
*/
|
||||
rstio.c_cflag &= ~(CSIZE|PARENB|PARODD);
|
||||
rstio.c_cflag |= VarParity;
|
||||
rstio.c_ispeed = rstio.c_ospeed = VarSpeed;
|
||||
cfsetspeed(&rstio, IntToSpeed(VarSpeed));
|
||||
}
|
||||
rstio.c_iflag |= (IGNBRK | ISTRIP | IGNPAR | IXON | IXOFF);
|
||||
rstio.c_iflag &= ~(BRKINT|ICRNL|IXANY|IMAXBEL);
|
||||
@ -328,19 +446,20 @@ int mode;
|
||||
rstio.c_cc[VMIN] = 1;
|
||||
rstio.c_cc[VTIME] = 0;
|
||||
#endif
|
||||
ioctl(modem, TIOCSETA, &rstio);
|
||||
tcsetattr(modem, TCSADRAIN, &rstio);
|
||||
#ifdef DEBUG
|
||||
logprintf("modem (put): iflag = %x, oflag = %x, cflag = %x\n",
|
||||
rstio.c_iflag, rstio.c_oflag, rstio.c_cflag);
|
||||
#endif
|
||||
|
||||
if (!(mode & MODE_DIRECT))
|
||||
ioctl(modem, TIOCMGET, &mbits);
|
||||
#ifdef DEBUG
|
||||
ioctl(modem, TIOCMGET, &mbits);
|
||||
fprintf(stderr, "modem control = %o\n", mbits);
|
||||
#endif
|
||||
|
||||
oldflag = fcntl(modem, F_GETFL, 0);
|
||||
fcntl(modem, F_SETFL, oldflag & ~O_NDELAY);
|
||||
fcntl(modem, F_SETFL, oldflag & ~O_NONBLOCK);
|
||||
}
|
||||
StartModemTimer();
|
||||
|
||||
@ -352,8 +471,8 @@ ModemSpeed()
|
||||
{
|
||||
struct termios rstio;
|
||||
|
||||
ioctl(modem, TIOCGETA, &rstio);
|
||||
return(rstio.c_ispeed);
|
||||
tcgetattr(modem, &rstio);
|
||||
return(SpeedToInt(cfgetispeed(&rstio)));
|
||||
}
|
||||
|
||||
static struct termios modemios;
|
||||
@ -368,7 +487,7 @@ int modem;
|
||||
struct termios rstio;
|
||||
int oldflag;
|
||||
|
||||
if (!isatty(modem))
|
||||
if (!isatty(modem) || DEV_IS_SYNC)
|
||||
return(0);
|
||||
if (!(mode & MODE_DIRECT) && modem && !Online) {
|
||||
#ifdef DEBUG
|
||||
@ -378,14 +497,14 @@ int modem;
|
||||
return(-1);
|
||||
#endif
|
||||
}
|
||||
ioctl(modem, TIOCGETA, &rstio);
|
||||
tcgetattr(modem, &rstio);
|
||||
modemios = rstio;
|
||||
rstio.c_cflag &= ~(CSIZE|PARENB|PARODD);
|
||||
rstio.c_cflag |= CS8;
|
||||
rstio.c_iflag &= ~(ISTRIP|IXON|IXOFF|BRKINT|ICRNL|INLCR);
|
||||
ioctl(modem, TIOCSETA, &rstio);
|
||||
tcsetattr(modem, TCSADRAIN, &rstio);
|
||||
oldflag = fcntl(modem, F_GETFL, 0);
|
||||
fcntl(modem, F_SETFL, oldflag | O_NDELAY);
|
||||
fcntl(modem, F_SETFL, oldflag | O_NONBLOCK);
|
||||
#ifdef DEBUG
|
||||
oldflag = fcntl(modem, F_GETFL, 0);
|
||||
logprintf("modem (put2): iflag = %x, oflag = %x, cflag = %x\n",
|
||||
@ -402,9 +521,9 @@ int modem;
|
||||
int oldflag;
|
||||
|
||||
if (isatty(modem)) {
|
||||
ioctl(modem, TIOCSETA, &modemios);
|
||||
tcsetattr(modem, TCSADRAIN, &modemios);
|
||||
oldflag = fcntl(modem, F_GETFL, 0);
|
||||
fcntl(modem, F_SETFL, oldflag & ~O_NDELAY);
|
||||
fcntl(modem, F_SETFL, oldflag & ~O_NONBLOCK);
|
||||
}
|
||||
}
|
||||
|
||||
@ -412,7 +531,7 @@ void
|
||||
HangupModem(flag)
|
||||
int flag;
|
||||
{
|
||||
int n = 0;
|
||||
struct termios tio;
|
||||
|
||||
if (!isatty(modem)) {
|
||||
mbits &= ~TIOCM_DTR;
|
||||
@ -421,9 +540,15 @@ int flag;
|
||||
return;
|
||||
}
|
||||
|
||||
if (Online) {
|
||||
if (modem && Online) {
|
||||
mbits &= ~TIOCM_DTR;
|
||||
#ifdef __bsdi__ /* not a POSIX way */
|
||||
ioctl(modem, TIOCMSET, &mbits);
|
||||
#else
|
||||
tcgetattr(modem, &tio);
|
||||
cfsetspeed(&tio, B0);
|
||||
tcsetattr(modem, TCSANOW, &tio);
|
||||
#endif
|
||||
sleep(1);
|
||||
#ifdef notdef
|
||||
mbits &= ~TIOCM_CD;
|
||||
@ -436,14 +561,20 @@ int flag;
|
||||
if (modem && (flag || !(mode & MODE_DEDICATED))) {
|
||||
ModemTimeout(); /* XXX */
|
||||
StopTimer(&ModemTimer); /* XXX */
|
||||
ioctl(modem, TIOCFLUSH, &n);
|
||||
tcflush(modem, TIOCFLUSH);
|
||||
UnrawModem(modem);
|
||||
close(modem);
|
||||
(void) uu_unlock(uucplock);
|
||||
modem = 0; /* Mark as modem has closed */
|
||||
} else {
|
||||
} else if (modem) {
|
||||
mbits |= TIOCM_DTR;
|
||||
#ifndef notyet
|
||||
ioctl(modem, TIOCMSET, &mbits);
|
||||
#else
|
||||
tcgetattr(modem, &ts);
|
||||
cfsetspeed(&ts, IntToSpeed(VarSpeed));
|
||||
tcsetattr(modem, TCSADRAIN, &ts);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
@ -471,6 +602,21 @@ int count;
|
||||
Enqueue(&OutputQueues[pri], bp);
|
||||
}
|
||||
|
||||
void
|
||||
ModemOutput(pri, bp)
|
||||
int pri;
|
||||
struct mbuf *bp;
|
||||
{
|
||||
struct mbuf *wp;
|
||||
int len;
|
||||
|
||||
len = plength(bp);
|
||||
wp = mballoc(len, MB_MODEM);
|
||||
mbread(bp, MBUF_CTOP(wp), len);
|
||||
Enqueue(&OutputQueues[pri], wp);
|
||||
ModemStartOutput(modem);
|
||||
}
|
||||
|
||||
int
|
||||
ModemQlen()
|
||||
{
|
||||
@ -514,7 +660,7 @@ int fd;
|
||||
}
|
||||
if (modemout) {
|
||||
nb = modemout->cnt;
|
||||
if (nb > 300) nb = 300;
|
||||
if (nb > 1600) nb = 1600;
|
||||
if (fd == 0) fd = 1;
|
||||
nw = write(fd, MBUF_CTOP(modemout), nb);
|
||||
#ifdef QDEBUG
|
||||
@ -560,9 +706,16 @@ DialModem()
|
||||
int
|
||||
ShowModemStatus()
|
||||
{
|
||||
#ifdef TIOCOUTQ
|
||||
int nb;
|
||||
#endif
|
||||
|
||||
printf("device: %s speed: ", VarDevice);
|
||||
if (DEV_IS_SYNC)
|
||||
printf("sync\n");
|
||||
else
|
||||
printf("%d\n", VarSpeed);
|
||||
|
||||
printf("device: %s speed: %d\n", VarDevice, VarSpeed);
|
||||
switch (VarParity & CSIZE) {
|
||||
case CS7:
|
||||
printf("cs7, ");
|
||||
@ -582,8 +735,10 @@ ShowModemStatus()
|
||||
printf("fd = %d, modem control = %o\n", modem, mbits);
|
||||
#endif
|
||||
printf("connect count: %d\n", connect_count);
|
||||
#ifdef TIOCOUTQ
|
||||
ioctl(modem, TIOCOUTQ, &nb);
|
||||
printf("outq: %d\n", nb);
|
||||
#endif
|
||||
printf("DialScript = %s\n", VarDialScript);
|
||||
printf("LoginScript = %s\n", VarLoginScript);
|
||||
printf("PhoneNumber = %s\n", VarPhone);
|
||||
|
@ -15,23 +15,26 @@
|
||||
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* $Id:$
|
||||
* $Id: modem.h,v 1.1.1.1 1995/01/31 06:29:56 amurai Exp $
|
||||
*
|
||||
* TODO:
|
||||
*/
|
||||
|
||||
#ifndef _MODEM_H_
|
||||
#define _MODEM_H_
|
||||
#include <termios.h>
|
||||
#include "mbuf.h"
|
||||
#include "cdefs.h"
|
||||
|
||||
extern int RawModem(int);
|
||||
extern void UnrawModem(int);
|
||||
extern void UpModem(int);
|
||||
extern void DownModem(int);
|
||||
extern void WriteModem(int, char *, int);
|
||||
extern void ModemStartOutput(int);
|
||||
extern int OpenModem(int);
|
||||
extern int ModemSpeed(void);
|
||||
extern int ModemQlen(void);
|
||||
extern int DialModem(void);
|
||||
extern int RawModem __P((int));
|
||||
extern void UnrawModem __P((int));
|
||||
extern void UpModem __P((int));
|
||||
extern void DownModem __P((int));
|
||||
extern void WriteModem __P((int, char *, int));
|
||||
extern void ModemStartOutput __P((int));
|
||||
extern int OpenModem __P((int));
|
||||
extern int ModemSpeed __P((void));
|
||||
extern int ModemQlen __P((void));
|
||||
extern int DialModem __P((void));
|
||||
|
||||
#endif
|
||||
|
@ -16,20 +16,15 @@
|
||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*
|
||||
*
|
||||
* $Id:$
|
||||
*
|
||||
* TODO:
|
||||
*
|
||||
*/
|
||||
#include "fsm.h"
|
||||
#include <sys/param.h>
|
||||
#include <sys/socket.h>
|
||||
#include <net/route.h>
|
||||
#if __FreeBSD__ >= 2
|
||||
#include <osreldate.h>
|
||||
#endif
|
||||
#if defined(__NetBSD__) || _BSDI_VERSION >= 199312 || __FreeBSD_version >=199412
|
||||
#if BSD >= 199206 || _BSDI_VERSION >= 199312
|
||||
#include <sys/select.h>
|
||||
#endif
|
||||
#include <sys/ioctl.h>
|
||||
@ -39,6 +34,7 @@
|
||||
#include <errno.h>
|
||||
#include "ipcp.h"
|
||||
#include "os.h"
|
||||
#include "vars.h"
|
||||
|
||||
static struct ifaliasreq ifra;
|
||||
static struct ifreq ifrq;
|
||||
@ -69,7 +65,10 @@ int updown;
|
||||
}
|
||||
|
||||
if (updown == 0) {
|
||||
if (Enabled(ConfProxy))
|
||||
cifproxyarp(s, oldhis.s_addr);
|
||||
if (oldmine.s_addr == 0 && oldhis.s_addr == 0) {
|
||||
close(s);
|
||||
return(0);
|
||||
}
|
||||
bzero(&ifra.ifra_addr, sizeof(ifra.ifra_addr));
|
||||
@ -80,6 +79,7 @@ int updown;
|
||||
#endif
|
||||
if (ioctl(s, SIOCDIFADDR, &ifra) < 0) {
|
||||
perror("SIOCDIFADDR");
|
||||
close(s);
|
||||
return(-1);
|
||||
}
|
||||
|
||||
@ -147,8 +147,11 @@ int updown;
|
||||
#endif
|
||||
} else if (ioctl(s, SIOCAIFADDR, &ifra) < 0) {
|
||||
perror("SIOCAIFADDR");
|
||||
close(s);
|
||||
return(-1);
|
||||
}
|
||||
if (Enabled(ConfProxy))
|
||||
sifproxyarp(s, hisaddr.s_addr);
|
||||
}
|
||||
close(s);
|
||||
return(0);
|
||||
@ -235,15 +238,10 @@ OsSetInterfaceParams(type, mtu, speed)
|
||||
int type, mtu, speed;
|
||||
{
|
||||
struct tuninfo info;
|
||||
#if __FreeBSD__ >= 2
|
||||
info.tif_type = type;
|
||||
info.tif_mtu = mtu;
|
||||
info.tif_baudrate = speed;
|
||||
#else
|
||||
info.if_type = type;
|
||||
info.if_mtu = mtu;
|
||||
info.if_baudrate = speed;
|
||||
#endif
|
||||
|
||||
info.type = type;
|
||||
info.mtu = mtu;
|
||||
info.baudrate = speed;
|
||||
if (ioctl(tun_out, TUNSIFINFO, &info) < 0)
|
||||
perror("TUNSIFINFO");
|
||||
}
|
||||
|
@ -15,20 +15,21 @@
|
||||
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* $Id:$
|
||||
* $Id: os.h,v 1.1.1.1 1995/01/31 06:29:56 amurai Exp $
|
||||
*
|
||||
* TODO:
|
||||
*/
|
||||
|
||||
#ifndef _OS_H_
|
||||
#define _OS_H_
|
||||
#include "cdefs.h"
|
||||
|
||||
int OsSetIpaddress(struct in_addr myaddr, struct in_addr hisaddr, struct in_addr netmask);
|
||||
int OsInterfaceDown(int);
|
||||
void OsSetInterfaceParams(int type, int mtu, int speed);
|
||||
int OpenTunnel(int *);
|
||||
void OsCloseLink(int flag);
|
||||
void OsLinkup(void), OsLinkdown(void);
|
||||
void OsSetRoute();
|
||||
void DeleteIfRoutes(int);
|
||||
int OsSetIpaddress __P((struct in_addr myaddr, struct in_addr hisaddr, struct in_addr netmask));
|
||||
int OsInterfaceDown __P((int));
|
||||
void OsSetInterfaceParams __P((int type, int mtu, int speed));
|
||||
int OpenTunnel __P((int *));
|
||||
void OsCloseLink __P((int flag));
|
||||
void OsLinkup __P((void)), OsLinkdown __P((void));
|
||||
void OsSetRoute __P((int, struct in_addr, struct in_addr, struct in_addr));
|
||||
void DeleteIfRoutes __P((int));
|
||||
#endif
|
||||
|
@ -19,9 +19,8 @@
|
||||
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* $Id:$
|
||||
*
|
||||
*
|
||||
* TODO:
|
||||
* o Imprement retransmission timer.
|
||||
*/
|
||||
#include "fsm.h"
|
||||
#include "lcp.h"
|
||||
@ -30,15 +29,19 @@
|
||||
#include "hdlc.h"
|
||||
#include "lcpproto.h"
|
||||
#include "phase.h"
|
||||
#include "auth.h"
|
||||
|
||||
static char *papcodes[] = {
|
||||
"???", "REQUEST", "ACK", "NAK"
|
||||
};
|
||||
|
||||
static int papid;
|
||||
struct authinfo AuthPapInfo = {
|
||||
SendPapChallenge,
|
||||
};
|
||||
|
||||
void
|
||||
SendPapChallenge()
|
||||
SendPapChallenge(papid)
|
||||
int papid;
|
||||
{
|
||||
struct fsmheader lh;
|
||||
struct mbuf *bp;
|
||||
@ -50,10 +53,10 @@ SendPapChallenge()
|
||||
plen = namelen + keylen + 2;
|
||||
#ifdef DEBUG
|
||||
logprintf("namelen = %d, keylen = %d\n", namelen, keylen);
|
||||
LogPrintf(LOG_PHASE, "PAP: %s (%s)\n", VarAuthName, VarAuthKey);
|
||||
#endif
|
||||
LogPrintf(LOG_PHASE, "PAP: %s (%s)\n", VarAuthName, VarAuthKey);
|
||||
lh.code = PAP_REQUEST;
|
||||
lh.id = ++papid;
|
||||
lh.id = papid;
|
||||
lh.length = htons(plen + sizeof(struct fsmheader));
|
||||
bp = mballoc(plen + sizeof(struct fsmheader), MB_FSM);
|
||||
bcopy(&lh, MBUF_CTOP(bp), sizeof(struct fsmheader));
|
||||
@ -105,7 +108,9 @@ u_char *name, *key;
|
||||
klen = *key;
|
||||
*key++ = 0;
|
||||
key[klen] = 0;
|
||||
#ifdef DEBUG
|
||||
logprintf("name: %s (%d), key: %s (%d)\n", name, nlen, key, klen);
|
||||
#endif
|
||||
return(AuthValidate(SECRETFILE, name, key));
|
||||
}
|
||||
|
||||
@ -139,6 +144,7 @@ struct mbuf *bp;
|
||||
}
|
||||
break;
|
||||
case PAP_ACK:
|
||||
StopAuthTimer(&AuthPapInfo);
|
||||
cp = (u_char *)(php + 1);
|
||||
len = *cp++;
|
||||
cp[len] = 0;
|
||||
@ -150,6 +156,7 @@ struct mbuf *bp;
|
||||
}
|
||||
break;
|
||||
case PAP_NAK:
|
||||
StopAuthTimer(&AuthPapInfo);
|
||||
cp = (u_char *)(php + 1);
|
||||
len = *cp++;
|
||||
cp[len] = 0;
|
||||
|
@ -30,22 +30,29 @@
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
*
|
||||
* $Id:$
|
||||
*
|
||||
* @(#)pathnames.h 5.2 (Berkeley) 6/1/90
|
||||
*
|
||||
* $Id: pathnames.h,v 1.1.1.1 1995/01/31 06:29:56 amurai Exp $
|
||||
*/
|
||||
|
||||
#ifdef __bsdi__
|
||||
#include <paths.h>
|
||||
#endif
|
||||
|
||||
#define _PATH_ACULOG "/var/log/aculog"
|
||||
#if defined (__FreeBSD__)
|
||||
#if defined(__NetBSD__) || defined(__FreeBSD__)
|
||||
#define _PATH_LOCKDIRNAME "/var/spool/lock/LCK..%s"
|
||||
#else
|
||||
#define _PATH_LOCKDIRNAME "/var/spool/uucp/LCK..%s"
|
||||
#endif
|
||||
#endif
|
||||
#ifdef notdef
|
||||
#define _PATH_LOCKDIRNAME "/var/spool/uucp/LCK/LCK..%s"
|
||||
#endif
|
||||
#define _PATH_PHONES "/etc/phones"
|
||||
#define _PATH_REMOTE "/etc/remote"
|
||||
#if defined(__FreeBSD__)
|
||||
#define _PATH_PPP "/etc/ppp"
|
||||
#else
|
||||
#define _PATH_PPP "/etc"
|
||||
#endif
|
||||
|
@ -15,13 +15,14 @@
|
||||
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* $Id:$
|
||||
* $Id: phase.h,v 1.1.1.1 1995/01/31 06:29:55 amurai Exp $
|
||||
*
|
||||
* TODO:
|
||||
*/
|
||||
|
||||
#ifndef _PHASE_H_
|
||||
#define _PHASE_H_
|
||||
#include "cdefs.h"
|
||||
|
||||
#define PHASE_DEAD 0 /* Link is dead */
|
||||
#define PHASE_ESTABLISH 1 /* Establishing link */
|
||||
@ -31,6 +32,6 @@
|
||||
|
||||
int phase; /* Curent phase */
|
||||
|
||||
extern void NewPhase(int);
|
||||
extern void NewPhase __P((int));
|
||||
extern char *PhaseNames[];
|
||||
#endif
|
||||
|
@ -1,5 +1,5 @@
|
||||
.\" manual page [] for ppp 0.93
|
||||
.\" $Id:$
|
||||
.\" manual page [] for ppp 0.94 beta2 + alpha
|
||||
.\" $Id: ppp.8,v 1.1.1.1 1995/01/31 06:29:58 amurai Exp $
|
||||
.\" SH section heading
|
||||
.\" SS subsection heading
|
||||
.\" LP paragraph
|
||||
@ -17,37 +17,57 @@ ppp \- Point to Point Protocol (aka iijppp)
|
||||
]
|
||||
.SH DESCRIPTION
|
||||
.LP
|
||||
This is user process \fIPPP\fR software package. Normally, \fIPPP\fR is implemented as a part of kernel and hard to debug and/or modify its behavior. However, in this implementation, \fIPPP\fR is implemented as a user process with the help of tunnel device driver.
|
||||
This is user process \fIPPP\fR software package. Normally, \fIPPP\fR
|
||||
is implemented as a part of kernel and hard to debug and/or modify its
|
||||
behavior. However, in this implementation, \fIPPP\fR is implemented as
|
||||
a user process with the help of tunnel device driver.
|
||||
.LP
|
||||
|
||||
.SH Major Features
|
||||
|
||||
.TP 2
|
||||
o
|
||||
Provide interactive user interface. Using its command mode, user can easily enter commands to establish the connection with the peer, check the status of connection, and close the connection.
|
||||
|
||||
o Provide interactive user interface. Using its command mode, user can
|
||||
easily enter commands to establish the connection with the peer, check
|
||||
the status of connection, and close the connection. And now, all
|
||||
functions has password protected if describe your hostname/password in
|
||||
secret file or exist secret file itself.
|
||||
|
||||
.TP 2
|
||||
o
|
||||
Supports both of manual and automatic dialing. Interactive mode has ``term'' command which enables you to talk to your modem directory. When your modem is connected to the peer, and it starts to speak \fIPPP\fR, \fIPPP\fR software detects it and turns into packet mode automatically. Once you have convinced how to connect with the peer, you can write chat script to define necessary dialing and login procedure for later convenience.
|
||||
o Supports both of manual and automatic dialing. Interactive mode has
|
||||
``term'' command which enables you to talk to your modem
|
||||
directory. When your modem is connected to the peer, and it starts to
|
||||
speak \fIPPP\fR, \fIPPP\fR software detects it and turns into packet
|
||||
mode automatically. Once you have convinced how to connect with the
|
||||
peer, you can write chat script to define necessary dialing and login
|
||||
procedure for later convenience.
|
||||
|
||||
.TP 2
|
||||
o
|
||||
Supports on-demand dialup capability. By using auto mode, \fIPPP\fR program will act as a daemon and wait for the packet send to the peer. Once packet is found, daemon automatically dials and establish the connection.
|
||||
o Supports on-demand dialup capability. By using auto mode, \fIPPP\fR
|
||||
program will act as a daemon and wait for the packet send to the peer.
|
||||
Once packet is found, daemon automatically dials and establish the
|
||||
connection.
|
||||
|
||||
.TP 2
|
||||
o
|
||||
Can act as server which accept incoming \fIPPP\fR connection.
|
||||
|
||||
Can act as server which accept incoming \fIPPP\fR connection.
|
||||
|
||||
.TP 2
|
||||
o
|
||||
Supports PAP and CHAP authentification.
|
||||
|
||||
.TP 2
|
||||
o
|
||||
Supports packet filtering. User can define three kinds of filters; ifilter for incoming packet, ofilter for outgoing packet and dfilter to define dialing trigger packet.
|
||||
o
|
||||
Supports Proxy Arp.
|
||||
|
||||
.TP 2
|
||||
o
|
||||
Tunnel driver supports bpf. That is, user can use tcpdump to check packet flow over the \fIPPP\fR link.
|
||||
o Supports packet filtering. User can define four kinds of filters;
|
||||
ifilter for incoming packet, ofilter for outgoing packet, dfilter to
|
||||
define dialing trigger packet and afilter to keep alive a connection
|
||||
by trigger packet.
|
||||
|
||||
.TP 2
|
||||
o Tunnel driver supports bpf. That is, user can use tcpdump to check
|
||||
packet flow over the \fIPPP\fR link.
|
||||
|
||||
.TP 2
|
||||
o
|
||||
@ -58,23 +78,27 @@ o
|
||||
Supports IETF draft Predictor-1 compression.
|
||||
|
||||
.TP 2
|
||||
o
|
||||
Runs under BSDI-1.1 and FreeBSD-1.1. Patch for NeXTSTEP 3.2 is also available on the net.
|
||||
o Runs under BSDI-1.1 and FreeBSD-1.1. Patch for NeXTSTEP 3.2 is also
|
||||
available on the net.
|
||||
|
||||
.SH MANUAL DIALING
|
||||
.LP
|
||||
|
||||
% ppp
|
||||
User Process PPP written by Toshiharu OHNO.
|
||||
-- If you write your hostname and password in ppp.secret,
|
||||
you can't do anything even quit command --
|
||||
ppp on tama> quit
|
||||
what ?
|
||||
ppp on tama> pass <password>
|
||||
-- You can specify modem and device name using following commands.
|
||||
ppp> set line /dev/cua01
|
||||
ppp> set speed 38400
|
||||
ppp> set parity even
|
||||
ppp> show modem
|
||||
ppp ON tama> set line /dev/cua01
|
||||
ppp ON tama> set speed 38400
|
||||
ppp ON tama> set parity even
|
||||
ppp ON tama> show modem
|
||||
-- Modem related parameters are shown in here
|
||||
ppp>
|
||||
ppp ON tama>
|
||||
-- Use term command to talk with your modem
|
||||
ppp> term
|
||||
ppp ON tama> term
|
||||
at
|
||||
OK
|
||||
atdt123456
|
||||
@ -86,44 +110,46 @@ Runs under BSDI-1.1 and FreeBSD-1.1. Patch for NeXTSTEP 3.2 is also available on
|
||||
|
||||
-- When peer start to speak PPP, the program will detect it
|
||||
-- automatically and back to command mode.
|
||||
ppp>
|
||||
ppp on tama>
|
||||
\fBPPP\fR>
|
||||
|
||||
-- NOW, you are get connected !! Note that prompt has changed to
|
||||
-- capital letters
|
||||
PPP> show lcp
|
||||
PPP ON tama> show lcp
|
||||
|
||||
-- You'll see LCP status --
|
||||
|
||||
PPP> show ipcp
|
||||
PPP ON tama> show ipcp
|
||||
|
||||
-- You'll see IPCP status --
|
||||
-- At this point, your machine has host route to the peer.
|
||||
-- If your want to add default route entry, then enter
|
||||
|
||||
PPP> add 0 0 HISADDR
|
||||
PPP ON tama> add 0 0 HISADDR
|
||||
|
||||
-- Here string `HISADDR' represents IP address of connected peer.
|
||||
|
||||
PPP>
|
||||
PPP ON tama>
|
||||
-- Use applications (i.e. ping, telnet, ftp) in other windows
|
||||
|
||||
PPP> show log
|
||||
PPP ON tama> show log
|
||||
|
||||
-- Gives you some logging messages
|
||||
|
||||
PPP> close
|
||||
PPP ON tama> close
|
||||
|
||||
-- Connection is closed, and modem will be hanged.
|
||||
|
||||
ppp> quit
|
||||
ppp ON tama> quit
|
||||
%
|
||||
.LP
|
||||
|
||||
.SH AUTOMATIC DIALING
|
||||
|
||||
.LP
|
||||
To use automatic dialing, you must prepare Dial and Login chat script.See example definition found in ppp.conf.sample(Format of ppp.conf is pretty simple.)
|
||||
.LP
|
||||
To use automatic dialing, you must prepare Dial and Login chat script.
|
||||
See example definition found in ppp.conf.sample (Format of ppp.conf is
|
||||
pretty simple.)
|
||||
|
||||
.TP 2
|
||||
o
|
||||
@ -142,7 +168,10 @@ o
|
||||
Command line must contains space or tab at first column.
|
||||
|
||||
.LP
|
||||
If ppp.conf is ready, specify destination label name when you invoke ppp. Commands associated with destination label is executed when ppp command is invoked. Note that commands associated with ``default'' label is ALWAYS executed.
|
||||
If ppp.conf is ready, specify destination label name when you invoke
|
||||
ppp. Commands associated with destination label is executed when ppp
|
||||
command is invoked. Note that commands associated with ``default''
|
||||
label is ALWAYS executed.
|
||||
|
||||
Once connection is made, you'll find that prompt is changed to
|
||||
|
||||
@ -150,40 +179,52 @@ Once connection is made, you'll find that prompt is changed to
|
||||
|
||||
% ppp pm2
|
||||
...
|
||||
ppp> dial
|
||||
ppp ON tama> dial
|
||||
dial OK!
|
||||
login OK!
|
||||
PPP>
|
||||
PPP ON tama>
|
||||
|
||||
If ppp.linkup file is available, its contents are executed when
|
||||
\fIPPP\fR link is connected. See example which add default route.
|
||||
The string HISADDR matches with IP address of connected peer.
|
||||
|
||||
If ppp.linkup file is available, its contents are executed when \fIPPP\fR link is connected. See example which add default route. The string HISADDR matches with IP address of connected peer.
|
||||
.LP
|
||||
|
||||
.SH DAIL ON DEMAND
|
||||
|
||||
.LP
|
||||
To play with demand dialing, you must use -auto option. Also, you must specify destination label with proper setup in ppp.conf. It must contain ``ifaddr'' command to define peer's IP address. (refer /etc/ppp/ppp.conf.sample)
|
||||
.LP
|
||||
To play with demand dialing, you must use -auto option. Also, you
|
||||
must specify destination label with proper setup in ppp.conf. It must
|
||||
contain ``ifaddr'' command to define peer's IP address. (refer
|
||||
/etc/ppp/ppp.conf.sample)
|
||||
|
||||
|
||||
% ppp -auto pm2demand
|
||||
...
|
||||
%
|
||||
|
||||
.LP
|
||||
When -auto is specified, \fIPPP\fR program works as a daemon. But, you are still able to use command features to check its behavior.
|
||||
.LP
|
||||
When -auto is specified, \fIPPP\fR program works as a daemon. But,
|
||||
you are still able to use command features to check its behavior.
|
||||
|
||||
|
||||
% telnet localhost 3000
|
||||
...
|
||||
PPP> show ipcp
|
||||
PPP on tama> show ipcp
|
||||
....
|
||||
|
||||
.LP
|
||||
Each ppp has associated port number, which is computed as "3000 + tunnel_device_number". If 3000 is not good base number, edit defs.h. When packet toward to remote network is detected, \fIPPP\fR will take dialing action and try to connect with the peer. If dialing is failed, program will wait for 30 seconds. Once this hold time expired, another trigger packet cause dialing action. Note that automatic re-dialing is NOT implemented.
|
||||
.LP
|
||||
Each ppp has associated port number, which is computed as "3000 +
|
||||
tunnel_device_number". If 3000 is not good base number, edit defs.h.
|
||||
When packet toward to remote network is detected, \fIPPP\fR will take
|
||||
dialing action and try to connect with the peer. If dialing is failed,
|
||||
program will wait for 30 seconds. Once this hold time expired, another
|
||||
trigger packet cause dialing action. Note that automatic re-dialing is
|
||||
NOT implemented.
|
||||
|
||||
|
||||
To terminate program, use
|
||||
|
||||
PPP> close
|
||||
PPP on tama> close
|
||||
\fBppp\fR> quit all
|
||||
|
||||
.LP
|
||||
@ -291,18 +332,26 @@ ppp:*:21:0:PPP Login User:/home/ppp:/usr/local/bin/ppplogin
|
||||
.SH Controlling IP address
|
||||
|
||||
.LP
|
||||
\fIPPP\fR uses IPCP to negotiate IP addresses. Each side of node informs IP address that willing to use to the peer, and if requested IP address is acceptable, \fIPPP\fR returns ACK to requester. Otherwise, \fIPPP\fR returns NAK to suggest the peer to use different IP address. When both side of nodes agrees to accept the received request (and send ACK), IPCP is reached to open state and network level connection is established.
|
||||
.LP
|
||||
\fIPPP\fR uses IPCP to negotiate IP addresses. Each side of node
|
||||
informs IP address that willing to use to the peer, and if requested
|
||||
IP address is acceptable, \fIPPP\fR returns ACK to
|
||||
requester. Otherwise, \fIPPP\fR returns NAK to suggest the peer to use
|
||||
different IP address. When both side of nodes agrees to accept the
|
||||
received request (and send ACK), IPCP is reached to open state and
|
||||
network level connection is established.
|
||||
|
||||
|
||||
.LP
|
||||
To control, this IPCP behavior, this implementation has ``set ifaddr'' to define MY and HIS IP address.
|
||||
.LP
|
||||
To control, this IPCP behavior, this implementation has ``set
|
||||
ifaddr'' to define MY and HIS IP address.
|
||||
|
||||
|
||||
.TP3
|
||||
ifaddr src_addr dst_addr
|
||||
|
||||
.LP
|
||||
Where, src_addr is the IP address that my side is willing to use, and dst_addr is the IP address which his side should use.
|
||||
Where, src_addr is the IP address that my side is willing to use, and
|
||||
dst_addr is the IP address which his side should use.
|
||||
.LP
|
||||
|
||||
.TP3
|
||||
@ -311,46 +360,51 @@ ifaddr 192.244.177.38 192.244.177.2
|
||||
For example, above specification means
|
||||
|
||||
.TP
|
||||
o
|
||||
I strongly want to use 192.244.177.38 as my side. I'll disagree when peer suggest me to use other addresses.
|
||||
o I strongly want to use 192.244.177.38 as my side. I'll disagree when
|
||||
peer suggest me to use other addresses.
|
||||
|
||||
.TP 2
|
||||
o
|
||||
I strongly insists peer to use 192.244.177.2 as his side address. I don't permit him to use any IP address but 192.244.177.2. When peer request other IP address, I always suggest him to use 192.244.177.2.
|
||||
o I strongly insists peer to use 192.244.177.2 as his side address. I
|
||||
don't permit him to use any IP address but 192.244.177.2. When peer
|
||||
request other IP address, I always suggest him to use 192.244.177.2.
|
||||
|
||||
.LP
|
||||
This is all right, when each side has pre-determined IP address.
|
||||
However, it is often the case one side is acting as a server which
|
||||
controls IP address and the other side should obey the direction from him.
|
||||
In order to allow more flexible behavior, `ifaddr' command allows user to specify IP address more loosely.
|
||||
.LP
|
||||
However, it is often the case one side is acting as a server which
|
||||
controls IP address and the other side should obey the direction from
|
||||
him. In order to allow more flexible behavior, `ifaddr' command
|
||||
allows user to specify IP address more loosely.
|
||||
|
||||
|
||||
.TP 2
|
||||
ifaddr 192.244.177.38/24 192.244.177.2/20
|
||||
|
||||
Number followed by slash (/) represents number of bits significant in IP address. That is, this example means
|
||||
Number followed by slash (/) represents number of bits significant in
|
||||
IP address. That is, this example means
|
||||
|
||||
.TP 2
|
||||
o
|
||||
I'd like to use 192.244.177.38 as my side address, if it is possible. But I also accept any IP address between 192.244.177.0 and 192.244.177.255.
|
||||
o I'd like to use 192.244.177.38 as my side address, if it is
|
||||
possible. But I also accept any IP address between 192.244.177.0 and
|
||||
192.244.177.255.
|
||||
|
||||
.TP 2
|
||||
o
|
||||
I'd like to make him to use 192.244.177.2 as his side address. But I also permit him to use any IP address between 192.244.176.0 and 192.244.191.255.
|
||||
o I'd like to make him to use 192.244.177.2 as his side address. But
|
||||
I also permit him to use any IP address between 192.244.176.0 and
|
||||
192.244.191.255.
|
||||
|
||||
Notes:
|
||||
|
||||
.TP 2
|
||||
o
|
||||
As you may have already noticed, 192.244.177.2 is equivalent to say 192.244.177.2/32.
|
||||
o As you may have already noticed, 192.244.177.2 is equivalent to say
|
||||
192.244.177.2/32.
|
||||
|
||||
.TP 2
|
||||
o
|
||||
As an exception, 0 is equivalent to 0.0.0.0/0. Means, I have no idea about IP address and obey what he says.
|
||||
o As an exception, 0 is equivalent to 0.0.0.0/0. Means, I have no idea
|
||||
about IP address and obey what he says.
|
||||
|
||||
.TP 2
|
||||
o
|
||||
192.244.177.2/0 means that I'll accept/permit any IP address but I'll try to insist to use 192.244.177.2 at first.
|
||||
o 192.244.177.2/0 means that I'll accept/permit any IP address but
|
||||
I'll try to insist to use 192.244.177.2 at first.
|
||||
|
||||
.SH Connecting with service provider
|
||||
|
||||
@ -388,14 +442,15 @@ add next lines into your ppp.conf.
|
||||
.TP 3
|
||||
|
||||
.LP
|
||||
Please refer /etc/ppp/example/ppp.conf.iij for some real examples.
|
||||
Please refer /etc/ppp/ppp.conf.iij for some real examples.
|
||||
.LP
|
||||
|
||||
.SH Logging facility
|
||||
|
||||
.LP
|
||||
\fI\fIPPP\fR\fR is able to generate following level log info as /var/log/ppp.log
|
||||
.LP
|
||||
\fI\fIPPP\fR\fR is able to generate following level log info as
|
||||
/var/log/ppp.log
|
||||
|
||||
|
||||
.TP
|
||||
.B Phase
|
||||
@ -413,16 +468,16 @@ Generate LCP/IPCP packet trace
|
||||
.B TCP/IP
|
||||
Dump TCP/IP packet
|
||||
.TP
|
||||
HDLC
|
||||
.B HDLC
|
||||
Dump HDLC packet in hex
|
||||
.TP
|
||||
.B Async
|
||||
Dump async level packet in hex
|
||||
|
||||
.LP
|
||||
``set debug'' command allows you to set logging output level,
|
||||
and multiple levels can be specified.
|
||||
Default is equivalent to ``set debug phase lcp''.
|
||||
``set debug'' command allows you to set logging output level, and
|
||||
multiple levels can be specified. Default is equivalent to ``set
|
||||
debug phase lcp''.
|
||||
|
||||
.SH For more details
|
||||
|
||||
@ -449,13 +504,12 @@ Please contact to author if you need old driver code.
|
||||
.SH FILES
|
||||
.LP
|
||||
\fIPPP\fR may refers three files, ppp.conf, ppp.linkup and ppp.secret.
|
||||
These files are placed in /etc/ppp,
|
||||
but user can create his own files under HOME directory as .ppp.conf,
|
||||
.ppp.linkup and .ppp.secret.
|
||||
the ppp always try to consult to user's personal setup first.
|
||||
These files are placed in /etc/ppp, but user can create his own files
|
||||
under HOME directory as .ppp.conf,.ppp.linkup and .ppp.secret.the ppp
|
||||
always try to consult to user's personal setup first.
|
||||
|
||||
.TP
|
||||
.B $HOME/ppp/.ppp.[linkup|secret]
|
||||
.B $HOME/ppp/.ppp.[conf|linkup|secret]
|
||||
User depend configuration files.
|
||||
|
||||
.TP
|
||||
@ -481,12 +535,10 @@ Logging and debug information file.
|
||||
tty port locking file.
|
||||
|
||||
.SH BUGS
|
||||
A Proxy arp is not support, yet.
|
||||
The TTS is little bit longer than pppd2.1, it's under improving ;-)
|
||||
|
||||
.SH HISTORY
|
||||
This programm has deliverd into core since FreeBSD-2.1
|
||||
by Atsushi Murai (amurai@spec.co.jp).
|
||||
This programm has deliverd into core since FreeBSD-2.1 by Atsushi
|
||||
Murai (amurai@spec.co.jp).
|
||||
|
||||
.SH AUTHORS
|
||||
Toshiharu OHNO (tony-o@iij.ad.jp)
|
||||
|
@ -1,5 +1,5 @@
|
||||
.\" manual page [] for ppp 0.93
|
||||
.\" $Id:$
|
||||
.\" manual page [] for ppp 0.94 beta2 + alpha
|
||||
.\" $Id: ppp.8,v 1.1.1.1 1995/01/31 06:29:58 amurai Exp $
|
||||
.\" SH section heading
|
||||
.\" SS subsection heading
|
||||
.\" LP paragraph
|
||||
@ -17,37 +17,57 @@ ppp \- Point to Point Protocol (aka iijppp)
|
||||
]
|
||||
.SH DESCRIPTION
|
||||
.LP
|
||||
This is user process \fIPPP\fR software package. Normally, \fIPPP\fR is implemented as a part of kernel and hard to debug and/or modify its behavior. However, in this implementation, \fIPPP\fR is implemented as a user process with the help of tunnel device driver.
|
||||
This is user process \fIPPP\fR software package. Normally, \fIPPP\fR
|
||||
is implemented as a part of kernel and hard to debug and/or modify its
|
||||
behavior. However, in this implementation, \fIPPP\fR is implemented as
|
||||
a user process with the help of tunnel device driver.
|
||||
.LP
|
||||
|
||||
.SH Major Features
|
||||
|
||||
.TP 2
|
||||
o
|
||||
Provide interactive user interface. Using its command mode, user can easily enter commands to establish the connection with the peer, check the status of connection, and close the connection.
|
||||
|
||||
o Provide interactive user interface. Using its command mode, user can
|
||||
easily enter commands to establish the connection with the peer, check
|
||||
the status of connection, and close the connection. And now, all
|
||||
functions has password protected if describe your hostname/password in
|
||||
secret file or exist secret file itself.
|
||||
|
||||
.TP 2
|
||||
o
|
||||
Supports both of manual and automatic dialing. Interactive mode has ``term'' command which enables you to talk to your modem directory. When your modem is connected to the peer, and it starts to speak \fIPPP\fR, \fIPPP\fR software detects it and turns into packet mode automatically. Once you have convinced how to connect with the peer, you can write chat script to define necessary dialing and login procedure for later convenience.
|
||||
o Supports both of manual and automatic dialing. Interactive mode has
|
||||
``term'' command which enables you to talk to your modem
|
||||
directory. When your modem is connected to the peer, and it starts to
|
||||
speak \fIPPP\fR, \fIPPP\fR software detects it and turns into packet
|
||||
mode automatically. Once you have convinced how to connect with the
|
||||
peer, you can write chat script to define necessary dialing and login
|
||||
procedure for later convenience.
|
||||
|
||||
.TP 2
|
||||
o
|
||||
Supports on-demand dialup capability. By using auto mode, \fIPPP\fR program will act as a daemon and wait for the packet send to the peer. Once packet is found, daemon automatically dials and establish the connection.
|
||||
o Supports on-demand dialup capability. By using auto mode, \fIPPP\fR
|
||||
program will act as a daemon and wait for the packet send to the peer.
|
||||
Once packet is found, daemon automatically dials and establish the
|
||||
connection.
|
||||
|
||||
.TP 2
|
||||
o
|
||||
Can act as server which accept incoming \fIPPP\fR connection.
|
||||
|
||||
Can act as server which accept incoming \fIPPP\fR connection.
|
||||
|
||||
.TP 2
|
||||
o
|
||||
Supports PAP and CHAP authentification.
|
||||
|
||||
.TP 2
|
||||
o
|
||||
Supports packet filtering. User can define three kinds of filters; ifilter for incoming packet, ofilter for outgoing packet and dfilter to define dialing trigger packet.
|
||||
o
|
||||
Supports Proxy Arp.
|
||||
|
||||
.TP 2
|
||||
o
|
||||
Tunnel driver supports bpf. That is, user can use tcpdump to check packet flow over the \fIPPP\fR link.
|
||||
o Supports packet filtering. User can define four kinds of filters;
|
||||
ifilter for incoming packet, ofilter for outgoing packet, dfilter to
|
||||
define dialing trigger packet and afilter to keep alive a connection
|
||||
by trigger packet.
|
||||
|
||||
.TP 2
|
||||
o Tunnel driver supports bpf. That is, user can use tcpdump to check
|
||||
packet flow over the \fIPPP\fR link.
|
||||
|
||||
.TP 2
|
||||
o
|
||||
@ -58,23 +78,27 @@ o
|
||||
Supports IETF draft Predictor-1 compression.
|
||||
|
||||
.TP 2
|
||||
o
|
||||
Runs under BSDI-1.1 and FreeBSD-1.1. Patch for NeXTSTEP 3.2 is also available on the net.
|
||||
o Runs under BSDI-1.1 and FreeBSD-1.1. Patch for NeXTSTEP 3.2 is also
|
||||
available on the net.
|
||||
|
||||
.SH MANUAL DIALING
|
||||
.LP
|
||||
|
||||
% ppp
|
||||
User Process PPP written by Toshiharu OHNO.
|
||||
-- If you write your hostname and password in ppp.secret,
|
||||
you can't do anything even quit command --
|
||||
ppp on tama> quit
|
||||
what ?
|
||||
ppp on tama> pass <password>
|
||||
-- You can specify modem and device name using following commands.
|
||||
ppp> set line /dev/cua01
|
||||
ppp> set speed 38400
|
||||
ppp> set parity even
|
||||
ppp> show modem
|
||||
ppp ON tama> set line /dev/cua01
|
||||
ppp ON tama> set speed 38400
|
||||
ppp ON tama> set parity even
|
||||
ppp ON tama> show modem
|
||||
-- Modem related parameters are shown in here
|
||||
ppp>
|
||||
ppp ON tama>
|
||||
-- Use term command to talk with your modem
|
||||
ppp> term
|
||||
ppp ON tama> term
|
||||
at
|
||||
OK
|
||||
atdt123456
|
||||
@ -86,44 +110,46 @@ Runs under BSDI-1.1 and FreeBSD-1.1. Patch for NeXTSTEP 3.2 is also available on
|
||||
|
||||
-- When peer start to speak PPP, the program will detect it
|
||||
-- automatically and back to command mode.
|
||||
ppp>
|
||||
ppp on tama>
|
||||
\fBPPP\fR>
|
||||
|
||||
-- NOW, you are get connected !! Note that prompt has changed to
|
||||
-- capital letters
|
||||
PPP> show lcp
|
||||
PPP ON tama> show lcp
|
||||
|
||||
-- You'll see LCP status --
|
||||
|
||||
PPP> show ipcp
|
||||
PPP ON tama> show ipcp
|
||||
|
||||
-- You'll see IPCP status --
|
||||
-- At this point, your machine has host route to the peer.
|
||||
-- If your want to add default route entry, then enter
|
||||
|
||||
PPP> add 0 0 HISADDR
|
||||
PPP ON tama> add 0 0 HISADDR
|
||||
|
||||
-- Here string `HISADDR' represents IP address of connected peer.
|
||||
|
||||
PPP>
|
||||
PPP ON tama>
|
||||
-- Use applications (i.e. ping, telnet, ftp) in other windows
|
||||
|
||||
PPP> show log
|
||||
PPP ON tama> show log
|
||||
|
||||
-- Gives you some logging messages
|
||||
|
||||
PPP> close
|
||||
PPP ON tama> close
|
||||
|
||||
-- Connection is closed, and modem will be hanged.
|
||||
|
||||
ppp> quit
|
||||
ppp ON tama> quit
|
||||
%
|
||||
.LP
|
||||
|
||||
.SH AUTOMATIC DIALING
|
||||
|
||||
.LP
|
||||
To use automatic dialing, you must prepare Dial and Login chat script.See example definition found in ppp.conf.sample(Format of ppp.conf is pretty simple.)
|
||||
.LP
|
||||
To use automatic dialing, you must prepare Dial and Login chat script.
|
||||
See example definition found in ppp.conf.sample (Format of ppp.conf is
|
||||
pretty simple.)
|
||||
|
||||
.TP 2
|
||||
o
|
||||
@ -142,7 +168,10 @@ o
|
||||
Command line must contains space or tab at first column.
|
||||
|
||||
.LP
|
||||
If ppp.conf is ready, specify destination label name when you invoke ppp. Commands associated with destination label is executed when ppp command is invoked. Note that commands associated with ``default'' label is ALWAYS executed.
|
||||
If ppp.conf is ready, specify destination label name when you invoke
|
||||
ppp. Commands associated with destination label is executed when ppp
|
||||
command is invoked. Note that commands associated with ``default''
|
||||
label is ALWAYS executed.
|
||||
|
||||
Once connection is made, you'll find that prompt is changed to
|
||||
|
||||
@ -150,40 +179,52 @@ Once connection is made, you'll find that prompt is changed to
|
||||
|
||||
% ppp pm2
|
||||
...
|
||||
ppp> dial
|
||||
ppp ON tama> dial
|
||||
dial OK!
|
||||
login OK!
|
||||
PPP>
|
||||
PPP ON tama>
|
||||
|
||||
If ppp.linkup file is available, its contents are executed when
|
||||
\fIPPP\fR link is connected. See example which add default route.
|
||||
The string HISADDR matches with IP address of connected peer.
|
||||
|
||||
If ppp.linkup file is available, its contents are executed when \fIPPP\fR link is connected. See example which add default route. The string HISADDR matches with IP address of connected peer.
|
||||
.LP
|
||||
|
||||
.SH DAIL ON DEMAND
|
||||
|
||||
.LP
|
||||
To play with demand dialing, you must use -auto option. Also, you must specify destination label with proper setup in ppp.conf. It must contain ``ifaddr'' command to define peer's IP address. (refer /etc/ppp/ppp.conf.sample)
|
||||
.LP
|
||||
To play with demand dialing, you must use -auto option. Also, you
|
||||
must specify destination label with proper setup in ppp.conf. It must
|
||||
contain ``ifaddr'' command to define peer's IP address. (refer
|
||||
/etc/ppp/ppp.conf.sample)
|
||||
|
||||
|
||||
% ppp -auto pm2demand
|
||||
...
|
||||
%
|
||||
|
||||
.LP
|
||||
When -auto is specified, \fIPPP\fR program works as a daemon. But, you are still able to use command features to check its behavior.
|
||||
.LP
|
||||
When -auto is specified, \fIPPP\fR program works as a daemon. But,
|
||||
you are still able to use command features to check its behavior.
|
||||
|
||||
|
||||
% telnet localhost 3000
|
||||
...
|
||||
PPP> show ipcp
|
||||
PPP on tama> show ipcp
|
||||
....
|
||||
|
||||
.LP
|
||||
Each ppp has associated port number, which is computed as "3000 + tunnel_device_number". If 3000 is not good base number, edit defs.h. When packet toward to remote network is detected, \fIPPP\fR will take dialing action and try to connect with the peer. If dialing is failed, program will wait for 30 seconds. Once this hold time expired, another trigger packet cause dialing action. Note that automatic re-dialing is NOT implemented.
|
||||
.LP
|
||||
Each ppp has associated port number, which is computed as "3000 +
|
||||
tunnel_device_number". If 3000 is not good base number, edit defs.h.
|
||||
When packet toward to remote network is detected, \fIPPP\fR will take
|
||||
dialing action and try to connect with the peer. If dialing is failed,
|
||||
program will wait for 30 seconds. Once this hold time expired, another
|
||||
trigger packet cause dialing action. Note that automatic re-dialing is
|
||||
NOT implemented.
|
||||
|
||||
|
||||
To terminate program, use
|
||||
|
||||
PPP> close
|
||||
PPP on tama> close
|
||||
\fBppp\fR> quit all
|
||||
|
||||
.LP
|
||||
@ -291,18 +332,26 @@ ppp:*:21:0:PPP Login User:/home/ppp:/usr/local/bin/ppplogin
|
||||
.SH Controlling IP address
|
||||
|
||||
.LP
|
||||
\fIPPP\fR uses IPCP to negotiate IP addresses. Each side of node informs IP address that willing to use to the peer, and if requested IP address is acceptable, \fIPPP\fR returns ACK to requester. Otherwise, \fIPPP\fR returns NAK to suggest the peer to use different IP address. When both side of nodes agrees to accept the received request (and send ACK), IPCP is reached to open state and network level connection is established.
|
||||
.LP
|
||||
\fIPPP\fR uses IPCP to negotiate IP addresses. Each side of node
|
||||
informs IP address that willing to use to the peer, and if requested
|
||||
IP address is acceptable, \fIPPP\fR returns ACK to
|
||||
requester. Otherwise, \fIPPP\fR returns NAK to suggest the peer to use
|
||||
different IP address. When both side of nodes agrees to accept the
|
||||
received request (and send ACK), IPCP is reached to open state and
|
||||
network level connection is established.
|
||||
|
||||
|
||||
.LP
|
||||
To control, this IPCP behavior, this implementation has ``set ifaddr'' to define MY and HIS IP address.
|
||||
.LP
|
||||
To control, this IPCP behavior, this implementation has ``set
|
||||
ifaddr'' to define MY and HIS IP address.
|
||||
|
||||
|
||||
.TP3
|
||||
ifaddr src_addr dst_addr
|
||||
|
||||
.LP
|
||||
Where, src_addr is the IP address that my side is willing to use, and dst_addr is the IP address which his side should use.
|
||||
Where, src_addr is the IP address that my side is willing to use, and
|
||||
dst_addr is the IP address which his side should use.
|
||||
.LP
|
||||
|
||||
.TP3
|
||||
@ -311,46 +360,51 @@ ifaddr 192.244.177.38 192.244.177.2
|
||||
For example, above specification means
|
||||
|
||||
.TP
|
||||
o
|
||||
I strongly want to use 192.244.177.38 as my side. I'll disagree when peer suggest me to use other addresses.
|
||||
o I strongly want to use 192.244.177.38 as my side. I'll disagree when
|
||||
peer suggest me to use other addresses.
|
||||
|
||||
.TP 2
|
||||
o
|
||||
I strongly insists peer to use 192.244.177.2 as his side address. I don't permit him to use any IP address but 192.244.177.2. When peer request other IP address, I always suggest him to use 192.244.177.2.
|
||||
o I strongly insists peer to use 192.244.177.2 as his side address. I
|
||||
don't permit him to use any IP address but 192.244.177.2. When peer
|
||||
request other IP address, I always suggest him to use 192.244.177.2.
|
||||
|
||||
.LP
|
||||
This is all right, when each side has pre-determined IP address.
|
||||
However, it is often the case one side is acting as a server which
|
||||
controls IP address and the other side should obey the direction from him.
|
||||
In order to allow more flexible behavior, `ifaddr' command allows user to specify IP address more loosely.
|
||||
.LP
|
||||
However, it is often the case one side is acting as a server which
|
||||
controls IP address and the other side should obey the direction from
|
||||
him. In order to allow more flexible behavior, `ifaddr' command
|
||||
allows user to specify IP address more loosely.
|
||||
|
||||
|
||||
.TP 2
|
||||
ifaddr 192.244.177.38/24 192.244.177.2/20
|
||||
|
||||
Number followed by slash (/) represents number of bits significant in IP address. That is, this example means
|
||||
Number followed by slash (/) represents number of bits significant in
|
||||
IP address. That is, this example means
|
||||
|
||||
.TP 2
|
||||
o
|
||||
I'd like to use 192.244.177.38 as my side address, if it is possible. But I also accept any IP address between 192.244.177.0 and 192.244.177.255.
|
||||
o I'd like to use 192.244.177.38 as my side address, if it is
|
||||
possible. But I also accept any IP address between 192.244.177.0 and
|
||||
192.244.177.255.
|
||||
|
||||
.TP 2
|
||||
o
|
||||
I'd like to make him to use 192.244.177.2 as his side address. But I also permit him to use any IP address between 192.244.176.0 and 192.244.191.255.
|
||||
o I'd like to make him to use 192.244.177.2 as his side address. But
|
||||
I also permit him to use any IP address between 192.244.176.0 and
|
||||
192.244.191.255.
|
||||
|
||||
Notes:
|
||||
|
||||
.TP 2
|
||||
o
|
||||
As you may have already noticed, 192.244.177.2 is equivalent to say 192.244.177.2/32.
|
||||
o As you may have already noticed, 192.244.177.2 is equivalent to say
|
||||
192.244.177.2/32.
|
||||
|
||||
.TP 2
|
||||
o
|
||||
As an exception, 0 is equivalent to 0.0.0.0/0. Means, I have no idea about IP address and obey what he says.
|
||||
o As an exception, 0 is equivalent to 0.0.0.0/0. Means, I have no idea
|
||||
about IP address and obey what he says.
|
||||
|
||||
.TP 2
|
||||
o
|
||||
192.244.177.2/0 means that I'll accept/permit any IP address but I'll try to insist to use 192.244.177.2 at first.
|
||||
o 192.244.177.2/0 means that I'll accept/permit any IP address but
|
||||
I'll try to insist to use 192.244.177.2 at first.
|
||||
|
||||
.SH Connecting with service provider
|
||||
|
||||
@ -388,14 +442,15 @@ add next lines into your ppp.conf.
|
||||
.TP 3
|
||||
|
||||
.LP
|
||||
Please refer /etc/ppp/example/ppp.conf.iij for some real examples.
|
||||
Please refer /etc/ppp/ppp.conf.iij for some real examples.
|
||||
.LP
|
||||
|
||||
.SH Logging facility
|
||||
|
||||
.LP
|
||||
\fI\fIPPP\fR\fR is able to generate following level log info as /var/log/ppp.log
|
||||
.LP
|
||||
\fI\fIPPP\fR\fR is able to generate following level log info as
|
||||
/var/log/ppp.log
|
||||
|
||||
|
||||
.TP
|
||||
.B Phase
|
||||
@ -413,16 +468,16 @@ Generate LCP/IPCP packet trace
|
||||
.B TCP/IP
|
||||
Dump TCP/IP packet
|
||||
.TP
|
||||
HDLC
|
||||
.B HDLC
|
||||
Dump HDLC packet in hex
|
||||
.TP
|
||||
.B Async
|
||||
Dump async level packet in hex
|
||||
|
||||
.LP
|
||||
``set debug'' command allows you to set logging output level,
|
||||
and multiple levels can be specified.
|
||||
Default is equivalent to ``set debug phase lcp''.
|
||||
``set debug'' command allows you to set logging output level, and
|
||||
multiple levels can be specified. Default is equivalent to ``set
|
||||
debug phase lcp''.
|
||||
|
||||
.SH For more details
|
||||
|
||||
@ -449,13 +504,12 @@ Please contact to author if you need old driver code.
|
||||
.SH FILES
|
||||
.LP
|
||||
\fIPPP\fR may refers three files, ppp.conf, ppp.linkup and ppp.secret.
|
||||
These files are placed in /etc/ppp,
|
||||
but user can create his own files under HOME directory as .ppp.conf,
|
||||
.ppp.linkup and .ppp.secret.
|
||||
the ppp always try to consult to user's personal setup first.
|
||||
These files are placed in /etc/ppp, but user can create his own files
|
||||
under HOME directory as .ppp.conf,.ppp.linkup and .ppp.secret.the ppp
|
||||
always try to consult to user's personal setup first.
|
||||
|
||||
.TP
|
||||
.B $HOME/ppp/.ppp.[linkup|secret]
|
||||
.B $HOME/ppp/.ppp.[conf|linkup|secret]
|
||||
User depend configuration files.
|
||||
|
||||
.TP
|
||||
@ -481,12 +535,10 @@ Logging and debug information file.
|
||||
tty port locking file.
|
||||
|
||||
.SH BUGS
|
||||
A Proxy arp is not support, yet.
|
||||
The TTS is little bit longer than pppd2.1, it's under improving ;-)
|
||||
|
||||
.SH HISTORY
|
||||
This programm has deliverd into core since FreeBSD-2.1
|
||||
by Atsushi Murai (amurai@spec.co.jp).
|
||||
This programm has deliverd into core since FreeBSD-2.1 by Atsushi
|
||||
Murai (amurai@spec.co.jp).
|
||||
|
||||
.SH AUTHORS
|
||||
Toshiharu OHNO (tony-o@iij.ad.jp)
|
||||
|
@ -1,31 +1,12 @@
|
||||
/*
|
||||
* Written by Toshiharu OHNO (tony-o@iij.ad.jp)
|
||||
*
|
||||
* Copyright (C) 1993, Internet Initiative Japan, Inc. All rights reserverd.
|
||||
*
|
||||
* Redistribution and use in source and binary forms are permitted
|
||||
* provided that the above copyright notice and this paragraph are
|
||||
* duplicated in all such forms and that any documentation,
|
||||
* advertising materials, and other materials related to such
|
||||
* distribution and use acknowledge that the software was developed
|
||||
* by the Internet Initiative Japan. The name of the
|
||||
* IIJ may not be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* $Id:$
|
||||
*
|
||||
* TODO:
|
||||
*/
|
||||
|
||||
#include "fsm.h"
|
||||
#include "hdlc.h"
|
||||
#include "lcpproto.h"
|
||||
#include "ccp.h"
|
||||
|
||||
/*
|
||||
*
|
||||
* $Id:$
|
||||
*
|
||||
* pred.c -- Test program for Dave Rand's rendition of the
|
||||
* predictor algorithm
|
||||
* Updated by: iand@labtam.labtam.oz.au (Ian Donaldson)
|
||||
|
@ -18,6 +18,7 @@
|
||||
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* $Id:$
|
||||
*
|
||||
*/
|
||||
#include <sys/types.h>
|
||||
#include <machine/endian.h>
|
||||
@ -30,8 +31,7 @@
|
||||
#include <netinet/in_systm.h>
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>
|
||||
#if __FreeBSD__ >= 2
|
||||
#include <osreldate.h>
|
||||
#if (BSD >= 199306)
|
||||
#include <sys/sysctl.h>
|
||||
#else
|
||||
#include <sys/kinfo.h>
|
||||
@ -170,18 +170,21 @@ ShowRoute()
|
||||
int *lp;
|
||||
int needed, nb;
|
||||
u_long mask;
|
||||
#if ( __FreeBSD_version >= 199412 )
|
||||
int mib[6];
|
||||
#if (BSD >= 199306)
|
||||
int mib[6];
|
||||
#endif
|
||||
|
||||
#if ( __FreeBSD_version >= 199412 )
|
||||
#if (BSD >= 199306)
|
||||
mib[0] = CTL_NET;
|
||||
mib[1] = PF_ROUTE;
|
||||
mib[2] = 0; /* protocol */
|
||||
mib[3] = 0; /* wildcard address family */
|
||||
mib[2] = 0;
|
||||
mib[3] = 0;
|
||||
mib[4] = NET_RT_DUMP;
|
||||
mib[5] = 0; /* no flags */
|
||||
needed = sysctl(mib, 6, NULL, &needed, NULL, 0 );
|
||||
mib[5] = 0;
|
||||
if (sysctl(mib, 6, NULL, &needed, NULL, 0) < 0) {
|
||||
perror("sysctl-estimate");
|
||||
return(1);
|
||||
}
|
||||
#else
|
||||
needed = getkerninfo(KINFO_RT_DUMP, 0, 0, 0);
|
||||
#endif
|
||||
@ -190,9 +193,11 @@ ShowRoute()
|
||||
sp = malloc(needed);
|
||||
if (sp == NULL)
|
||||
return(1);
|
||||
#if ( __FreeBSD_version >= 199412 )
|
||||
if (sysctl(mib, 6, sp, &needed, NULL, 0 ) < 0)
|
||||
#if (BSD >= 199306)
|
||||
if (sysctl(mib, 6, sp, &needed, NULL, 0) < 0) {
|
||||
perror("sysctl-getroute");
|
||||
return(1);
|
||||
}
|
||||
#else
|
||||
if (getkerninfo(KINFO_RT_DUMP, sp, &needed, 0) < 0)
|
||||
return(1);
|
||||
@ -250,24 +255,28 @@ int all;
|
||||
u_long mask;
|
||||
int *lp, nb;
|
||||
u_char *wp;
|
||||
#if ( __FreeBSD_version >= 199412 )
|
||||
int mib[6];
|
||||
#if (BSD >= 199306)
|
||||
int mib[6];
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG
|
||||
logprintf("DeleteIfRoutes (%d)\n", IfIndex);
|
||||
#endif
|
||||
#if ( __FreeBSD_version >= 199412 )
|
||||
#if (BSD >= 199306)
|
||||
mib[0] = CTL_NET;
|
||||
mib[1] = PF_ROUTE;
|
||||
mib[2] = 0; /* protocol */
|
||||
mib[3] = 0; /* wildcard address family */
|
||||
mib[2] = 0;
|
||||
mib[3] = 0;
|
||||
mib[4] = NET_RT_DUMP;
|
||||
mib[5] = 0; /* no flags */
|
||||
needed = sysctl(mib, 6, NULL, &needed, NULL, 0 );
|
||||
mib[5] = 0;
|
||||
if (sysctl(mib, 6, NULL, &needed, NULL, 0) < 0) {
|
||||
perror("sysctl-estimate");
|
||||
return;
|
||||
}
|
||||
#else
|
||||
needed = getkerninfo(KINFO_RT_DUMP, 0, 0, 0);
|
||||
#endif
|
||||
|
||||
if (needed < 0)
|
||||
return;
|
||||
|
||||
@ -275,9 +284,10 @@ int all;
|
||||
if (sp == NULL)
|
||||
return;
|
||||
|
||||
#if ( __FreeBSD_version >= 199412 )
|
||||
if (sysctl(mib, 6, sp, &needed, NULL, 0 ) < 0) {
|
||||
#if (BSD >= 199306)
|
||||
if (sysctl(mib, 6, sp, &needed, NULL, 0) < 0) {
|
||||
free(sp);
|
||||
perror("sysctl-getroute");
|
||||
return;
|
||||
}
|
||||
#else
|
||||
@ -374,17 +384,12 @@ char *name;
|
||||
IfIndex = index;
|
||||
return(index);
|
||||
}
|
||||
#if defined(__FreeBSD__) || (_BSDI_VERSION >= 199312)
|
||||
index++;
|
||||
#endif
|
||||
}
|
||||
|
||||
len -= elen;
|
||||
ifrp = (struct ifreq *)((char *)ifrp + elen);
|
||||
ifrp++;
|
||||
#if defined(_BSDI_VERSION) && (_BSDI_VERSION < 199312)
|
||||
index++;
|
||||
#endif
|
||||
}
|
||||
|
||||
close(s);
|
||||
|
@ -18,7 +18,7 @@
|
||||
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* $Id:$
|
||||
*
|
||||
*
|
||||
* Van Jacobson (van@helios.ee.lbl.gov), Dec 31, 1989:
|
||||
* - Initial distribution.
|
||||
*/
|
||||
@ -43,8 +43,6 @@ struct slstat slstat;
|
||||
#define ovbcopy bcopy
|
||||
#endif
|
||||
|
||||
static int reason1, reason2, reason3, reason4, reason5;
|
||||
|
||||
void
|
||||
sl_compress_init(comp)
|
||||
struct slcompress *comp;
|
||||
@ -214,7 +212,6 @@ sl_compress_tcp(m, ip, comp, compress_cid)
|
||||
hlen <<= 2;
|
||||
if (hlen > m->cnt)
|
||||
return(TYPE_IP);
|
||||
reason1++;
|
||||
goto uncompressed;
|
||||
|
||||
found:
|
||||
@ -256,7 +253,6 @@ reason1++;
|
||||
BCMP(ip + 1, &cs->cs_ip + 1, (deltaS - 5) << 2)) ||
|
||||
(THOFFSET(th) > 5 &&
|
||||
BCMP(th + 1, oth + 1, (THOFFSET(th) - 5) << 2))) {
|
||||
reason2++;
|
||||
goto uncompressed;
|
||||
}
|
||||
|
||||
@ -275,7 +271,6 @@ reason2++;
|
||||
* implementation should never do this but RFC793
|
||||
* doesn't prohibit the change so we have to deal
|
||||
* with it. */
|
||||
reason3++;
|
||||
goto uncompressed;
|
||||
}
|
||||
|
||||
@ -288,7 +283,6 @@ reason3++;
|
||||
deltaA = ntohl(th->th_ack) - ntohl(oth->th_ack);
|
||||
if (deltaA) {
|
||||
if (deltaA > 0xffff) {
|
||||
reason4++;
|
||||
goto uncompressed;
|
||||
}
|
||||
ENCODE(deltaA);
|
||||
@ -298,7 +292,6 @@ reason4++;
|
||||
deltaS = ntohl(th->th_seq) - ntohl(oth->th_seq);
|
||||
if (deltaS) {
|
||||
if (deltaS > 0xffff) {
|
||||
reason4++;
|
||||
goto uncompressed;
|
||||
}
|
||||
ENCODE(deltaS);
|
||||
@ -328,7 +321,6 @@ reason4++;
|
||||
* actual changes match one of our special case encodings --
|
||||
* send packet uncompressed.
|
||||
*/
|
||||
reason5++;
|
||||
goto uncompressed;
|
||||
|
||||
case NEW_S|NEW_A:
|
||||
@ -464,7 +456,7 @@ sl_uncompress_tcp(bufp, len, type, comp)
|
||||
if (changes & NEW_C) {
|
||||
/* Make sure the state index is in range, then grab the state.
|
||||
* If we have a good state index, clear the 'discard' flag. */
|
||||
if (*cp >= MAX_STATES)
|
||||
if (*cp >= MAX_STATES || comp->last_recv == 255)
|
||||
goto bad;
|
||||
|
||||
comp->flags &=~ SLF_TOSS;
|
||||
@ -584,6 +576,5 @@ ReportCompress()
|
||||
slstat.sls_compressedin, slstat.sls_uncompressedin);
|
||||
printf(" %d (error), %d (tossed)\n",
|
||||
slstat.sls_errorin, slstat.sls_tossed);
|
||||
printf("%d, %d, %d, %d, %d\n", reason1, reason2, reason3, reason4, reason5);
|
||||
return(1);
|
||||
}
|
||||
|
@ -17,11 +17,13 @@
|
||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*
|
||||
* $Id:$
|
||||
*
|
||||
* Van Jacobson (van@helios.ee.lbl.gov), Dec 31, 1989:
|
||||
* - Initial distribution.
|
||||
*/
|
||||
#include "cdefs.h"
|
||||
|
||||
#define MAX_STATES 16 /* must be > 2 and < 256 */
|
||||
#define MAX_HDR 128 /* XXX 4bsd-ism: should really be 128 */
|
||||
@ -136,7 +138,7 @@ struct slstat {
|
||||
/* flag values */
|
||||
#define SLF_TOSS 1 /* tossing rcvd frames because of input err */
|
||||
|
||||
extern void sl_compress_init(/* struct slcompress * */);
|
||||
extern u_char sl_compress_tcp(/* struct mbuf *, struct ip *,
|
||||
struct slcompress *, int compress_cid_flag */);
|
||||
extern int sl_uncompress_tcp(/* u_char **, int, u_char, struct slcompress * */);
|
||||
extern void sl_compress_init __P((struct slcompress *));
|
||||
extern u_char sl_compress_tcp __P((struct mbuf *, struct ip *,
|
||||
struct slcompress *, int compress_cid_flag));
|
||||
extern int sl_uncompress_tcp __P((u_char **, int, u_int, struct slcompress *));
|
||||
|
@ -16,15 +16,16 @@
|
||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* $Id: systems.c,v 1.1.1.1 1995/01/31 06:29:55 amurai Exp $
|
||||
*
|
||||
* $Id:$
|
||||
*
|
||||
* TODO:
|
||||
*/
|
||||
#include "fsm.h"
|
||||
#include "vars.h"
|
||||
#include "ipcp.h"
|
||||
#include "pathnames.h"
|
||||
#include "vars.h"
|
||||
|
||||
extern void DecodeCommand();
|
||||
|
||||
@ -93,7 +94,7 @@ char *file;
|
||||
}
|
||||
if (fp == NULL) {
|
||||
SetPppId();
|
||||
sprintf(line, "%s/%s", _PATH_PPP, file);
|
||||
sprintf(line, "%s/%s",_PATH_PPP, file);
|
||||
fp = fopen(line, "r");
|
||||
}
|
||||
if (fp == NULL) {
|
||||
@ -121,6 +122,7 @@ char *file;
|
||||
char *cp, *wp;
|
||||
int n;
|
||||
int val = -1;
|
||||
u_char olauth;
|
||||
char line[200];
|
||||
|
||||
fp = NULL;
|
||||
@ -132,7 +134,7 @@ char *file;
|
||||
}
|
||||
if (fp == NULL) {
|
||||
SetPppId(); /* fix from pdp@ark.jr3uom.iijnet.or.jp */
|
||||
sprintf(line, "%s/%s", _PATH_PPP, file);
|
||||
sprintf(line, "%s/%s",_PATH_PPP, file);
|
||||
fp = fopen(line, "r");
|
||||
}
|
||||
if (fp == NULL) {
|
||||
@ -164,7 +166,10 @@ char *file;
|
||||
fprintf(stderr, "%s", cp);
|
||||
#endif
|
||||
SetPppId();
|
||||
olauth = VarLocalAuth;
|
||||
VarLocalAuth = LOCAL_AUTH;
|
||||
DecodeCommand(cp, strlen(cp), 0);
|
||||
VarLocalAuth = olauth;
|
||||
SetUserId();
|
||||
} else if (*cp == '#') {
|
||||
continue;
|
||||
|
@ -15,15 +15,16 @@
|
||||
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* $Id:$
|
||||
* $Id: timeout.h,v 1.1.1.1 1995/01/31 06:29:55 amurai Exp $
|
||||
*
|
||||
* TODO:
|
||||
*/
|
||||
|
||||
#ifndef _TIMEOUT_H_
|
||||
#define _TIMEOUT_H_
|
||||
#include "cdefs.h"
|
||||
|
||||
#define TICKUNIT 10000 /* Unit in usec */
|
||||
#define TICKUNIT 100000 /* Unit in usec */
|
||||
#define SECTICKS (1000000/TICKUNIT)
|
||||
|
||||
struct pppTimer {
|
||||
@ -42,8 +43,8 @@ struct pppTimer {
|
||||
|
||||
struct pppTimer *TimerList;
|
||||
|
||||
extern void StartTimer(struct pppTimer *);
|
||||
extern void StopTimer(struct pppTimer *);
|
||||
extern void TimerService(void);
|
||||
extern void StartIdleTimer(void);
|
||||
extern void StartTimer __P((struct pppTimer *));
|
||||
extern void StopTimer __P((struct pppTimer *));
|
||||
extern void TimerService __P((void));
|
||||
extern void StartIdleTimer __P((void));
|
||||
#endif /* _TIMEOUT_H_ */
|
||||
|
@ -18,14 +18,31 @@
|
||||
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* $Id:$
|
||||
*
|
||||
*
|
||||
* TODO:
|
||||
*/
|
||||
#include "defs.h"
|
||||
#include <sys/time.h>
|
||||
#include <signal.h>
|
||||
#include "timeout.h"
|
||||
#ifdef SIGALRM
|
||||
#include <errno.h>
|
||||
#endif
|
||||
void StopTimerNoBlock( struct pppTimer *);
|
||||
void ShowTimers(void);
|
||||
|
||||
void
|
||||
StopTimer( struct pppTimer *tp )
|
||||
{
|
||||
#ifdef SIGALRM
|
||||
int omask;
|
||||
omask = sigblock(sigmask(SIGALRM));
|
||||
#endif
|
||||
StopTimerNoBlock(tp);
|
||||
#ifdef SIGALRM
|
||||
sigsetmask(omask);
|
||||
#endif
|
||||
}
|
||||
void
|
||||
StartTimer(tp)
|
||||
struct pppTimer *tp;
|
||||
@ -33,19 +50,25 @@ struct pppTimer *tp;
|
||||
struct pppTimer *t, *pt;
|
||||
u_long ticks = 0;
|
||||
|
||||
if (tp->state == TIMER_RUNNING) {
|
||||
StopTimer(tp);
|
||||
#ifdef SIGALRM
|
||||
int omask;
|
||||
omask = sigblock(sigmask(SIGALRM));
|
||||
#endif
|
||||
|
||||
if (tp->state != TIMER_STOPPED) {
|
||||
StopTimerNoBlock(tp);
|
||||
}
|
||||
if (tp->load == 0) {
|
||||
#ifdef DEBUG
|
||||
logprintf("timer %x has 0 load!\n", tp);
|
||||
#endif
|
||||
sigsetmask(omask);
|
||||
return;
|
||||
}
|
||||
pt = NULL;
|
||||
for (t = TimerList; t; t = t->next) {
|
||||
#ifdef DEBUG
|
||||
logprintf("%x(%d): ticks: %d, rest: %d\n", t, t->state, ticks, t->rest);
|
||||
logprintf("StartTimer: %x(%d): ticks: %d, rest: %d\n", t, t->state, ticks, t->rest);
|
||||
#endif
|
||||
if (ticks + t->rest >= tp->load)
|
||||
break;
|
||||
@ -66,24 +89,35 @@ struct pppTimer *tp;
|
||||
TimerList = tp;
|
||||
if (t)
|
||||
t->rest -= tp->rest;
|
||||
|
||||
#ifdef SIGALRM
|
||||
sigsetmask(omask);
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
StopTimer(tp)
|
||||
StopTimerNoBlock(tp)
|
||||
struct pppTimer *tp;
|
||||
{
|
||||
struct pppTimer *t, *pt;
|
||||
|
||||
/*
|
||||
* A Running Timer should be removing TimerList,
|
||||
* But STOPPED/EXPIRED is already removing TimerList.
|
||||
* So just marked as TIMER_STOPPED.
|
||||
* Do not change tp->enext!! (Might be Called by expired proc)
|
||||
*/
|
||||
#ifdef DEBUG
|
||||
logprintf("StopTimer: %x, next = %x state=%x\n", tp, tp->next, tp->state);
|
||||
#endif
|
||||
if (tp->state != TIMER_RUNNING) {
|
||||
tp->next = NULL;
|
||||
tp->next = NULL;
|
||||
tp->state = TIMER_STOPPED;
|
||||
return;
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
logprintf("StopTimer: %x, next = %x\n", tp, tp->next);
|
||||
#endif
|
||||
pt = NULL;
|
||||
for (t = TimerList; t != tp; t = t->next)
|
||||
for (t = TimerList; t != tp && t !=NULL ; t = t->next)
|
||||
pt = t;
|
||||
if (t) {
|
||||
if (pt)
|
||||
@ -92,8 +126,9 @@ struct pppTimer *tp;
|
||||
TimerList = t->next;
|
||||
if (t->next)
|
||||
t->next->rest += tp->rest;
|
||||
} else
|
||||
fprintf(stderr, "Oops, timer not found!!\n");
|
||||
} else {
|
||||
logprintf("Oops, timer not found!!\n");
|
||||
}
|
||||
tp->next = NULL;
|
||||
tp->state = TIMER_STOPPED;
|
||||
}
|
||||
@ -103,6 +138,9 @@ TimerService()
|
||||
{
|
||||
struct pppTimer *tp, *exp, *wt;
|
||||
|
||||
#ifdef DEBUG
|
||||
ShowTimers();
|
||||
#endif
|
||||
if (tp = TimerList) {
|
||||
tp->rest--;
|
||||
if (tp->rest == 0) {
|
||||
@ -135,7 +173,12 @@ TimerService()
|
||||
#endif
|
||||
if (exp->func)
|
||||
(*exp->func)(exp->arg);
|
||||
exp = exp->enext;
|
||||
/*
|
||||
* Just Removing each item from expired list
|
||||
* And exp->enext will be intialized at next expire
|
||||
* in this funtion.
|
||||
*/
|
||||
exp = exp->enext;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -146,6 +189,75 @@ ShowTimers()
|
||||
{
|
||||
struct pppTimer *pt;
|
||||
|
||||
logprintf("---- Begin of Timer Service List---\n");
|
||||
for (pt = TimerList; pt; pt = pt->next)
|
||||
fprintf(stderr, "%x: load = %d, rest = %d\r\n", pt, pt->load, pt->rest);
|
||||
logprintf("%x: load = %d, rest = %d, state =%x\n",
|
||||
pt, pt->load, pt->rest, pt->state);
|
||||
logprintf("---- End of Timer Service List ---\n");
|
||||
}
|
||||
|
||||
#ifdef SIGALRM
|
||||
u_int sleep( u_int sec )
|
||||
{
|
||||
struct timeval to,st,et;
|
||||
long sld, nwd, std;
|
||||
|
||||
gettimeofday( &st, NULL );
|
||||
to.tv_sec = sec;
|
||||
to.tv_usec = 0;
|
||||
std = st.tv_sec * 1000000 + st.tv_usec;
|
||||
for (;;) {
|
||||
if ( select ( 0, NULL, NULL, NULL, &to) == 0 ||
|
||||
errno != EINTR ) {
|
||||
break;
|
||||
} else {
|
||||
gettimeofday( &et, NULL );
|
||||
sld = to.tv_sec * 1000000 + to.tv_sec;
|
||||
nwd = et.tv_sec * 1000000 + et.tv_usec - std;
|
||||
if ( sld > nwd )
|
||||
sld -= nwd;
|
||||
else
|
||||
sld = 1; /* Avoid both tv_sec/usec is 0 */
|
||||
|
||||
/* Calculate timeout value for select */
|
||||
to.tv_sec = sld / 1000000;
|
||||
to.tv_usec = sld % 1000000;
|
||||
|
||||
/* Forwarding signal as normal */
|
||||
kill(getpid(), SIGALRM);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void usleep( u_int usec)
|
||||
{
|
||||
struct timeval to,st,et;
|
||||
long sld, nwd, std;
|
||||
|
||||
gettimeofday( &st, NULL );
|
||||
to.tv_sec = 0;
|
||||
to.tv_usec = usec;
|
||||
std = st.tv_sec * 1000000 + st.tv_usec;
|
||||
for (;;) {
|
||||
if ( select ( 0, NULL, NULL, NULL, &to) == 0 ||
|
||||
errno != EINTR ) {
|
||||
break;
|
||||
} else {
|
||||
gettimeofday( &et, NULL );
|
||||
sld = to.tv_sec * 1000000 + to.tv_sec;
|
||||
nwd = et.tv_sec * 1000000 + et.tv_usec - std;
|
||||
if ( sld > nwd )
|
||||
sld -= nwd;
|
||||
else
|
||||
sld = 1; /* Avoid both tv_sec/usec is 0 */
|
||||
|
||||
/* Calculate timeout value for select */
|
||||
to.tv_sec = sld / 1000000;
|
||||
to.tv_usec = sld % 1000000;
|
||||
|
||||
/* Forwarding signal as normal */
|
||||
kill(getpid(), SIGALRM);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
@ -29,9 +29,9 @@
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
*
|
||||
* $Id:$
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
|
@ -18,14 +18,16 @@
|
||||
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* $Id:$
|
||||
*
|
||||
*/
|
||||
#include "fsm.h"
|
||||
#include "command.h"
|
||||
#include "hdlc.h"
|
||||
#include "termios.h"
|
||||
#include "vars.h"
|
||||
#include "auth.h"
|
||||
|
||||
char VarVersion[] = "Version 0.93";
|
||||
char VarVersion[] = "Version 0.94";
|
||||
|
||||
/*
|
||||
* Order of conf option is important. See vars.h.
|
||||
@ -38,15 +40,13 @@ struct confdesc pppConfs[] = {
|
||||
{ "acfcomp", CONF_ENABLE, CONF_ACCEPT },
|
||||
{ "protocomp", CONF_ENABLE, CONF_ACCEPT },
|
||||
{ "pred1", CONF_ENABLE, CONF_ACCEPT },
|
||||
#ifdef notdef
|
||||
{ "ipaddress", CONF_ENABLE, CONF_ACCEPT },
|
||||
#endif
|
||||
{ "proxy", CONF_DISABLE, CONF_DENY },
|
||||
{ NULL },
|
||||
};
|
||||
|
||||
struct pppvars pppVars = {
|
||||
DEF_MRU, 0, MODEM_SPEED, CS8, 180, 30,
|
||||
MODEM_DEV, OPEN_PASSIVE,
|
||||
DEF_MRU, 0, MODEM_SPEED, CS8, 180, 30, 3,
|
||||
MODEM_DEV, OPEN_PASSIVE, LOCAL_NO_AUTH,
|
||||
};
|
||||
|
||||
int
|
||||
@ -151,3 +151,34 @@ char **argv;
|
||||
} while (argc > 0);
|
||||
return(1);
|
||||
}
|
||||
|
||||
int
|
||||
LocalAuthCommand(list, argc, argv)
|
||||
struct cmdtab *list;
|
||||
int argc;
|
||||
char **argv;
|
||||
{
|
||||
char *p;
|
||||
if (argc < 1) {
|
||||
printf("Please Enter passwd for manupilating.\n");
|
||||
return(1);
|
||||
}
|
||||
|
||||
switch ( LocalAuthValidate( SECRETFILE, VarShortHost, *argv ) ) {
|
||||
case INVALID:
|
||||
pppVars.lauth = LOCAL_NO_AUTH;
|
||||
break;
|
||||
case VALID:
|
||||
pppVars.lauth = LOCAL_AUTH;
|
||||
break;
|
||||
case NOT_FOUND:
|
||||
pppVars.lauth = LOCAL_AUTH;
|
||||
printf("WARING: No Entry for this system\n");
|
||||
break;
|
||||
default:
|
||||
pppVars.lauth = LOCAL_NO_AUTH;
|
||||
printf("Ooops?\n");
|
||||
break;
|
||||
}
|
||||
return(1);
|
||||
}
|
||||
|
@ -15,7 +15,7 @@
|
||||
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* $Id:$
|
||||
* $Id: vars.h,v 1.1.1.1 1995/01/31 06:29:55 amurai Exp $
|
||||
*
|
||||
* TODO:
|
||||
*/
|
||||
@ -23,6 +23,8 @@
|
||||
#ifndef _VARS_H_
|
||||
#define _VARS_H_
|
||||
|
||||
#include <sys/param.h>
|
||||
|
||||
struct confdesc {
|
||||
char *name;
|
||||
int myside, hisside;
|
||||
@ -41,8 +43,8 @@ struct confdesc {
|
||||
#define ConfAcfcomp 4
|
||||
#define ConfProtocomp 5
|
||||
#define ConfPred1 6
|
||||
#define ConfIpAddress 6
|
||||
#define MAXCONFS 7
|
||||
#define ConfProxy 7
|
||||
#define MAXCONFS 8
|
||||
|
||||
#define Enabled(x) (pppConfs[x].myside & CONF_ENABLE)
|
||||
#define Acceptable(x) (pppConfs[x].hisside & CONF_ACCEPT)
|
||||
@ -56,13 +58,18 @@ struct pppvars {
|
||||
int modem_parity; /* Parity setting */
|
||||
int idle_timeout; /* Idle timeout value */
|
||||
int lqr_timeout; /* LQR timeout value */
|
||||
int retry_timeout; /* Retry timeout value */
|
||||
char modem_dev[20]; /* Name of device */
|
||||
int open_mode; /* LCP open mode */
|
||||
#define LOCAL_AUTH 0x01
|
||||
#define LOCAL_NO_AUTH 0x02
|
||||
u_char lauth; /* Local Authorized status */
|
||||
char dial_script[200]; /* Dial script */
|
||||
char login_script[200]; /* Login script */
|
||||
char auth_key[50]; /* PAP/CHAP key */
|
||||
char auth_name[50]; /* PAP/CHAP system name */
|
||||
char phone_number[50]; /* Telephone Number */
|
||||
char shostname[MAXHOSTNAMELEN];/* Local short Host Name */
|
||||
};
|
||||
|
||||
#define VarAccmap pppVars.var_accmap
|
||||
@ -71,16 +78,21 @@ struct pppvars {
|
||||
#define VarSpeed pppVars.modem_speed
|
||||
#define VarParity pppVars.modem_parity
|
||||
#define VarOpenMode pppVars.open_mode
|
||||
#define VarLocalAuth pppVars.lauth
|
||||
#define VarDialScript pppVars.dial_script
|
||||
#define VarLoginScript pppVars.login_script
|
||||
#define VarIdleTimeout pppVars.idle_timeout
|
||||
#define VarLqrTimeout pppVars.lqr_timeout
|
||||
#define VarRetryTimeout pppVars.retry_timeout
|
||||
#define VarAuthKey pppVars.auth_key
|
||||
#define VarAuthName pppVars.auth_name
|
||||
#define VarPhone pppVars.phone_number
|
||||
#define VarShortHost pppVars.shostname
|
||||
|
||||
#define DEV_IS_SYNC (VarSpeed == 0)
|
||||
|
||||
extern struct pppvars pppVars;
|
||||
|
||||
int ipInOctets, ipOutOctets;
|
||||
int ipInOctets, ipOutOctets, ipKeepAlive;
|
||||
int ipConnectSecs, ipIdleSecs;
|
||||
#endif
|
||||
|
@ -18,7 +18,7 @@
|
||||
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* $Id:$
|
||||
*
|
||||
*
|
||||
* TODO:
|
||||
*/
|
||||
#include "fsm.h"
|
||||
@ -40,7 +40,7 @@ VjInit()
|
||||
}
|
||||
|
||||
void
|
||||
SendPppFlame(pri, bp)
|
||||
SendPppFrame(pri, bp)
|
||||
int pri;
|
||||
struct mbuf *bp;
|
||||
{
|
||||
@ -49,10 +49,10 @@ struct mbuf *bp;
|
||||
int cproto = IpcpInfo.his_compproto >> 16;
|
||||
|
||||
#ifdef DEBUG
|
||||
logprintf("SendPppFlame: proto = %x\n", IpcpInfo.his_compproto);
|
||||
logprintf("SendPppFrame: proto = %x\n", IpcpInfo.his_compproto);
|
||||
#endif
|
||||
if (cproto== PROTO_VJCOMP) {
|
||||
type = sl_compress_tcp(bp, MBUF_CTOP(bp), &cslc, IpcpInfo.his_compproto & 0xff);
|
||||
type = sl_compress_tcp(bp, (struct ip *)MBUF_CTOP(bp), &cslc, IpcpInfo.his_compproto & 0xff);
|
||||
|
||||
#ifdef DEBUG
|
||||
logprintf("type = %x\n", type);
|
||||
@ -95,6 +95,10 @@ u_char type;
|
||||
*/
|
||||
bufp = MBUF_CTOP(bp);
|
||||
len = sl_uncompress_tcp(&bufp, len, type, &cslc);
|
||||
if (len <= 0) {
|
||||
pfree(bp);
|
||||
bp = NULLBUFF;
|
||||
}
|
||||
return(bp);
|
||||
}
|
||||
/*
|
||||
@ -109,6 +113,10 @@ u_char type;
|
||||
bufp = work + MAX_HDR;
|
||||
bp = mbread(bp, bufp, rlen);
|
||||
len = sl_uncompress_tcp(&bufp, olen, type, &cslc);
|
||||
if (len <= 0) {
|
||||
pfree(bp);
|
||||
return NULLBUFF;
|
||||
}
|
||||
len -= olen;
|
||||
len += rlen;
|
||||
nbp = mballoc(len, MB_VJCOMP);
|
||||
|
Loading…
Reference in New Issue
Block a user