Vitaliy Makkoveev: > The ether_extract_headers() diff was reverted, because is wrong for the > cases other than tcp/udp/icmp. We need to fix it and recommit again > before continue.
I think (TCP or) UDP fragments are the problem. Fragments don't have the protocol header but will still end up here: case IPPROTO_UDP: m = m_getptr(m, hoff + hlen, &hoff); KASSERT(m != NULL && m->m_len - hoff >= sizeof(*ext->udp)); ext->udp = (struct udphdr *)(mtod(m, caddr_t) + hoff); break; If a tail fragment is too short, it will trigger the KASSERT(). Previously, this wasn't a problem, because if there was such a KASSERT() as in ixl(4), it was behind a M_*_CSUM_OUT check, and we never set those flags for fragments. -- Christian "naddy" Weisgerber na...@mips.inka.de