mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-07 19:49:33 -04:00
selftests/bpf: move ip checksum helper to network helpers
xdp_metadata test has a small helper computing ipv4 checksums to allow manually building packets. Move this helper to network_helpers to share it with other tests. Signed-off-by: Alexis Lothoré (eBPF Foundation) <alexis.lothore@bootlin.com> Acked-by: Stanislav Fomichev <sdf@fomichev.me> Link: https://lore.kernel.org/r/20241120-flow_dissector-v3-9-45b46494f937@bootlin.com Signed-off-by: Alexei Starovoitov <ast@kernel.org>
This commit is contained in:
committed by
Alexei Starovoitov
parent
c24010821a
commit
f4504af685
@@ -105,6 +105,30 @@ static __u16 csum_fold(__u32 csum)
|
||||
return (__u16)~csum;
|
||||
}
|
||||
|
||||
static __wsum csum_partial(const void *buf, int len, __wsum sum)
|
||||
{
|
||||
__u16 *p = (__u16 *)buf;
|
||||
int num_u16 = len >> 1;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < num_u16; i++)
|
||||
sum += p[i];
|
||||
|
||||
return sum;
|
||||
}
|
||||
|
||||
static inline __sum16 build_ip_csum(struct iphdr *iph)
|
||||
{
|
||||
__u32 sum = 0;
|
||||
__u16 *p;
|
||||
|
||||
iph->check = 0;
|
||||
p = (void *)iph;
|
||||
sum = csum_partial(p, iph->ihl << 2, 0);
|
||||
|
||||
return csum_fold(sum);
|
||||
}
|
||||
|
||||
static inline __sum16 csum_tcpudp_magic(__be32 saddr, __be32 daddr,
|
||||
__u32 len, __u8 proto,
|
||||
__wsum csum)
|
||||
|
||||
@@ -133,23 +133,6 @@ static void close_xsk(struct xsk *xsk)
|
||||
munmap(xsk->umem_area, UMEM_SIZE);
|
||||
}
|
||||
|
||||
static void ip_csum(struct iphdr *iph)
|
||||
{
|
||||
__u32 sum = 0;
|
||||
__u16 *p;
|
||||
int i;
|
||||
|
||||
iph->check = 0;
|
||||
p = (void *)iph;
|
||||
for (i = 0; i < sizeof(*iph) / sizeof(*p); i++)
|
||||
sum += p[i];
|
||||
|
||||
while (sum >> 16)
|
||||
sum = (sum & 0xffff) + (sum >> 16);
|
||||
|
||||
iph->check = ~sum;
|
||||
}
|
||||
|
||||
static int generate_packet(struct xsk *xsk, __u16 dst_port)
|
||||
{
|
||||
struct xsk_tx_metadata *meta;
|
||||
@@ -192,7 +175,7 @@ static int generate_packet(struct xsk *xsk, __u16 dst_port)
|
||||
iph->protocol = IPPROTO_UDP;
|
||||
ASSERT_EQ(inet_pton(FAMILY, TX_ADDR, &iph->saddr), 1, "inet_pton(TX_ADDR)");
|
||||
ASSERT_EQ(inet_pton(FAMILY, RX_ADDR, &iph->daddr), 1, "inet_pton(RX_ADDR)");
|
||||
ip_csum(iph);
|
||||
iph->check = build_ip_csum(iph);
|
||||
|
||||
udph->source = htons(UDP_SOURCE_PORT);
|
||||
udph->dest = htons(dst_port);
|
||||
|
||||
Reference in New Issue
Block a user