version 1.259, 2007/12/21 23:49:09 |
version 1.260, 2007/12/22 15:41:11 |
|
|
* size) and making sure the first fragment is at least 68 |
* size) and making sure the first fragment is at least 68 |
* bytes. |
* bytes. |
*/ |
*/ |
off = htons(ip->ip_off) & ~(IP_DF|IP_EF|IP_MF); |
off = (ntohs(ip->ip_off) & IP_OFFMASK) << 3; |
if ((off > 0 ? off + hlen : len) < IP_MINFRAGSIZE - 1) { |
if ((off > 0 ? off + hlen : len) < IP_MINFRAGSIZE - 1) { |
ipstat.ips_badfrags++; |
ipstat.ips_badfrags++; |
goto bad; |
goto bad; |
|
|
if (ip->ip_id == fp->ipq_id && |
if (ip->ip_id == fp->ipq_id && |
in_hosteq(ip->ip_src, fp->ipq_src) && |
in_hosteq(ip->ip_src, fp->ipq_src) && |
in_hosteq(ip->ip_dst, fp->ipq_dst) && |
in_hosteq(ip->ip_dst, fp->ipq_dst) && |
ip->ip_p == fp->ipq_p) |
ip->ip_p == fp->ipq_p) { |
|
/* |
|
* Make sure the TOS is matches previous |
|
* fragments. |
|
*/ |
|
if (ip->ip_tos != fp->ipq_tos) { |
|
ipstat.ips_badfrags++; |
|
goto bad; |
|
} |
goto found; |
goto found; |
|
} |
} |
} |
fp = 0; |
fp = 0; |
found: |
found: |
Line 1116 ip_reass(struct ipqent *ipqe, struct ipq |
|
Line 1124 ip_reass(struct ipqent *ipqe, struct ipq |
|
fp->ipq_ttl = IPFRAGTTL; |
fp->ipq_ttl = IPFRAGTTL; |
fp->ipq_p = ipqe->ipqe_ip->ip_p; |
fp->ipq_p = ipqe->ipqe_ip->ip_p; |
fp->ipq_id = ipqe->ipqe_ip->ip_id; |
fp->ipq_id = ipqe->ipqe_ip->ip_id; |
|
fp->ipq_tos = ipqe->ipqe_ip->ip_tos; |
TAILQ_INIT(&fp->ipq_fragq); |
TAILQ_INIT(&fp->ipq_fragq); |
fp->ipq_src = ipqe->ipqe_ip->ip_src; |
fp->ipq_src = ipqe->ipqe_ip->ip_src; |
fp->ipq_dst = ipqe->ipqe_ip->ip_dst; |
fp->ipq_dst = ipqe->ipqe_ip->ip_dst; |