Skip to content

Commit

Permalink
[NET]: ipvs checksum annotations.
Browse files Browse the repository at this point in the history
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Al Viro authored and David S. Miller committed Dec 3, 2006
1 parent 5c78f27 commit f9214b2
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 10 deletions.
14 changes: 10 additions & 4 deletions include/net/ip_vs.h
Original file line number Diff line number Diff line change
Expand Up @@ -990,12 +990,18 @@ extern void ip_vs_nat_icmp(struct sk_buff *skb, struct ip_vs_protocol *pp,

extern __sum16 ip_vs_checksum_complete(struct sk_buff *skb, int offset);

static inline u16 ip_vs_check_diff(u32 old, u32 new, u16 oldsum)
static inline __wsum ip_vs_check_diff4(__be32 old, __be32 new, __wsum oldsum)
{
u32 diff[2] = { old, new };
__be32 diff[2] = { ~old, new };

return csum_fold(csum_partial((char *) diff, sizeof(diff),
oldsum ^ 0xFFFF));
return csum_partial((char *) diff, sizeof(diff), oldsum);
}

static inline __wsum ip_vs_check_diff2(__be16 old, __be16 new, __wsum oldsum)
{
__be16 diff[2] = { ~old, new };

return csum_partial((char *) diff, sizeof(diff), oldsum);
}

#endif /* __KERNEL__ */
Expand Down
6 changes: 3 additions & 3 deletions net/ipv4/ipvs/ip_vs_proto_tcp.c
Original file line number Diff line number Diff line change
Expand Up @@ -116,9 +116,9 @@ tcp_fast_csum_update(struct tcphdr *tcph, __be32 oldip, __be32 newip,
__be16 oldport, __be16 newport)
{
tcph->check =
ip_vs_check_diff(~oldip, newip,
ip_vs_check_diff(oldport ^ htons(0xFFFF),
newport, tcph->check));
csum_fold(ip_vs_check_diff4(oldip, newip,
ip_vs_check_diff2(oldport, newport,
~csum_unfold(tcph->check))));
}


Expand Down
6 changes: 3 additions & 3 deletions net/ipv4/ipvs/ip_vs_proto_udp.c
Original file line number Diff line number Diff line change
Expand Up @@ -121,9 +121,9 @@ udp_fast_csum_update(struct udphdr *uhdr, __be32 oldip, __be32 newip,
__be16 oldport, __be16 newport)
{
uhdr->check =
ip_vs_check_diff(~oldip, newip,
ip_vs_check_diff(oldport ^ htons(0xFFFF),
newport, uhdr->check));
csum_fold(ip_vs_check_diff4(oldip, newip,
ip_vs_check_diff2(oldport, newport,
~csum_unfold(uhdr->check))));
if (!uhdr->check)
uhdr->check = CSUM_MANGLED_0;
}
Expand Down

0 comments on commit f9214b2

Please sign in to comment.