Date: Thu, 12 Sep 2002 20:18:21 +0400 (MSD) From: Maxim Konovalov <maxim@macomnet.ru> To: freebsd-net@freebsd.org Subject: ip reassembling patch Message-ID: <20020912194517.K2218-100000@news1.macomnet.ru>
next in thread | raw e-mail | index | archive | help
Hello -net, There is a minor bug in reassembling code. sys/netinet/ip_input.c::ip_input(): 730 if (ip->ip_off & IP_MF) { 731 /* 732 * Make sure that fragments have a data length 733 * that's a non-zero multiple of 8 bytes. 734 */ 735 if (ip->ip_len == 0 || (ip->ip_len & 0x7) != 0) { 736 ipstat.ips_toosmall++; /* XXX */ 737 goto bad; 738 } 739 m->m_flags |= M_FRAG; 740 } In the code above we go through all mbufs with fragments and set M_FRAG for all mbufs except the last one. sys/netinet/ip_input.c::ip_reass() checks this flag later: 1013 /* Make sure the last packet didn't have the IP_MF flag */ 1014 if (p->m_flags & M_FRAG) 1015 return (0); It doesn't work for simplex interfaces because ip_output() sets M_FRAG for *all* mbufs with fragments. That is why # ifconfig lo0 mtu 16384 && ping -s 20000 localhost doesn't work. (It works for mtu ~= MCLBYTES due to looutput()'s feature/bug). I have already discussed this problem with bde and jlemon, I made several patches, the less intrusive one is below: Index: sys/netinet/ip_input.c =================================================================== RCS file: /home/ncvs/src/sys/netinet/ip_input.c,v retrieving revision 1.130.2.38 diff -u -r1.130.2.38 ip_input.c --- sys/netinet/ip_input.c 9 Aug 2002 14:49:22 -0000 1.130.2.38 +++ sys/netinet/ip_input.c 9 Sep 2002 14:35:39 -0000 @@ -714,7 +714,8 @@ goto bad; } m->m_flags |= M_FRAG; - } + } else + m->m_flags &= ~M_FRAG; ip->ip_off <<= 3; /* %%% Any objections? -- Maxim Konovalov, MAcomnet, Internet Dept., system engineer phone: +7 (095) 796-9079, mailto:maxim@macomnet.ru To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-net" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20020912194517.K2218-100000>