Fix invalid checksum generation.
Use equation 3 given in RFC 1624 and the UpdateTTL() example function given RFC 1141. # Conflicts: # src/route.c
This commit is contained in:
		
							parent
							
								
									56a8b90d86
								
							
						
					
					
						commit
						ae89a25695
					
				
					 1 changed files with 5 additions and 3 deletions
				
			
		|  | @ -164,7 +164,7 @@ static void clamp_mss(const node_t *source, const node_t *via, vpn_packet_t *pac | |||
| 		/* Found it */ | ||||
| 		uint16_t oldmss = DATA(packet)[start + 22 + i] << 8 | DATA(packet)[start + 23 + i]; | ||||
| 		uint16_t newmss = mtu - start - 20; | ||||
| 		uint16_t csum = DATA(packet)[start + 16] << 8 | DATA(packet)[start + 17]; | ||||
| 		uint32_t csum = DATA(packet)[start + 16] << 8 | DATA(packet)[start + 17]; | ||||
| 
 | ||||
| 		if(oldmss <= newmss) | ||||
| 			break; | ||||
|  | @ -175,11 +175,13 @@ static void clamp_mss(const node_t *source, const node_t *via, vpn_packet_t *pac | |||
| 		DATA(packet)[start + 22 + i] = newmss >> 8; | ||||
| 		DATA(packet)[start + 23 + i] = newmss & 0xff; | ||||
| 		csum ^= 0xffff; | ||||
| 		csum -= oldmss; | ||||
| 		csum += oldmss ^ 0xffff; | ||||
| 		csum += newmss; | ||||
| 		csum = (csum & 0xffff) + (csum >> 16); | ||||
| 		csum += csum >> 16; | ||||
| 		csum ^= 0xffff; | ||||
| 		DATA(packet)[start + 16] = csum >> 8; | ||||
| 		DATA(packet)[start + 17] = csum & 0xff; | ||||
| 		DATA(packet)[start + 17] = csum; | ||||
| 		break; | ||||
| 	} | ||||
| } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue