2019-05-27 08:55:01 +02:00
/* SPDX-License-Identifier: GPL-2.0-or-later */
2014-11-19 14:05:03 +01:00
/*
* Copyright ( c ) 2014 Jiri Pirko < jiri @ resnulli . us >
*/
# ifndef __NET_TC_VLAN_H
# define __NET_TC_VLAN_H
# include <net/act_api.h>
2016-09-22 20:01:41 +03:00
# include <linux/tc_act/tc_vlan.h>
2014-11-19 14:05:03 +01:00
2017-11-07 15:49:05 -05:00
struct tcf_vlan_params {
int tcfv_action ;
u16 tcfv_push_vid ;
__be16 tcfv_push_proto ;
u8 tcfv_push_prio ;
struct rcu_head rcu ;
} ;
2014-11-19 14:05:03 +01:00
struct tcf_vlan {
2016-07-25 16:09:42 -07:00
struct tc_action common ;
2017-11-07 15:49:05 -05:00
struct tcf_vlan_params __rcu * vlan_p ;
2014-11-19 14:05:03 +01:00
} ;
2016-07-25 16:09:41 -07:00
# define to_vlan(a) ((struct tcf_vlan *)a)
2014-11-19 14:05:03 +01:00
2016-09-22 20:01:41 +03:00
static inline bool is_tcf_vlan ( const struct tc_action * a )
{
# ifdef CONFIG_NET_CLS_ACT
2019-02-10 14:25:00 +02:00
if ( a - > ops & & a - > ops - > id = = TCA_ID_VLAN )
2016-09-22 20:01:41 +03:00
return true ;
# endif
return false ;
}
static inline u32 tcf_vlan_action ( const struct tc_action * a )
{
2017-11-07 15:49:05 -05:00
u32 tcfv_action ;
rcu_read_lock ( ) ;
tcfv_action = rcu_dereference ( to_vlan ( a ) - > vlan_p ) - > tcfv_action ;
rcu_read_unlock ( ) ;
return tcfv_action ;
2016-09-22 20:01:41 +03:00
}
static inline u16 tcf_vlan_push_vid ( const struct tc_action * a )
{
2017-11-07 15:49:05 -05:00
u16 tcfv_push_vid ;
rcu_read_lock ( ) ;
tcfv_push_vid = rcu_dereference ( to_vlan ( a ) - > vlan_p ) - > tcfv_push_vid ;
rcu_read_unlock ( ) ;
return tcfv_push_vid ;
2016-09-22 20:01:41 +03:00
}
static inline __be16 tcf_vlan_push_proto ( const struct tc_action * a )
{
2017-11-07 15:49:05 -05:00
__be16 tcfv_push_proto ;
rcu_read_lock ( ) ;
tcfv_push_proto = rcu_dereference ( to_vlan ( a ) - > vlan_p ) - > tcfv_push_proto ;
rcu_read_unlock ( ) ;
return tcfv_push_proto ;
2016-09-22 20:01:41 +03:00
}
2017-03-09 09:25:19 +01:00
static inline u8 tcf_vlan_push_prio ( const struct tc_action * a )
{
2017-11-07 15:49:05 -05:00
u8 tcfv_push_prio ;
2017-03-09 09:25:19 +01:00
2017-11-07 15:49:05 -05:00
rcu_read_lock ( ) ;
tcfv_push_prio = rcu_dereference ( to_vlan ( a ) - > vlan_p ) - > tcfv_push_prio ;
rcu_read_unlock ( ) ;
return tcfv_push_prio ;
}
2014-11-19 14:05:03 +01:00
# endif /* __NET_TC_VLAN_H */