|
|
e9962dc |
From 45a60c21fc17ba31199fa800cdce92cc1f17f06b Mon Sep 17 00:00:00 2001
|
|
|
e9962dc |
From: Roi Dayan <roid@mellanox.com>
|
|
|
e9962dc |
Date: Sun, 25 Mar 2018 12:11:48 +0300
|
|
|
e9962dc |
Subject: [PATCH 1/2] lib/netdev-tc-offloads: Fix frag first/later translation
|
|
|
e9962dc |
|
|
|
e9962dc |
Fragment mask (any and later) always exists so we need to test
|
|
|
e9962dc |
for FLOW_NW_FRAG_LATER only if the state is FLOW_NW_FRAG_ANY.
|
|
|
e9962dc |
Before this fix we could pass frag no and first at the same time to TC
|
|
|
e9962dc |
which is also not tested there for bad frag state.
|
|
|
e9962dc |
This fix make sure we only pass frag first/later if is frag.
|
|
|
e9962dc |
|
|
|
e9962dc |
Fixes: 83e866067ea6 ("netdev-tc-offloads: Add support for IP fragmentation")
|
|
|
e9962dc |
Signed-off-by: Roi Dayan <roid@mellanox.com>
|
|
|
e9962dc |
Reviewed-by: Paul Blakey <paulb@mellanox.com>
|
|
|
e9962dc |
Signed-off-by: Simon Horman <simon.horman@netronome.com>
|
|
|
e9962dc |
---
|
|
|
e9962dc |
lib/netdev-tc-offloads.c | 19 +++++++++++++------
|
|
|
e9962dc |
1 file changed, 13 insertions(+), 6 deletions(-)
|
|
|
e9962dc |
|
|
|
e9962dc |
diff --git a/lib/netdev-tc-offloads.c b/lib/netdev-tc-offloads.c
|
|
|
e9962dc |
index f22415ee1..6db76801f 100644
|
|
|
e9962dc |
--- a/lib/netdev-tc-offloads.c
|
|
|
e9962dc |
+++ b/lib/netdev-tc-offloads.c
|
|
|
e9962dc |
@@ -948,14 +948,21 @@ netdev_tc_flow_put(struct netdev *netdev, struct match *match,
|
|
|
e9962dc |
flower.key.ip_ttl = key->nw_ttl;
|
|
|
e9962dc |
flower.mask.ip_ttl = mask->nw_ttl;
|
|
|
e9962dc |
|
|
|
e9962dc |
- if (mask->nw_frag) {
|
|
|
e9962dc |
- if (key->nw_frag & FLOW_NW_FRAG_ANY)
|
|
|
e9962dc |
+ if (mask->nw_frag & FLOW_NW_FRAG_ANY) {
|
|
|
e9962dc |
+ flower.mask.flags |= TCA_FLOWER_KEY_FLAGS_IS_FRAGMENT;
|
|
|
e9962dc |
+
|
|
|
e9962dc |
+ if (key->nw_frag & FLOW_NW_FRAG_ANY) {
|
|
|
e9962dc |
flower.key.flags |= TCA_FLOWER_KEY_FLAGS_IS_FRAGMENT;
|
|
|
e9962dc |
- if (!(key->nw_frag & FLOW_NW_FRAG_LATER))
|
|
|
e9962dc |
- flower.key.flags |= TCA_FLOWER_KEY_FLAGS_FRAG_IS_FIRST;
|
|
|
e9962dc |
|
|
|
e9962dc |
- flower.mask.flags |= TCA_FLOWER_KEY_FLAGS_IS_FRAGMENT;
|
|
|
e9962dc |
- flower.mask.flags |= TCA_FLOWER_KEY_FLAGS_FRAG_IS_FIRST;
|
|
|
e9962dc |
+ if (mask->nw_frag & FLOW_NW_FRAG_LATER) {
|
|
|
e9962dc |
+ flower.mask.flags |= TCA_FLOWER_KEY_FLAGS_FRAG_IS_FIRST;
|
|
|
e9962dc |
+
|
|
|
e9962dc |
+ if (!(key->nw_frag & FLOW_NW_FRAG_LATER)) {
|
|
|
e9962dc |
+ flower.key.flags |= TCA_FLOWER_KEY_FLAGS_FRAG_IS_FIRST;
|
|
|
e9962dc |
+ }
|
|
|
e9962dc |
+ }
|
|
|
e9962dc |
+ }
|
|
|
e9962dc |
+
|
|
|
e9962dc |
mask->nw_frag = 0;
|
|
|
e9962dc |
}
|
|
|
e9962dc |
|
|
|
e9962dc |
--
|
|
|
e9962dc |
2.17.0
|
|
|
e9962dc |
|