mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-09-04 20:19:47 +08:00 
			
		
		
		
	 ada066b2e0
			
		
	
	
		ada066b2e0
		
	
	
	
	
		
			
			Signed-off-by: Eric Dumazet <edumazet@google.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
		
			
				
	
	
		
			60 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* SPDX-License-Identifier: GPL-2.0 */
 | |
| #ifndef __NET_TC_MIR_H
 | |
| #define __NET_TC_MIR_H
 | |
| 
 | |
| #include <net/act_api.h>
 | |
| #include <linux/tc_act/tc_mirred.h>
 | |
| 
 | |
| struct tcf_mirred {
 | |
| 	struct tc_action	common;
 | |
| 	int			tcfm_eaction;
 | |
| 	bool			tcfm_mac_header_xmit;
 | |
| 	struct net_device __rcu	*tcfm_dev;
 | |
| 	netdevice_tracker	tcfm_dev_tracker;
 | |
| 	struct list_head	tcfm_list;
 | |
| };
 | |
| #define to_mirred(a) ((struct tcf_mirred *)a)
 | |
| 
 | |
| static inline bool is_tcf_mirred_egress_redirect(const struct tc_action *a)
 | |
| {
 | |
| #ifdef CONFIG_NET_CLS_ACT
 | |
| 	if (a->ops && a->ops->id == TCA_ID_MIRRED)
 | |
| 		return to_mirred(a)->tcfm_eaction == TCA_EGRESS_REDIR;
 | |
| #endif
 | |
| 	return false;
 | |
| }
 | |
| 
 | |
| static inline bool is_tcf_mirred_egress_mirror(const struct tc_action *a)
 | |
| {
 | |
| #ifdef CONFIG_NET_CLS_ACT
 | |
| 	if (a->ops && a->ops->id == TCA_ID_MIRRED)
 | |
| 		return to_mirred(a)->tcfm_eaction == TCA_EGRESS_MIRROR;
 | |
| #endif
 | |
| 	return false;
 | |
| }
 | |
| 
 | |
| static inline bool is_tcf_mirred_ingress_redirect(const struct tc_action *a)
 | |
| {
 | |
| #ifdef CONFIG_NET_CLS_ACT
 | |
| 	if (a->ops && a->ops->id == TCA_ID_MIRRED)
 | |
| 		return to_mirred(a)->tcfm_eaction == TCA_INGRESS_REDIR;
 | |
| #endif
 | |
| 	return false;
 | |
| }
 | |
| 
 | |
| static inline bool is_tcf_mirred_ingress_mirror(const struct tc_action *a)
 | |
| {
 | |
| #ifdef CONFIG_NET_CLS_ACT
 | |
| 	if (a->ops && a->ops->id == TCA_ID_MIRRED)
 | |
| 		return to_mirred(a)->tcfm_eaction == TCA_INGRESS_MIRROR;
 | |
| #endif
 | |
| 	return false;
 | |
| }
 | |
| 
 | |
| static inline struct net_device *tcf_mirred_dev(const struct tc_action *a)
 | |
| {
 | |
| 	return rtnl_dereference(to_mirred(a)->tcfm_dev);
 | |
| }
 | |
| 
 | |
| #endif /* __NET_TC_MIR_H */
 |