Вот так корректируется контрольная сумма IP при
уменьшении поля TTL в одной сетевой операционке.
unsigned short *adr указывает на начало IP заголовка
CODE
i=0xFFFF&*(adr+5); // adjust checksum
i+=1;
i+=i>>16;
*(adr+5)=i;
i=*(adr+4); // decrease TTL
//ierror("TTL",i);
i--;
*(adr+4)=i;
if((i&0xFF)==0) {
tobuf(&ss->lcltx, buf); // TTL=0, issue ICMP
return;
}