| version 1.30, 1996/03/16 23:53:58 |
version 1.30.4.2, 1996/12/11 01:56:56 |
|
|
| * if the packet was previously fragmented, |
* if the packet was previously fragmented, |
| * but it's not worth the time; just let them time out.) |
* but it's not worth the time; just let them time out.) |
| */ |
*/ |
| if (ip->ip_off &~ IP_DF) { |
if (ip->ip_off & ~(IP_DF|IP_RF)) { |
| if (m->m_flags & M_EXT) { /* XXX */ |
if (m->m_flags & M_EXT) { /* XXX */ |
| if ((m = m_pullup(m, sizeof (struct ip))) == 0) { |
if ((m = m_pullup(m, sizeof (struct ip))) == 0) { |
| ipstat.ips_toosmall++; |
ipstat.ips_toosmall++; |
|
|
| return (0); |
return (0); |
| |
|
| /* |
/* |
| * Reassembly is complete; concatenate fragments. |
* Reassembly is complete. Check for a bogus message size and |
| |
* concatenate fragments. |
| */ |
*/ |
| q = fp->ipq_fragq.lh_first; |
q = fp->ipq_fragq.lh_first; |
| ip = q->ipqe_ip; |
ip = q->ipqe_ip; |
| |
if ((next + (ip->ip_hl << 2)) > IP_MAXPACKET) { |
| |
ipstat.ips_toolong++; |
| |
ip_freef(fp); |
| |
return (0); |
| |
} |
| m = dtom(q->ipqe_ip); |
m = dtom(q->ipqe_ip); |
| t = m->m_next; |
t = m->m_next; |
| m->m_next = 0; |
m->m_next = 0; |