From: Paul Blakey <pa...@mellanox.com>

Update kernel UAPI to support conntrack matches, and the
tc actions ct and goto chain.

Signed-off-by: Paul Blakey <pa...@mellanox.com>
---
 include/linux/automake.mk    |  3 ++-
 include/linux/pkt_cls.h      | 46 +++++++++++++++++++++++++++++++++++++++++---
 include/linux/tc_act/tc_ct.h | 41 +++++++++++++++++++++++++++++++++++++++
 3 files changed, 86 insertions(+), 4 deletions(-)
 create mode 100644 include/linux/tc_act/tc_ct.h

diff --git a/include/linux/automake.mk b/include/linux/automake.mk
index c75918626043..8f063f482e15 100644
--- a/include/linux/automake.mk
+++ b/include/linux/automake.mk
@@ -6,4 +6,5 @@ noinst_HEADERS += \
        include/linux/tc_act/tc_pedit.h \
        include/linux/tc_act/tc_skbedit.h \
        include/linux/tc_act/tc_tunnel_key.h \
-       include/linux/tc_act/tc_vlan.h
+       include/linux/tc_act/tc_vlan.h \
+       include/linux/tc_act/tc_ct.h
diff --git a/include/linux/pkt_cls.h b/include/linux/pkt_cls.h
index 55f3ef17c521..b0a5ce8bec2d 100644
--- a/include/linux/pkt_cls.h
+++ b/include/linux/pkt_cls.h
@@ -44,7 +44,21 @@ enum {
 #define TC_ACT_QUEUED          5
 #define TC_ACT_REPEAT          6
 #define TC_ACT_REDIRECT                7
-#define TC_ACT_JUMP            0x10000000
+
+/* There is a special kind of actions called "extended actions",
+ * which need a value parameter. These have a local opcode located in
+ * the highest nibble, starting from 1. The rest of the bits
+ * are used to carry the value. These two parts together make
+ * a combined opcode.
+ */
+#define __TC_ACT_EXT_SHIFT 28
+#define __TC_ACT_EXT(local) ((local) << __TC_ACT_EXT_SHIFT)
+#define TC_ACT_EXT_VAL_MASK ((1 << __TC_ACT_EXT_SHIFT) - 1)
+#define TC_ACT_EXT_CMP(combined, opcode) \
+       (((combined) & (~TC_ACT_EXT_VAL_MASK)) == opcode)
+
+#define TC_ACT_JUMP __TC_ACT_EXT(1)
+#define TC_ACT_GOTO_CHAIN __TC_ACT_EXT(2)
 
 struct tc_police {
        __u32                   index;
@@ -207,16 +221,42 @@ enum {
        TCA_FLOWER_KEY_CVLAN_PRIO,      /* u8   */
        TCA_FLOWER_KEY_CVLAN_ETH_TYPE,  /* be16 */
 
-       TCA_FLOWER_KEY_ENC_IP_TOS,          /* u8 */
+       TCA_FLOWER_KEY_ENC_IP_TOS,      /* u8 */
        TCA_FLOWER_KEY_ENC_IP_TOS_MASK, /* u8 */
-       TCA_FLOWER_KEY_ENC_IP_TTL,              /* u8 */
+       TCA_FLOWER_KEY_ENC_IP_TTL,      /* u8 */
        TCA_FLOWER_KEY_ENC_IP_TTL_MASK, /* u8 */
+
        TCA_FLOWER_KEY_ENC_OPTS,
        TCA_FLOWER_KEY_ENC_OPTS_MASK,
 
+       TCA_FLOWER_IN_HW_COUNT,
+
+       TCA_FLOWER_KEY_PORT_SRC_MIN,    /* be16 */
+       TCA_FLOWER_KEY_PORT_SRC_MAX,    /* be16 */
+       TCA_FLOWER_KEY_PORT_DST_MIN,    /* be16 */
+       TCA_FLOWER_KEY_PORT_DST_MAX,    /* be16 */
+
+       TCA_FLOWER_KEY_CT_STATE,        /* u16 */
+       TCA_FLOWER_KEY_CT_STATE_MASK,   /* u16 */
+       TCA_FLOWER_KEY_CT_ZONE,         /* u16 */
+       TCA_FLOWER_KEY_CT_ZONE_MASK,    /* u16 */
+       TCA_FLOWER_KEY_CT_MARK,         /* u32 */
+       TCA_FLOWER_KEY_CT_MARK_MASK,    /* u32 */
+       TCA_FLOWER_KEY_CT_LABELS,       /* u128 */
+       TCA_FLOWER_KEY_CT_LABELS_MASK,  /* u128 */
+
        __TCA_FLOWER_MAX,
 };
 
+#define TCA_FLOWER_MAX (__TCA_FLOWER_MAX - 1)
+
+enum {
+       TCA_FLOWER_KEY_CT_FLAGS_NEW = 1 << 0, /* Beginning of a new connection. 
*/
+       TCA_FLOWER_KEY_CT_FLAGS_ESTABLISHED = 1 << 1, /* Part of an existing 
connection. */
+       TCA_FLOWER_KEY_CT_FLAGS_RELATED = 1 << 2, /* Related to an established 
connection. */
+       TCA_FLOWER_KEY_CT_FLAGS_TRACKED = 1 << 3, /* Conntrack has occurred. */
+};
+
 enum {
        TCA_FLOWER_KEY_ENC_OPTS_UNSPEC,
        TCA_FLOWER_KEY_ENC_OPTS_GENEVE, /* Nested
diff --git a/include/linux/tc_act/tc_ct.h b/include/linux/tc_act/tc_ct.h
new file mode 100644
index 000000000000..5fb1d7ac1027
--- /dev/null
+++ b/include/linux/tc_act/tc_ct.h
@@ -0,0 +1,41 @@
+/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
+#ifndef __UAPI_TC_CT_H
+#define __UAPI_TC_CT_H
+
+#include <linux/types.h>
+#include <linux/pkt_cls.h>
+
+enum {
+       TCA_CT_UNSPEC,
+       TCA_CT_PARMS,
+       TCA_CT_TM,
+       TCA_CT_ACTION,          /* u16 */
+       TCA_CT_ZONE,            /* u16 */
+       TCA_CT_MARK,            /* u32 */
+       TCA_CT_MARK_MASK,       /* u32 */
+       TCA_CT_LABELS,          /* u128 */
+       TCA_CT_LABELS_MASK,     /* u128 */
+       TCA_CT_NAT_IPV4_MIN,    /* be32 */
+       TCA_CT_NAT_IPV4_MAX,    /* be32 */
+       TCA_CT_NAT_IPV6_MIN,    /* struct in6_addr */
+       TCA_CT_NAT_IPV6_MAX,    /* struct in6_addr */
+       TCA_CT_NAT_PORT_MIN,    /* be16 */
+       TCA_CT_NAT_PORT_MAX,    /* be16 */
+       TCA_CT_PAD,
+       __TCA_CT_MAX
+};
+
+#define TCA_CT_MAX (__TCA_CT_MAX - 1)
+
+#define TCA_CT_ACT_COMMIT      (1 << 0)
+#define TCA_CT_ACT_FORCE       (1 << 1)
+#define TCA_CT_ACT_CLEAR       (1 << 2)
+#define TCA_CT_ACT_NAT         (1 << 3)
+#define TCA_CT_ACT_NAT_SRC     (1 << 4)
+#define TCA_CT_ACT_NAT_DST     (1 << 5)
+
+struct tc_ct {
+       tc_gen;
+};
+
+#endif /* __UAPI_TC_CT_H */
-- 
2.8.4

_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to