From 1db9f19b62fbf52e4b33047b536cfb0fbfdd22cb Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Sun, 21 Dec 2014 17:25:55 +0100 Subject: ip: exclude "don't fragment" bit from ipv4 reassembly test other operating systems always set the "don't fragment" bit in ther outgoing ipv4 packets causing us to unnecesarily call ip4reassemble() looking for a fragment reassembly queue. the change excludes the "don't fragment" bit from the test so we now call ip4reassemble() only when the "more fragmens" bit is set or a fragment offset other than zero is given. this optimization was discovered from akaros. --- sys/src/9/ip/ip.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'sys/src') diff --git a/sys/src/9/ip/ip.c b/sys/src/9/ip/ip.c index 40fc9380e..0a8863e77 100644 --- a/sys/src/9/ip/ip.c +++ b/sys/src/9/ip/ip.c @@ -405,7 +405,7 @@ ipiput4(Fs *f, Ipifc *ifc, Block *bp) if(r->ifc == nil) panic("nil route rfc"); if(r->ifc->reassemble){ frag = nhgets(h->frag); - if(frag) { + if(frag & ~IP_DF) { h->tos = 0; if(frag & IP_MF) h->tos = 1; @@ -424,7 +424,7 @@ if(r->ifc == nil) panic("nil route rfc"); } frag = nhgets(h->frag); - if(frag) { + if(frag & ~IP_DF) { h->tos = 0; if(frag & IP_MF) h->tos = 1; -- cgit v1.2.3