summaryrefslogtreecommitdiffstats
path: root/sys/contrib/ipfilter/netinet/ip_state.c
diff options
context:
space:
mode:
authordarrenr <darrenr@FreeBSD.org>2002-06-07 08:58:22 +0000
committerdarrenr <darrenr@FreeBSD.org>2002-06-07 08:58:22 +0000
commit09b4027f13b09dedea4e76f08d6bbe525dd0626f (patch)
tree8506f6e666569ca0dd70918498b3e8743e9d3e3a /sys/contrib/ipfilter/netinet/ip_state.c
parenta9f147caaadd791ad3fc10878ab229652fb4f8a7 (diff)
downloadFreeBSD-src-09b4027f13b09dedea4e76f08d6bbe525dd0626f.zip
FreeBSD-src-09b4027f13b09dedea4e76f08d6bbe525dd0626f.tar.gz
Import IPFilter 3.4.28
Diffstat (limited to 'sys/contrib/ipfilter/netinet/ip_state.c')
-rw-r--r--sys/contrib/ipfilter/netinet/ip_state.c19
1 files changed, 12 insertions, 7 deletions
diff --git a/sys/contrib/ipfilter/netinet/ip_state.c b/sys/contrib/ipfilter/netinet/ip_state.c
index a6d1773..f4dac8a 100644
--- a/sys/contrib/ipfilter/netinet/ip_state.c
+++ b/sys/contrib/ipfilter/netinet/ip_state.c
@@ -93,7 +93,7 @@
#if !defined(lint)
static const char sccsid[] = "@(#)ip_state.c 1.8 6/5/96 (C) 1993-2000 Darren Reed";
-static const char rcsid[] = "@(#)$Id: ip_state.c,v 2.30.2.70 2002/04/27 16:06:15 darrenr Exp $";
+static const char rcsid[] = "@(#)$Id: ip_state.c,v 2.30.2.71 2002/05/29 14:23:05 darrenr Exp $";
#endif
#ifndef MIN
@@ -575,9 +575,9 @@ u_int flags;
register u_int hv;
struct icmp *ic;
ipstate_t ips;
+ int out, ws;
u_int pass;
void *ifp;
- int out;
if (fr_state_lock || (fin->fin_off != 0) || (fin->fin_fl & FI_SHORT) ||
(fin->fin_misc & FM_BADSTATE))
@@ -691,8 +691,11 @@ u_int flags;
is->is_maxsend = is->is_send;
if ((tcp->th_flags & TH_SYN) &&
- ((tcp->th_off << 2) >= (sizeof(*tcp) + 4)))
- is->is_swscale = fr_tcpoptions(tcp);
+ ((tcp->th_off << 2) >= (sizeof(*tcp) + 4))) {
+ ws = fr_tcpoptions(tcp);
+ if (ws >= 0)
+ is->is_swscale = ws;
+ }
}
is->is_maxdwin = 1;
@@ -900,6 +903,7 @@ tcphdr_t *tcp;
fdata->td_wscale = wscale;
else if (wscale == -2)
fdata->td_wscale = tdata->td_wscale = 0;
+ win <<= fdata->td_wscale;
if ((fdata->td_end == 0) &&
(!is->is_fsm || ((tcp->th_flags & TH_OPENING) == TH_OPENING))) {
@@ -908,7 +912,9 @@ tcphdr_t *tcp;
*/
fdata->td_end = end;
fdata->td_maxwin = 1;
- fdata->td_maxend = end + 1;
+ fdata->td_maxend = end + win;
+ if (win == 0)
+ fdata->td_maxend++;
}
if (!(tcp->th_flags & TH_ACK)) { /* Pretend an ack was sent */
@@ -922,7 +928,6 @@ tcphdr_t *tcp;
if (seq == end)
seq = end = fdata->td_end;
- win <<= fdata->td_wscale;
maxwin = tdata->td_maxwin;
ackskew = tdata->td_end - ack;
@@ -1457,7 +1462,7 @@ icmp6again:
rev = fin->fin_rev;
if (is->is_frage[rev] != 0)
is->is_age = is->is_frage[rev];
- else if (fin->fin_rev)
+ else if (rev != 0)
is->is_age = fr_icmpacktimeout;
else
is->is_age = fr_icmptimeout;
OpenPOWER on IntegriCloud