1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- --- a/nat64.c
- +++ b/nat64.c
- @@ -19,6 +19,11 @@
-
- extern struct config *gcfg;
-
- +static uint16_t checksum_extend_byte(uint8_t b)
- +{
- + return htons(b << 8);
- +}
- +
- static uint16_t ip_checksum(void *d, int c)
- {
- uint32_t sum = 0xffff;
- @@ -30,7 +35,7 @@ static uint16_t ip_checksum(void *d, int
- }
-
- if (c)
- - sum += htons(*((uint8_t *)p) << 8);
- + sum += checksum_extend_byte(*((uint8_t *)p));
-
- while (sum > 0xffff)
- sum = (sum & 0xffff) + (sum >> 16);
- @@ -180,10 +185,12 @@ static int xlate_payload_4to6(struct pkt
- cksum = ones_add(p->icmp->cksum, cksum);
- if (p->icmp->type == 8) {
- p->icmp->type = 128;
- - p->icmp->cksum = ones_add(cksum, ~(128 - 8));
- + p->icmp->cksum = ones_add(cksum,
- + ~checksum_extend_byte(128 - 8));
- } else {
- p->icmp->type = 129;
- - p->icmp->cksum = ones_add(cksum, ~(129 - 0));
- + p->icmp->cksum = ones_add(cksum,
- + ~checksum_extend_byte(129 - 0));
- }
- return 0;
- case 17:
- @@ -668,10 +675,12 @@ static int xlate_payload_6to4(struct pkt
- cksum = ones_add(p->icmp->cksum, cksum);
- if (p->icmp->type == 128) {
- p->icmp->type = 8;
- - p->icmp->cksum = ones_add(cksum, 128 - 8);
- + p->icmp->cksum = ones_add(cksum,
- + checksum_extend_byte(128 - 8));
- } else {
- p->icmp->type = 0;
- - p->icmp->cksum = ones_add(cksum, 129 - 0);
- + p->icmp->cksum = ones_add(cksum,
- + checksum_extend_byte(129 - 0));
- }
- return 0;
- case 17:
|