mirror of
git://git.code.sf.net/p/xtables-addons/xtables-addons
synced 2025-09-07 05:05:12 +02:00
xt_ECHO: calculate UDP checksum
This commit is contained in:
@@ -3,6 +3,8 @@ HEAD
|
|||||||
====
|
====
|
||||||
Fixes:
|
Fixes:
|
||||||
- xt_ECHO: fix kernel warning about RTAX_HOPLIMIT being used
|
- xt_ECHO: fix kernel warning about RTAX_HOPLIMIT being used
|
||||||
|
Changes:
|
||||||
|
- xt_ECHO: now calculates UDP checksum
|
||||||
|
|
||||||
|
|
||||||
v1.39 (2011-09-21)
|
v1.39 (2011-09-21)
|
||||||
|
@@ -70,13 +70,25 @@ echo_tg4(struct sk_buff **poldskb, const struct xt_action_param *par)
|
|||||||
newudp->source = oldudp->dest;
|
newudp->source = oldudp->dest;
|
||||||
newudp->dest = oldudp->source;
|
newudp->dest = oldudp->source;
|
||||||
newudp->len = oldudp->len;
|
newudp->len = oldudp->len;
|
||||||
newudp->check = 0;
|
|
||||||
|
|
||||||
data_len = htons(oldudp->len) - sizeof(*oldudp);
|
data_len = htons(oldudp->len) - sizeof(*oldudp);
|
||||||
payload = skb_header_pointer(oldskb, par->thoff +
|
payload = skb_header_pointer(oldskb, par->thoff +
|
||||||
sizeof(*oldudp), data_len, NULL);
|
sizeof(*oldudp), data_len, NULL);
|
||||||
memcpy(skb_put(newskb, data_len), payload, data_len);
|
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 */
|
/* ip_route_me_harder expects the skb's dst to be set */
|
||||||
skb_dst_set(newskb, dst_clone(skb_dst(oldskb)));
|
skb_dst_set(newskb, dst_clone(skb_dst(oldskb)));
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user