Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
at v5.0-rc7 82 lines 1.8 kB view raw
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 16struct tcf_vlan_params { 17 int tcfv_action; 18 u16 tcfv_push_vid; 19 __be16 tcfv_push_proto; 20 u8 tcfv_push_prio; 21 struct rcu_head rcu; 22}; 23 24struct tcf_vlan { 25 struct tc_action common; 26 struct tcf_vlan_params __rcu *vlan_p; 27}; 28#define to_vlan(a) ((struct tcf_vlan *)a) 29 30static inline bool is_tcf_vlan(const struct tc_action *a) 31{ 32#ifdef CONFIG_NET_CLS_ACT 33 if (a->ops && a->ops->type == TCA_ACT_VLAN) 34 return true; 35#endif 36 return false; 37} 38 39static inline u32 tcf_vlan_action(const struct tc_action *a) 40{ 41 u32 tcfv_action; 42 43 rcu_read_lock(); 44 tcfv_action = rcu_dereference(to_vlan(a)->vlan_p)->tcfv_action; 45 rcu_read_unlock(); 46 47 return tcfv_action; 48} 49 50static inline u16 tcf_vlan_push_vid(const struct tc_action *a) 51{ 52 u16 tcfv_push_vid; 53 54 rcu_read_lock(); 55 tcfv_push_vid = rcu_dereference(to_vlan(a)->vlan_p)->tcfv_push_vid; 56 rcu_read_unlock(); 57 58 return tcfv_push_vid; 59} 60 61static inline __be16 tcf_vlan_push_proto(const struct tc_action *a) 62{ 63 __be16 tcfv_push_proto; 64 65 rcu_read_lock(); 66 tcfv_push_proto = rcu_dereference(to_vlan(a)->vlan_p)->tcfv_push_proto; 67 rcu_read_unlock(); 68 69 return tcfv_push_proto; 70} 71 72static inline u8 tcf_vlan_push_prio(const struct tc_action *a) 73{ 74 u8 tcfv_push_prio; 75 76 rcu_read_lock(); 77 tcfv_push_prio = rcu_dereference(to_vlan(a)->vlan_p)->tcfv_push_prio; 78 rcu_read_unlock(); 79 80 return tcfv_push_prio; 81} 82#endif /* __NET_TC_VLAN_H */