Skip to content
Permalink
Browse files
inet_ecn: Use csum16_add() helper for IP_ECN_set_* helpers
Jakub pointed out that the IP_ECN_set* helpers basically open-code
csum16_add(), so let's switch them over to using the helper instead.

Reported-by: Jakub Kicinski <kuba@kernel.org>
Tested-by: Jonathan Morton <chromatix99@gmail.com>
Tested-by: Pete Heist <pete@heistp.net>
Signed-off-by: Toke Høiland-Jørgensen <toke@redhat.com>
  • Loading branch information
tohojo authored and intel-lab-lkp committed Dec 10, 2020
1 parent a7105e3 commit fbed6705f871b8eb4e522c874927ac8e57c8889b
Showing 1 changed file with 5 additions and 8 deletions.
@@ -8,6 +8,7 @@

#include <net/inet_sock.h>
#include <net/dsfield.h>
#include <net/checksum.h>

enum {
INET_ECN_NOT_ECT = 0,
@@ -75,8 +76,8 @@ static inline void INET_ECN_dontxmit(struct sock *sk)

static inline int IP_ECN_set_ce(struct iphdr *iph)
{
u32 check = (__force u32)iph->check;
u32 ecn = (iph->tos + 1) & INET_ECN_MASK;
u16 check_add;

/*
* After the last operation we have (in binary):
@@ -93,23 +94,19 @@ static inline int IP_ECN_set_ce(struct iphdr *iph)
* INET_ECN_ECT_1 => check += htons(0xFFFD)
* INET_ECN_ECT_0 => check += htons(0xFFFE)
*/
check += (__force u16)htons(0xFFFB) + (__force u16)htons(ecn);
check_add = htons(0xFFFB) + htons(ecn);

iph->check = (__force __sum16)(check + (check>=0xFFFF));
iph->check = csum16_add(iph->check, check_add);
iph->tos |= INET_ECN_CE;
return 1;
}

static inline int IP_ECN_set_ect1(struct iphdr *iph)
{
u32 check = (__force u32)iph->check;

if ((iph->tos & INET_ECN_MASK) != INET_ECN_ECT_0)
return 0;

check += (__force u16)htons(0x1);

iph->check = (__force __sum16)(check + (check>=0xFFFF));
iph->check = csum16_add(iph->check, htons(0x1));
iph->tos ^= INET_ECN_MASK;
return 1;
}

0 comments on commit fbed670

Please sign in to comment.