summaryrefslogtreecommitdiffstats
path: root/usr.sbin/ppp/ip.c
diff options
context:
space:
mode:
authoramurai <amurai@FreeBSD.org>1995-02-26 12:18:08 +0000
committeramurai <amurai@FreeBSD.org>1995-02-26 12:18:08 +0000
commiteeb422fed8735188e4e141578d0383ae57ba8343 (patch)
treed05da3a88d3d54962fad8582d501f1b7ad9500b9 /usr.sbin/ppp/ip.c
parent7c16fe40ea66e6edc77ed310b654360adf11b9f9 (diff)
downloadFreeBSD-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.c31
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;
}
OpenPOWER on IntegriCloud