aboutsummaryrefslogtreecommitdiff
path: root/sys/netinet/ip_input.c
diff options
context:
space:
mode:
authorMaxim Konovalov <maxim@FreeBSD.org>2003-02-25 11:49:01 +0000
committerMaxim Konovalov <maxim@FreeBSD.org>2003-02-25 11:49:01 +0000
commit99e8617d24678eb92163b3ca21d62ea2a24d72e4 (patch)
tree88752c589d9c77e9852c7b2eca42f51ada2e85eb /sys/netinet/ip_input.c
parentd9b05fa0b0c42b3761142d04938a9ee48e6ef33b (diff)
downloadsrc-99e8617d24678eb92163b3ca21d62ea2a24d72e4.tar.gz
src-99e8617d24678eb92163b3ca21d62ea2a24d72e4.zip
Ip reassembly queue structure has ipq_nfrags now. Count a number of
dropped ip fragments precisely. Reviewed by: silby
Notes
Notes: svn path=/head/; revision=111478
Diffstat (limited to 'sys/netinet/ip_input.c')
-rw-r--r--sys/netinet/ip_input.c22
1 files changed, 15 insertions, 7 deletions
diff --git a/sys/netinet/ip_input.c b/sys/netinet/ip_input.c
index 7e1ed1fcd4fb..9c7b0d2af1fb 100644
--- a/sys/netinet/ip_input.c
+++ b/sys/netinet/ip_input.c
@@ -774,14 +774,14 @@ ours:
for (i = 0; i < IPREASS_NHASH; i++) {
struct ipq *r = TAILQ_LAST(&ipq[i], ipqhead);
if (r) {
+ ipstat.ips_fragtimeout += r->ipq_nfrags;
ip_freef(&ipq[i], r);
- ipstat.ips_fragtimeout++;
break;
}
}
} else {
+ ipstat.ips_fragtimeout += q->ipq_nfrags;
ip_freef(&ipq[sum], q);
- ipstat.ips_fragtimeout++;
}
}
found:
@@ -1079,6 +1079,7 @@ ip_reass(struct mbuf *m, struct ipqhead *head, struct ipq *fp,
}
nq = q->m_nextpkt;
m->m_nextpkt = nq;
+ ipstat.ips_fragdropped++;
fp->ipq_nfrags--;
m_freem(q);
}
@@ -1111,16 +1112,20 @@ inserted:
next = 0;
for (p = NULL, q = fp->ipq_frags; q; p = q, q = q->m_nextpkt) {
if (GETIP(q)->ip_off != next) {
- if (fp->ipq_nfrags > maxfragsperpacket)
+ if (fp->ipq_nfrags > maxfragsperpacket) {
+ ipstat.ips_fragdropped += fp->ipq_nfrags;
ip_freef(head, fp);
+ }
return (0);
}
next += GETIP(q)->ip_len;
}
/* Make sure the last packet didn't have the IP_MF flag */
if (p->m_flags & M_FRAG) {
- if (fp->ipq_nfrags > maxfragsperpacket)
+ if (fp->ipq_nfrags > maxfragsperpacket) {
+ ipstat.ips_fragdropped += fp->ipq_nfrags;
ip_freef(head, fp);
+ }
return (0);
}
@@ -1131,6 +1136,7 @@ inserted:
ip = GETIP(q);
if (next + (ip->ip_hl << 2) > IP_MAXPACKET) {
ipstat.ips_toolong++;
+ ipstat.ips_fragdropped += fp->ipq_nfrags;
ip_freef(head, fp);
return (0);
}
@@ -1237,7 +1243,7 @@ ip_slowtimo()
fpp = fp;
fp = TAILQ_NEXT(fp, ipq_list);
if(--fpp->ipq_ttl == 0) {
- ipstat.ips_fragtimeout++;
+ ipstat.ips_fragtimeout += fpp->ipq_nfrags;
ip_freef(&ipq[i], fpp);
}
}
@@ -1251,7 +1257,8 @@ ip_slowtimo()
for (i = 0; i < IPREASS_NHASH; i++) {
while (nipq > maxnipq &&
!TAILQ_EMPTY(&ipq[i])) {
- ipstat.ips_fragdropped++;
+ ipstat.ips_fragdropped +=
+ TAILQ_FIRST(&ipq[i])->ipq_nfrags;
ip_freef(&ipq[i], TAILQ_FIRST(&ipq[i]));
}
}
@@ -1270,7 +1277,8 @@ ip_drain()
for (i = 0; i < IPREASS_NHASH; i++) {
while(!TAILQ_EMPTY(&ipq[i])) {
- ipstat.ips_fragdropped++;
+ ipstat.ips_fragdropped +=
+ TAILQ_FIRST(&ipq[i])->ipq_nfrags;
ip_freef(&ipq[i], TAILQ_FIRST(&ipq[i]));
}
}