Signed-off-by: Paul Blakey <pa...@mellanox.com>
---
 include/uapi/linux/tc_ematch/tc_em_meta.h | 1 +
 net/sched/em_meta.c                       | 8 ++++++++
 2 files changed, 9 insertions(+)

diff --git a/include/uapi/linux/tc_ematch/tc_em_meta.h 
b/include/uapi/linux/tc_ematch/tc_em_meta.h
index cf30b5b..25a6fb8 100644
--- a/include/uapi/linux/tc_ematch/tc_em_meta.h
+++ b/include/uapi/linux/tc_ematch/tc_em_meta.h
@@ -81,6 +81,7 @@ enum {
        TCF_META_ID_SK_WRITE_PENDING,
        TCF_META_ID_VLAN_TAG,
        TCF_META_ID_RXHASH,
+       TCF_META_ID_TCRECIRC,
        __TCF_META_ID_MAX
 };
 #define TCF_META_ID_MAX (__TCF_META_ID_MAX - 1)
diff --git a/net/sched/em_meta.c b/net/sched/em_meta.c
index d6e9711..041e0b3 100644
--- a/net/sched/em_meta.c
+++ b/net/sched/em_meta.c
@@ -245,6 +245,13 @@ static inline int var_dev(struct net_device *dev, struct 
meta_obj *dst)
        dst->value = skb->tc_index;
 }
 
+META_COLLECTOR(int_tcrecirc)
+{
+       uint32_t *recirc = skb_ext_find(skb, SKB_EXT_TC_RECIRC_ID);
+
+       dst->value = recirc? *recirc : 0;
+}
+
 /**************************************************************************
  * Routing
  **************************************************************************/
@@ -638,6 +645,7 @@ struct meta_ops {
                [META_ID(MACLEN)]               = META_FUNC(int_maclen),
                [META_ID(NFMARK)]               = META_FUNC(int_mark),
                [META_ID(TCINDEX)]              = META_FUNC(int_tcindex),
+               [META_ID(TCRECIRC)]             = META_FUNC(int_tcrecirc),
                [META_ID(RTCLASSID)]            = META_FUNC(int_rtclassid),
                [META_ID(RTIIF)]                = META_FUNC(int_rtiif),
                [META_ID(SK_FAMILY)]            = META_FUNC(int_sk_family),
-- 
1.8.3.1

Reply via email to