1 /* 2 * Copyright (c) 2014 Jiri Pirko <jiri@resnulli.us> 3 * 4 * This program is free software; you can redistribute it and/or modify 5 * it under the terms of the GNU General Public License as published by 6 * the Free Software Foundation; either version 2 of the License, or 7 * (at your option) any later version. 8 */ 9 10 #ifndef __NET_TC_VLAN_H 11 #define __NET_TC_VLAN_H 12 13 #include <net/act_api.h> 14 #include <linux/tc_act/tc_vlan.h> 15 16 struct tcf_vlan { 17 struct tc_action common; 18 int tcfv_action; 19 u16 tcfv_push_vid; 20 __be16 tcfv_push_proto; 21 u8 tcfv_push_prio; 22 }; 23 #define to_vlan(a) ((struct tcf_vlan *)a) 24 25 static inline bool is_tcf_vlan(const struct tc_action *a) 26 { 27 #ifdef CONFIG_NET_CLS_ACT 28 if (a->ops && a->ops->type == TCA_ACT_VLAN) 29 return true; 30 #endif 31 return false; 32 } 33 34 static inline u32 tcf_vlan_action(const struct tc_action *a) 35 { 36 return to_vlan(a)->tcfv_action; 37 } 38 39 static inline u16 tcf_vlan_push_vid(const struct tc_action *a) 40 { 41 return to_vlan(a)->tcfv_push_vid; 42 } 43 44 static inline __be16 tcf_vlan_push_proto(const struct tc_action *a) 45 { 46 return to_vlan(a)->tcfv_push_proto; 47 } 48 49 static inline u8 tcf_vlan_push_prio(const struct tc_action *a) 50 { 51 return to_vlan(a)->tcfv_push_prio; 52 } 53 54 #endif /* __NET_TC_VLAN_H */ 55