diff options
author | amurai <amurai@FreeBSD.org> | 1995-02-26 12:18:08 +0000 |
---|---|---|
committer | amurai <amurai@FreeBSD.org> | 1995-02-26 12:18:08 +0000 |
commit | eeb422fed8735188e4e141578d0383ae57ba8343 (patch) | |
tree | d05da3a88d3d54962fad8582d501f1b7ad9500b9 /usr.sbin/ppp/ip.c | |
parent | 7c16fe40ea66e6edc77ed310b654360adf11b9f9 (diff) | |
download | FreeBSD-src-eeb422fed8735188e4e141578d0383ae57ba8343.zip FreeBSD-src-eeb422fed8735188e4e141578d0383ae57ba8343.tar.gz |
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)
Diffstat (limited to 'usr.sbin/ppp/ip.c')
-rw-r--r-- | usr.sbin/ppp/ip.c | 31 |
1 files changed, 19 insertions, 12 deletions
diff --git a/usr.sbin/ppp/ip.c b/usr.sbin/ppp/ip.c index 23fd550..9e2ad62 100644 --- a/usr.sbin/ppp/ip.c +++ b/usr.sbin/ppp/ip.c @@ -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; } |