cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

tc_vlan.h (2062B)


      1/* SPDX-License-Identifier: GPL-2.0-or-later */
      2/*
      3 * Copyright (c) 2014 Jiri Pirko <jiri@resnulli.us>
      4 */
      5
      6#ifndef __NET_TC_VLAN_H
      7#define __NET_TC_VLAN_H
      8
      9#include <net/act_api.h>
     10#include <linux/tc_act/tc_vlan.h>
     11
     12struct tcf_vlan_params {
     13	int               tcfv_action;
     14	unsigned char     tcfv_push_dst[ETH_ALEN];
     15	unsigned char     tcfv_push_src[ETH_ALEN];
     16	u16               tcfv_push_vid;
     17	__be16            tcfv_push_proto;
     18	u8                tcfv_push_prio;
     19	bool              tcfv_push_prio_exists;
     20	struct rcu_head   rcu;
     21};
     22
     23struct tcf_vlan {
     24	struct tc_action	common;
     25	struct tcf_vlan_params __rcu *vlan_p;
     26};
     27#define to_vlan(a) ((struct tcf_vlan *)a)
     28
     29static inline bool is_tcf_vlan(const struct tc_action *a)
     30{
     31#ifdef CONFIG_NET_CLS_ACT
     32	if (a->ops && a->ops->id == TCA_ID_VLAN)
     33		return true;
     34#endif
     35	return false;
     36}
     37
     38static inline u32 tcf_vlan_action(const struct tc_action *a)
     39{
     40	u32 tcfv_action;
     41
     42	rcu_read_lock();
     43	tcfv_action = rcu_dereference(to_vlan(a)->vlan_p)->tcfv_action;
     44	rcu_read_unlock();
     45
     46	return tcfv_action;
     47}
     48
     49static inline u16 tcf_vlan_push_vid(const struct tc_action *a)
     50{
     51	u16 tcfv_push_vid;
     52
     53	rcu_read_lock();
     54	tcfv_push_vid = rcu_dereference(to_vlan(a)->vlan_p)->tcfv_push_vid;
     55	rcu_read_unlock();
     56
     57	return tcfv_push_vid;
     58}
     59
     60static inline __be16 tcf_vlan_push_proto(const struct tc_action *a)
     61{
     62	__be16 tcfv_push_proto;
     63
     64	rcu_read_lock();
     65	tcfv_push_proto = rcu_dereference(to_vlan(a)->vlan_p)->tcfv_push_proto;
     66	rcu_read_unlock();
     67
     68	return tcfv_push_proto;
     69}
     70
     71static inline u8 tcf_vlan_push_prio(const struct tc_action *a)
     72{
     73	u8 tcfv_push_prio;
     74
     75	rcu_read_lock();
     76	tcfv_push_prio = rcu_dereference(to_vlan(a)->vlan_p)->tcfv_push_prio;
     77	rcu_read_unlock();
     78
     79	return tcfv_push_prio;
     80}
     81
     82static inline void tcf_vlan_push_eth(unsigned char *src, unsigned char *dest,
     83				     const struct tc_action *a)
     84{
     85	rcu_read_lock();
     86	memcpy(dest, rcu_dereference(to_vlan(a)->vlan_p)->tcfv_push_dst, ETH_ALEN);
     87	memcpy(src, rcu_dereference(to_vlan(a)->vlan_p)->tcfv_push_src, ETH_ALEN);
     88	rcu_read_unlock();
     89}
     90
     91#endif /* __NET_TC_VLAN_H */