cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

tc_skbedit.h (2436B)


      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 mapping_mod;
     21	u16 ptype;
     22	struct rcu_head rcu;
     23};
     24
     25struct tcf_skbedit {
     26	struct tc_action common;
     27	struct tcf_skbedit_params __rcu *params;
     28};
     29#define to_skbedit(a) ((struct tcf_skbedit *)a)
     30
     31/* Return true iff action is the one identified by FLAG. */
     32static inline bool is_tcf_skbedit_with_flag(const struct tc_action *a, u32 flag)
     33{
     34#ifdef CONFIG_NET_CLS_ACT
     35	u32 flags;
     36
     37	if (a->ops && a->ops->id == TCA_ID_SKBEDIT) {
     38		rcu_read_lock();
     39		flags = rcu_dereference(to_skbedit(a)->params)->flags;
     40		rcu_read_unlock();
     41		return flags == flag;
     42	}
     43#endif
     44	return false;
     45}
     46
     47/* Return true iff action is mark */
     48static inline bool is_tcf_skbedit_mark(const struct tc_action *a)
     49{
     50	return is_tcf_skbedit_with_flag(a, SKBEDIT_F_MARK);
     51}
     52
     53static inline u32 tcf_skbedit_mark(const struct tc_action *a)
     54{
     55	u32 mark;
     56
     57	rcu_read_lock();
     58	mark = rcu_dereference(to_skbedit(a)->params)->mark;
     59	rcu_read_unlock();
     60
     61	return mark;
     62}
     63
     64/* Return true iff action is ptype */
     65static inline bool is_tcf_skbedit_ptype(const struct tc_action *a)
     66{
     67	return is_tcf_skbedit_with_flag(a, SKBEDIT_F_PTYPE);
     68}
     69
     70static inline u32 tcf_skbedit_ptype(const struct tc_action *a)
     71{
     72	u16 ptype;
     73
     74	rcu_read_lock();
     75	ptype = rcu_dereference(to_skbedit(a)->params)->ptype;
     76	rcu_read_unlock();
     77
     78	return ptype;
     79}
     80
     81/* Return true iff action is priority */
     82static inline bool is_tcf_skbedit_priority(const struct tc_action *a)
     83{
     84	return is_tcf_skbedit_with_flag(a, SKBEDIT_F_PRIORITY);
     85}
     86
     87static inline u32 tcf_skbedit_priority(const struct tc_action *a)
     88{
     89	u32 priority;
     90
     91	rcu_read_lock();
     92	priority = rcu_dereference(to_skbedit(a)->params)->priority;
     93	rcu_read_unlock();
     94
     95	return priority;
     96}
     97
     98/* Return true iff action is queue_mapping */
     99static inline bool is_tcf_skbedit_queue_mapping(const struct tc_action *a)
    100{
    101	return is_tcf_skbedit_with_flag(a, SKBEDIT_F_QUEUE_MAPPING);
    102}
    103
    104/* Return true iff action is inheritdsfield */
    105static inline bool is_tcf_skbedit_inheritdsfield(const struct tc_action *a)
    106{
    107	return is_tcf_skbedit_with_flag(a, SKBEDIT_F_INHERITDSFIELD);
    108}
    109
    110#endif /* __NET_TC_SKBEDIT_H */