shithub: riscv

Download patch

ref: 1db9f19b62fbf52e4b33047b536cfb0fbfdd22cb
parent: bf049ebdb1ede563304c9255d49d47df0098a531
author: cinap_lenrek <[email protected]>
date: Sun Dec 21 12:25:55 EST 2014

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.

--- a/sys/src/9/ip/ip.c
+++ b/sys/src/9/ip/ip.c
@@ -405,7 +405,7 @@
 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 @@
 	}
 
 	frag = nhgets(h->frag);
-	if(frag) {
+	if(frag & ~IP_DF) {
 		h->tos = 0;
 		if(frag & IP_MF)
 			h->tos = 1;