flow_compose() can generate packets with bad IPv4 checksum, however the
associated Rx flags were not correctly set.
The usefulness of setting this metadata seems limited, yet fix this for
consistency.
Fixes: c62b4ac8f8da ("ovs-ofctl: Implement compose-packet --bare [--bad-csum].")
Signed-off-by: David Marchand <[email protected]>
---
lib/dp-packet.h | 8 +++++++-
lib/flow.c | 2 +-
2 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/lib/dp-packet.h b/lib/dp-packet.h
index 0f487a4283..c795d9f8da 100644
--- a/lib/dp-packet.h
+++ b/lib/dp-packet.h
@@ -1411,7 +1411,6 @@ dp_packet_ol_reset_ip_csum_good(struct dp_packet *p)
*dp_packet_ol_flags_ptr(p) &= ~DP_PACKET_OL_RX_IP_CKSUM_GOOD;
}
-/* Marks packet 'p' with bad IPv4 checksum. */
static inline bool
dp_packet_ip_checksum_bad(const struct dp_packet *p)
{
@@ -1419,6 +1418,13 @@ dp_packet_ip_checksum_bad(const struct dp_packet *p)
DP_PACKET_OL_RX_IP_CKSUM_BAD;
}
+static inline void
+dp_packet_ol_set_ip_csum_bad(struct dp_packet *p)
+{
+ *dp_packet_ol_flags_ptr(p) &= ~DP_PACKET_OL_RX_IP_CKSUM_GOOD;
+ *dp_packet_ol_flags_ptr(p) |= DP_PACKET_OL_RX_IP_CKSUM_BAD;
+}
+
/* Return 'true' is packet 'b' is not encapsulated and is marked for IPv4
* checksum offload, or if 'b' is encapsulated and the outer layer is marked
* for IPv4 checksum offload. IPv6 packets, non offloaded packets, and IPv4
diff --git a/lib/flow.c b/lib/flow.c
index f0fc41b40b..61e732aff8 100644
--- a/lib/flow.c
+++ b/lib/flow.c
@@ -3412,7 +3412,7 @@ flow_compose(struct dp_packet *p, const struct flow *flow,
* bit.
*/
ip->ip_csum ^= (OVS_FORCE ovs_be16) 0x1;
- dp_packet_ip_checksum_bad(p);
+ dp_packet_ol_set_ip_csum_bad(p);
} else {
dp_packet_ol_set_ip_csum_good(p);
}
--
2.48.1
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev