lede-packages-rs

git clone git://archive.git.mtrnord.blog/MTRNord/lede-packages-rs.git
Log | Files | Refs | README | LICENSE

002-bigendian_wrong_checksum.patch (1412B)


      1 --- a/nat64.c
      2 +++ b/nat64.c
      3 @@ -19,6 +19,11 @@
      4  
      5  extern struct config *gcfg;
      6  
      7 +static uint16_t checksum_extend_byte(uint8_t b)
      8 +{
      9 +	return htons(b << 8);
     10 +}
     11 +
     12  static uint16_t ip_checksum(void *d, int c)
     13  {
     14  	uint32_t sum = 0xffff;
     15 @@ -30,7 +35,7 @@ static uint16_t ip_checksum(void *d, int
     16  	}
     17  
     18  	if (c)
     19 -		sum += htons(*((uint8_t *)p) << 8);
     20 +		sum += checksum_extend_byte(*((uint8_t *)p));
     21  
     22  	while (sum > 0xffff)
     23  		sum = (sum & 0xffff) + (sum >> 16);
     24 @@ -180,10 +185,12 @@ static int xlate_payload_4to6(struct pkt
     25  		cksum = ones_add(p->icmp->cksum, cksum);
     26  		if (p->icmp->type == 8) {
     27  			p->icmp->type = 128;
     28 -			p->icmp->cksum = ones_add(cksum, ~(128 - 8));
     29 +			p->icmp->cksum = ones_add(cksum,
     30 +						~checksum_extend_byte(128 - 8));
     31  		} else {
     32  			p->icmp->type = 129;
     33 -			p->icmp->cksum = ones_add(cksum, ~(129 - 0));
     34 +			p->icmp->cksum = ones_add(cksum,
     35 +						~checksum_extend_byte(129 - 0));
     36  		}
     37  		return 0;
     38  	case 17:
     39 @@ -668,10 +675,12 @@ static int xlate_payload_6to4(struct pkt
     40  		cksum = ones_add(p->icmp->cksum, cksum);
     41  		if (p->icmp->type == 128) {
     42  			p->icmp->type = 8;
     43 -			p->icmp->cksum = ones_add(cksum, 128 - 8);
     44 +			p->icmp->cksum = ones_add(cksum,
     45 +						checksum_extend_byte(128 - 8));
     46  		} else {
     47  			p->icmp->type = 0;
     48 -			p->icmp->cksum = ones_add(cksum, 129 - 0);
     49 +			p->icmp->cksum = ones_add(cksum,
     50 +						checksum_extend_byte(129 - 0));
     51  		}
     52  		return 0;
     53  	case 17: