diff options
author | Al Viro | 2006-11-15 06:43:23 +0100 |
---|---|---|
committer | David S. Miller | 2006-12-03 06:23:42 +0100 |
commit | 43bc0ca7eadc024e9e5b935fa5e0892df4fec9eb (patch) | |
tree | 8e25b4ab9050c3fa5d47b38fced544b5587bcdd8 /net/ipv4/netfilter/ipt_ECN.c | |
parent | [NET]: ipvs checksum annotations. (diff) | |
download | kernel-qcow2-linux-43bc0ca7eadc024e9e5b935fa5e0892df4fec9eb.tar.gz kernel-qcow2-linux-43bc0ca7eadc024e9e5b935fa5e0892df4fec9eb.tar.xz kernel-qcow2-linux-43bc0ca7eadc024e9e5b935fa5e0892df4fec9eb.zip |
[NET]: netfilter checksum annotations
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4/netfilter/ipt_ECN.c')
-rw-r--r-- | net/ipv4/netfilter/ipt_ECN.c | 11 |
1 files changed, 4 insertions, 7 deletions
diff --git a/net/ipv4/netfilter/ipt_ECN.c b/net/ipv4/netfilter/ipt_ECN.c index 1aa4517fbcdb..b55d670a24df 100644 --- a/net/ipv4/netfilter/ipt_ECN.c +++ b/net/ipv4/netfilter/ipt_ECN.c @@ -28,17 +28,16 @@ static inline int set_ect_ip(struct sk_buff **pskb, const struct ipt_ECN_info *einfo) { struct iphdr *iph = (*pskb)->nh.iph; - u_int16_t oldtos; if ((iph->tos & IPT_ECN_IP_MASK) != (einfo->ip_ect & IPT_ECN_IP_MASK)) { + __u8 oldtos; if (!skb_make_writable(pskb, sizeof(struct iphdr))) return 0; iph = (*pskb)->nh.iph; oldtos = iph->tos; iph->tos &= ~IPT_ECN_IP_MASK; iph->tos |= (einfo->ip_ect & IPT_ECN_IP_MASK); - iph->check = nf_csum_update(htons(oldtos) ^ htons(0xFFFF), - htons(iph->tos), iph->check); + nf_csum_replace2(&iph->check, htons(oldtos), htons(iph->tos)); } return 1; } @@ -72,10 +71,8 @@ set_ect_tcp(struct sk_buff **pskb, const struct ipt_ECN_info *einfo) if (einfo->operation & IPT_ECN_OP_SET_CWR) tcph->cwr = einfo->proto.tcp.cwr; - tcph->check = nf_proto_csum_update((*pskb), - oldval ^ htons(0xFFFF), - ((__be16 *)tcph)[6], - tcph->check, 0); + nf_proto_csum_replace2(&tcph->check, *pskb, + oldval, ((__be16 *)tcph)[6], 0); return 1; } |