udp_csum
static inline int udp_tunnel_handle_offloads(struct sk_buff *skb, bool udp_csum)
int type = udp_csum ? SKB_GSO_UDP_TUNNEL_CSUM : SKB_GSO_UDP_TUNNEL;
csum = udp_csum(skb);
csum = udp_csum(skb);
static void *update_pkt(struct xdp_md *ctx, __s16 offset, __u32 *udp_csum)
*udp_csum = ~((__u32)udph->check);
*udp_csum = bpf_csum_diff(&len, sizeof(len), &len_new,
sizeof(len_new), *udp_csum);
*udp_csum = bpf_csum_diff(&len, sizeof(len), &len_new,
sizeof(len_new), *udp_csum);
__u32 buff_pos, udp_csum = 0;
udph = update_pkt(ctx, 0 - offset, &udp_csum);
udp_csum = bpf_csum_diff((__be32 *)tmp_buff, offset, 0, 0, udp_csum);
udph->check = (__u16)csum_fold_helper(udp_csum);
__u32 buff_pos, udp_csum = 0;
udph = update_pkt(ctx, offset, &udp_csum);
udp_csum = bpf_csum_diff(0, 0, (__be32 *)tmp_buff, offset, udp_csum);
udph->check = (__u16)csum_fold_helper(udp_csum);
__u32 udp_csum = 0;
udph = update_pkt(ctx, (__s16)(0 - offset), &udp_csum);
udp_csum = bpf_csum_diff((__be32 *)tmp_buff, offset, 0, 0, udp_csum);
udph->check = (__u16)csum_fold_helper(udp_csum);
__u32 udp_csum = 0;
udph = update_pkt(ctx, (__s16)(offset), &udp_csum);
udp_csum = bpf_csum_diff(0, 0, (__be32 *)data_buff, offset, udp_csum);
udph->check = (__u16)csum_fold_helper(udp_csum);