2008-09-12 16:30:20 -07:00
/*
* Copyright ( c ) 2008 , Intel Corporation .
*
* This program is free software ; you can redistribute it and / or modify it
* under the terms and conditions of the GNU General Public License ,
* version 2 , as published by the Free Software Foundation .
*
* This program is distributed in the hope it will be useful , but WITHOUT
* ANY WARRANTY ; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE . See the GNU General Public License for
* more details .
*
* You should have received a copy of the GNU General Public License along with
2013-12-06 09:13:40 -08:00
* this program ; if not , see < http : //www.gnu.org/licenses/>.
2008-09-12 16:30:20 -07:00
*
* Author : Alexander Duyck < alexander . h . duyck @ intel . com >
*/
# ifndef __NET_TC_SKBEDIT_H
# define __NET_TC_SKBEDIT_H
# include <net/act_api.h>
2016-03-08 12:42:32 +02:00
# include <linux/tc_act/tc_skbedit.h>
2008-09-12 16:30:20 -07:00
2018-07-11 16:04:50 +02:00
struct tcf_skbedit_params {
u32 flags ;
u32 priority ;
u32 mark ;
u32 mask ;
u16 queue_mapping ;
u16 ptype ;
struct rcu_head rcu ;
} ;
2008-09-12 16:30:20 -07:00
struct tcf_skbedit {
2018-07-11 16:04:50 +02:00
struct tc_action common ;
struct tcf_skbedit_params __rcu * params ;
2008-09-12 16:30:20 -07:00
} ;
2016-07-25 16:09:41 -07:00
# define to_skbedit(a) ((struct tcf_skbedit *)a)
2008-09-12 16:30:20 -07:00
2016-03-08 12:42:32 +02:00
/* Return true iff action is mark */
static inline bool is_tcf_skbedit_mark ( const struct tc_action * a )
{
# ifdef CONFIG_NET_CLS_ACT
2018-07-11 16:04:50 +02:00
u32 flags ;
2019-02-10 14:25:00 +02:00
if ( a - > ops & & a - > ops - > id = = TCA_ID_SKBEDIT ) {
2018-07-11 16:04:50 +02:00
rcu_read_lock ( ) ;
flags = rcu_dereference ( to_skbedit ( a ) - > params ) - > flags ;
rcu_read_unlock ( ) ;
return flags = = SKBEDIT_F_MARK ;
}
2016-03-08 12:42:32 +02:00
# endif
return false ;
}
static inline u32 tcf_skbedit_mark ( const struct tc_action * a )
{
2018-07-11 16:04:50 +02:00
u32 mark ;
rcu_read_lock ( ) ;
mark = rcu_dereference ( to_skbedit ( a ) - > params ) - > mark ;
rcu_read_unlock ( ) ;
return mark ;
2016-03-08 12:42:32 +02:00
}
2008-09-12 16:30:20 -07:00
# endif /* __NET_TC_SKBEDIT_H */