On 13 May 2014, at 07:21, Yonghyeon PYUN <[email protected]> wrote: > On Mon, May 12, 2014 at 01:22:03PM +0200, Michael Tuexen wrote: >> On 12 May 2014, at 03:36, Yonghyeon PYUN <[email protected]> wrote: >> >>> On Fri, May 09, 2014 at 12:46:48PM +0200, Michael Tuexen wrote: >>>> On 09 May 2014, at 03:35, Yonghyeon PYUN <[email protected]> wrote: >>>> > > [...] > >>> Oops, sorry. You're right. Probably I was confused with old memory >>> when I worked on that area. I've quickly read IP reassembly code >>> again and as you said, it should work. However it seems there is a >>> checksumming bug here. >>> >>> /* >>> * In order to do checksumming faster we do 'end-around carry' here >>> * (and not in for{} loop), though it implies we are not going to >>> * reassemble more than 64k fragments. >>> */ >>> m->m_pkthdr.csum_data = >>> (m->m_pkthdr.csum_data & 0xffff) + (m->m_pkthdr.csum_data >> 16); >>> >>> I guess the line above didn't account possible carry happened after >>> the computation. Probably it could be rewritten as the following. >>> >>> while (m->m_pkthdr.csum_data & 0xffff0000) >>> m->m_pkthdr.csum_data = (m->m_pkthdr.csum_data & 0xffff) + >>> (m->m_pkthdr.csum_data >> 16); >> I think you are right here. Good catch. Will you fix it? >> > > Done in r265942. Great. Thanks. Michael >
_______________________________________________ [email protected] mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-net To unsubscribe, send any mail to "[email protected]"
