]> git.ipfire.org Git - thirdparty/xtables-addons.git/commitdiff
xt_ECHO: calculate UDP checksum
authorJan Engelhardt <jengelh@medozas.de>
Sun, 25 Sep 2011 12:20:07 +0000 (14:20 +0200)
committerJan Engelhardt <jengelh@medozas.de>
Sun, 25 Sep 2011 12:39:43 +0000 (14:39 +0200)
doc/changelog.txt
extensions/xt_ECHO.c

index 367e8f2d2fd792a1cd527884d4b62c2e91738be3..210bb8c49a0692dac01c10e7d7573df1a2f88d18 100644 (file)
@@ -3,6 +3,8 @@ HEAD
 ====
 Fixes:
 - xt_ECHO: fix kernel warning about RTAX_HOPLIMIT being used
+Changes:
+- xt_ECHO: now calculates UDP checksum
 
 
 v1.39 (2011-09-21)
index 389be12d7a3837bbb37f68c3014a49b71cb3bb4d..ff4f13b27cdfb0650c71fe6b93751933977d74ca 100644 (file)
@@ -70,13 +70,25 @@ echo_tg4(struct sk_buff **poldskb, const struct xt_action_param *par)
        newudp->source = oldudp->dest;
        newudp->dest   = oldudp->source;
        newudp->len    = oldudp->len;
-       newudp->check  = 0;
 
        data_len = htons(oldudp->len) - sizeof(*oldudp);
        payload  = skb_header_pointer(oldskb, par->thoff +
                   sizeof(*oldudp), data_len, NULL);
        memcpy(skb_put(newskb, data_len), payload, data_len);
 
+#if 0
+       /*
+        * Since no fields are modified (we just swapped things around),
+        * this works too in our specific echo case.
+        */
+       newudp->check = oldudp->check;
+#else
+       newudp->check = 0;
+       newudp->check = csum_tcpudp_magic(newip->saddr, newip->daddr,
+                       ntohs(newudp->len), IPPROTO_UDP,
+                       csum_partial(newudp, ntohs(newudp->len), 0));
+#endif
+
        /* ip_route_me_harder expects the skb's dst to be set */
        skb_dst_set(newskb, dst_clone(skb_dst(oldskb)));