OSDN Git Service

net: tc_act: add skbedit_ptype helper functions
authorJohn Hurley <john.hurley@netronome.com>
Sun, 4 Aug 2019 15:09:03 +0000 (16:09 +0100)
committerDavid S. Miller <davem@davemloft.net>
Tue, 6 Aug 2019 21:24:21 +0000 (14:24 -0700)
The tc_act header file contains an inline function that checks if an
action is changing the skb mark of a packet and a further function to
extract the mark.

Add similar functions to check for and get skbedit actions that modify
the packet type of the skb.

Signed-off-by: John Hurley <john.hurley@netronome.com>
Reviewed-by: Simon Horman <simon.horman@netronome.com>
Reviewed-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/tc_act/tc_skbedit.h

index 4c04e29..b22a1f6 100644 (file)
@@ -54,4 +54,31 @@ static inline u32 tcf_skbedit_mark(const struct tc_action *a)
        return mark;
 }
 
+/* Return true iff action is ptype */
+static inline bool is_tcf_skbedit_ptype(const struct tc_action *a)
+{
+#ifdef CONFIG_NET_CLS_ACT
+       u32 flags;
+
+       if (a->ops && a->ops->id == TCA_ID_SKBEDIT) {
+               rcu_read_lock();
+               flags = rcu_dereference(to_skbedit(a)->params)->flags;
+               rcu_read_unlock();
+               return flags == SKBEDIT_F_PTYPE;
+       }
+#endif
+       return false;
+}
+
+static inline u32 tcf_skbedit_ptype(const struct tc_action *a)
+{
+       u16 ptype;
+
+       rcu_read_lock();
+       ptype = rcu_dereference(to_skbedit(a)->params)->ptype;
+       rcu_read_unlock();
+
+       return ptype;
+}
+
 #endif /* __NET_TC_SKBEDIT_H */