Thread (35 messages) 35 messages, 2 authors, 2021-03-25

Re: [PATCH net-next 1/8] udp: fixup csum for GSO receive slow path

flat view

From: Willem de Bruijn <willemdebruijn.kernel@gmail.com>
Date: 2021-03-24 01:50:35

quoted
quoted
quoted
@@ -2168,6 +2168,7 @@ static int udp_queue_rcv_one_skb(struct sock *sk, struct sk_buff *skb)
 static int udp_queue_rcv_skb(struct sock *sk, struct sk_buff *skb)
 {
        struct sk_buff *next, *segs;
+       int csum_level;
        int ret;

        if (likely(!udp_unexpected_gso(sk, skb)))
@@ -2175,9 +2176,18 @@ static int udp_queue_rcv_skb(struct sock *sk, struct sk_buff *skb)

        BUILD_BUG_ON(sizeof(struct udp_skb_cb) > SKB_GSO_CB_OFFSET);
        __skb_push(skb, -skb_mac_offset(skb));
+       csum_level = !!(skb_shinfo(skb)->gso_type &
+                       (SKB_GSO_UDP_TUNNEL | SKB_GSO_UDP_TUNNEL_CSUM));
        segs = udp_rcv_segment(sk, skb, true);
        skb_list_walk_safe(segs, skb, next) {
                __skb_pull(skb, skb_transport_offset(skb));
+
+               /* UDP GSO packets looped back after adding UDP encap land here with CHECKSUM none,
+                * instead of adding another check in the tunnel fastpath, we can force valid
+                * csums here (packets are locally generated).
+                * Additionally fixup the UDP CB
+                */
Btw, instead of this comment plus a comment in the ipv6 code that
points back to this ipv4 comment, I would move the explanation to
the udp_post_segment_fix_csum function itself.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help