diff mbox series

[ovs-dev,5/7] netdev-tc-offloads: Remove redundant loop handling ovs action set

Message ID 1511268042-65124-6-git-send-email-roid@mellanox.com
State Accepted
Headers show
Series Fixes for header rewrite feature | expand

Commit Message

Roi Dayan Nov. 21, 2017, 12:40 p.m. UTC
From: Paul Blakey <paulb@mellanox.com>

OVS action set always has a single nested OVS_KEY_ATTR_*
so there is no need to iterate it.

Signed-off-by: Paul Blakey <paulb@mellanox.com>
Reviewed-by: Roi Dayan <roid@mellanox.com>
---
 lib/netdev-tc-offloads.c | 90 +++++++++++++++++++++++-------------------------
 1 file changed, 44 insertions(+), 46 deletions(-)
diff mbox series

Patch

diff --git a/lib/netdev-tc-offloads.c b/lib/netdev-tc-offloads.c
index 6ad2551..1f77b55 100644
--- a/lib/netdev-tc-offloads.c
+++ b/lib/netdev-tc-offloads.c
@@ -644,56 +644,54 @@  static int
 parse_put_flow_set_action(struct tc_flower *flower, const struct nlattr *set,
                           size_t set_len)
 {
-    const struct nlattr *set_attr;
-    size_t set_left;
-
-    NL_ATTR_FOR_EACH_UNSAFE (set_attr, set_left, set, set_len) {
-        if (nl_attr_type(set_attr) == OVS_KEY_ATTR_TUNNEL) {
-            const struct nlattr *tunnel = nl_attr_get(set_attr);
-            const size_t tunnel_len = nl_attr_get_size(set_attr);
-            const struct nlattr *tun_attr;
-            size_t tun_left;
-
-            flower->set.set = true;
-            NL_ATTR_FOR_EACH_UNSAFE (tun_attr, tun_left, tunnel, tunnel_len) {
-                switch (nl_attr_type(tun_attr)) {
-                case OVS_TUNNEL_KEY_ATTR_ID: {
-                    flower->set.id = nl_attr_get_be64(tun_attr);
-                }
-                break;
-                case OVS_TUNNEL_KEY_ATTR_IPV4_SRC: {
-                    flower->set.ipv4.ipv4_src = nl_attr_get_be32(tun_attr);
-                }
-                break;
-                case OVS_TUNNEL_KEY_ATTR_IPV4_DST: {
-                    flower->set.ipv4.ipv4_dst = nl_attr_get_be32(tun_attr);
-                }
-                break;
-                case OVS_TUNNEL_KEY_ATTR_IPV6_SRC: {
-                    flower->set.ipv6.ipv6_src =
-                        nl_attr_get_in6_addr(tun_attr);
-                }
-                break;
-                case OVS_TUNNEL_KEY_ATTR_IPV6_DST: {
-                    flower->set.ipv6.ipv6_dst =
-                        nl_attr_get_in6_addr(tun_attr);
-                }
-                break;
-                case OVS_TUNNEL_KEY_ATTR_TP_SRC: {
-                    flower->set.tp_src = nl_attr_get_be16(tun_attr);
-                }
-                break;
-                case OVS_TUNNEL_KEY_ATTR_TP_DST: {
-                    flower->set.tp_dst = nl_attr_get_be16(tun_attr);
-                }
-                break;
-                }
-            }
-        } else {
+    const struct nlattr *tunnel;
+    const struct nlattr *tun_attr;
+    size_t tun_left, tunnel_len;
+
+    if (nl_attr_type(set) != OVS_KEY_ATTR_TUNNEL) {
             return parse_put_flow_set_masked_action(flower, set, set_len,
                                                     false);
+    }
+
+    tunnel = nl_attr_get(set);
+    tunnel_len = nl_attr_get_size(set);
+
+    flower->set.set = true;
+    NL_ATTR_FOR_EACH_UNSAFE(tun_attr, tun_left, tunnel, tunnel_len) {
+        switch (nl_attr_type(tun_attr)) {
+        case OVS_TUNNEL_KEY_ATTR_ID: {
+            flower->set.id = nl_attr_get_be64(tun_attr);
+        }
+        break;
+        case OVS_TUNNEL_KEY_ATTR_IPV4_SRC: {
+            flower->set.ipv4.ipv4_src = nl_attr_get_be32(tun_attr);
+        }
+        break;
+        case OVS_TUNNEL_KEY_ATTR_IPV4_DST: {
+            flower->set.ipv4.ipv4_dst = nl_attr_get_be32(tun_attr);
+        }
+        break;
+        case OVS_TUNNEL_KEY_ATTR_IPV6_SRC: {
+            flower->set.ipv6.ipv6_src =
+                nl_attr_get_in6_addr(tun_attr);
+        }
+        break;
+        case OVS_TUNNEL_KEY_ATTR_IPV6_DST: {
+            flower->set.ipv6.ipv6_dst =
+                nl_attr_get_in6_addr(tun_attr);
+        }
+        break;
+        case OVS_TUNNEL_KEY_ATTR_TP_SRC: {
+            flower->set.tp_src = nl_attr_get_be16(tun_attr);
+        }
+        break;
+        case OVS_TUNNEL_KEY_ATTR_TP_DST: {
+            flower->set.tp_dst = nl_attr_get_be16(tun_attr);
+        }
+        break;
         }
     }
+
     return 0;
 }