linux/include/net/tc_act/tc_skbedit.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0-only */
   2/*
   3 * Copyright (c) 2008, Intel Corporation.
   4 *
   5 * Author: Alexander Duyck <alexander.h.duyck@intel.com>
   6 */
   7
   8#ifndef __NET_TC_SKBEDIT_H
   9#define __NET_TC_SKBEDIT_H
  10
  11#include <net/act_api.h>
  12#include <linux/tc_act/tc_skbedit.h>
  13
  14struct tcf_skbedit_params {
  15        u32 flags;
  16        u32 priority;
  17        u32 mark;
  18        u32 mask;
  19        u16 queue_mapping;
  20        u16 ptype;
  21        struct rcu_head rcu;
  22};
  23
  24struct tcf_skbedit {
  25        struct tc_action common;
  26        struct tcf_skbedit_params __rcu *params;
  27};
  28#define to_skbedit(a) ((struct tcf_skbedit *)a)
  29
  30/* Return true iff action is the one identified by FLAG. */
  31static inline bool is_tcf_skbedit_with_flag(const struct tc_action *a, u32 flag)
  32{
  33#ifdef CONFIG_NET_CLS_ACT
  34        u32 flags;
  35
  36        if (a->ops && a->ops->id == TCA_ID_SKBEDIT) {
  37                rcu_read_lock();
  38                flags = rcu_dereference(to_skbedit(a)->params)->flags;
  39                rcu_read_unlock();
  40                return flags == flag;
  41        }
  42#endif
  43        return false;
  44}
  45
  46/* Return true iff action is mark */
  47static inline bool is_tcf_skbedit_mark(const struct tc_action *a)
  48{
  49        return is_tcf_skbedit_with_flag(a, SKBEDIT_F_MARK);
  50}
  51
  52static inline u32 tcf_skbedit_mark(const struct tc_action *a)
  53{
  54        u32 mark;
  55
  56        rcu_read_lock();
  57        mark = rcu_dereference(to_skbedit(a)->params)->mark;
  58        rcu_read_unlock();
  59
  60        return mark;
  61}
  62
  63/* Return true iff action is ptype */
  64static inline bool is_tcf_skbedit_ptype(const struct tc_action *a)
  65{
  66        return is_tcf_skbedit_with_flag(a, SKBEDIT_F_PTYPE);
  67}
  68
  69static inline u32 tcf_skbedit_ptype(const struct tc_action *a)
  70{
  71        u16 ptype;
  72
  73        rcu_read_lock();
  74        ptype = rcu_dereference(to_skbedit(a)->params)->ptype;
  75        rcu_read_unlock();
  76
  77        return ptype;
  78}
  79
  80/* Return true iff action is priority */
  81static inline bool is_tcf_skbedit_priority(const struct tc_action *a)
  82{
  83        return is_tcf_skbedit_with_flag(a, SKBEDIT_F_PRIORITY);
  84}
  85
  86static inline u32 tcf_skbedit_priority(const struct tc_action *a)
  87{
  88        u32 priority;
  89
  90        rcu_read_lock();
  91        priority = rcu_dereference(to_skbedit(a)->params)->priority;
  92        rcu_read_unlock();
  93
  94        return priority;
  95}
  96
  97#endif /* __NET_TC_SKBEDIT_H */
  98