Re: [PATCH] openvswitch: Fix L4 checksum handling when dealing with IP fragments

2 messages, 2 authors, 2015-08-03 · open the first message on its own page

Re: [PATCH] openvswitch: Fix L4 checksum handling when dealing with IP fragments

From: Pravin Shelar <hidden>
Date: 2015-08-03 16:25:55

On Sat, Aug 1, 2015 at 6:31 PM, Glenn Griffin [off-list ref] wrote:
openvswitch modifies the L4 checksum of a packet when modifying
the ip address. When an IP packet is fragmented only the first
fragment contains an L4 header and checksum. Prior to this change
openvswitch would modify all fragments, modifying application data
in non-first fragments, causing checksum failures in the
reassembled packet.

Signed-off-by: Glenn Griffin <redacted>
Patch looks good. I have one following comment.
quoted hunk
---
 net/openvswitch/actions.c | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)
diff --git a/net/openvswitch/actions.c b/net/openvswitch/actions.c
index 8a8c0b8..bfffb1a 100644
--- a/net/openvswitch/actions.c
+++ b/net/openvswitch/actions.c
@@ -273,28 +273,36 @@ static int set_eth_addr(struct sk_buff *skb, struct sw_flow_key *flow_key,
        return 0;
 }

-static void set_ip_addr(struct sk_buff *skb, struct iphdr *nh,
-                       __be32 *addr, __be32 new_addr)
+static void update_ip_l4_checksum(struct sk_buff *skb, struct iphdr *nh,
+                                 __be32 addr, __be32 new_addr)
 {
        int transport_len = skb->len - skb_transport_offset(skb);

+       if (ntohs(nh->frag_off) & IP_OFFSET)
+               return;
It is efficient to check frag-offset in network byte order.
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Re: [PATCH] openvswitch: Fix L4 checksum handling when dealing with IP fragments

From: Glenn Griffin <hidden>
Date: 2015-08-03 16:53:44

On Mon, Aug 03, 2015 at 09:25:53AM -0700, Pravin Shelar wrote:
On Sat, Aug 1, 2015 at 6:31 PM, Glenn Griffin [off-list ref] wrote:
quoted
openvswitch modifies the L4 checksum of a packet when modifying
the ip address. When an IP packet is fragmented only the first
fragment contains an L4 header and checksum. Prior to this change
openvswitch would modify all fragments, modifying application data
in non-first fragments, causing checksum failures in the
reassembled packet.

Signed-off-by: Glenn Griffin <redacted>
Patch looks good. I have one following comment.
quoted
---
 net/openvswitch/actions.c | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)
diff --git a/net/openvswitch/actions.c b/net/openvswitch/actions.c
index 8a8c0b8..bfffb1a 100644
--- a/net/openvswitch/actions.c
+++ b/net/openvswitch/actions.c
@@ -273,28 +273,36 @@ static int set_eth_addr(struct sk_buff *skb, struct sw_flow_key *flow_key,
        return 0;
 }

-static void set_ip_addr(struct sk_buff *skb, struct iphdr *nh,
-                       __be32 *addr, __be32 new_addr)
+static void update_ip_l4_checksum(struct sk_buff *skb, struct iphdr *nh,
+                                 __be32 addr, __be32 new_addr)
 {
        int transport_len = skb->len - skb_transport_offset(skb);

+       if (ntohs(nh->frag_off) & IP_OFFSET)
+               return;
It is efficient to check frag-offset in network byte order.
I'll send a revised patch.
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help