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_ct.h (2140B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2#ifndef __NET_TC_CT_H
      3#define __NET_TC_CT_H
      4
      5#include <net/act_api.h>
      6#include <uapi/linux/tc_act/tc_ct.h>
      7
      8#if IS_ENABLED(CONFIG_NF_CONNTRACK)
      9#include <net/netfilter/nf_nat.h>
     10#include <net/netfilter/nf_conntrack_labels.h>
     11
     12struct tcf_ct_params {
     13	struct nf_conn *tmpl;
     14	u16 zone;
     15
     16	u32 mark;
     17	u32 mark_mask;
     18
     19	u32 labels[NF_CT_LABELS_MAX_SIZE / sizeof(u32)];
     20	u32 labels_mask[NF_CT_LABELS_MAX_SIZE / sizeof(u32)];
     21
     22	struct nf_nat_range2 range;
     23	bool ipv4_range;
     24
     25	u16 ct_action;
     26
     27	struct rcu_head rcu;
     28
     29	struct tcf_ct_flow_table *ct_ft;
     30	struct nf_flowtable *nf_ft;
     31};
     32
     33struct tcf_ct {
     34	struct tc_action common;
     35	struct tcf_ct_params __rcu *params;
     36};
     37
     38#define to_ct(a) ((struct tcf_ct *)a)
     39#define to_ct_params(a)							\
     40	((struct tcf_ct_params *)					\
     41	 rcu_dereference_protected(to_ct(a)->params,			\
     42				   lockdep_is_held(&a->tcfa_lock)))
     43
     44static inline uint16_t tcf_ct_zone(const struct tc_action *a)
     45{
     46	return to_ct_params(a)->zone;
     47}
     48
     49static inline int tcf_ct_action(const struct tc_action *a)
     50{
     51	return to_ct_params(a)->ct_action;
     52}
     53
     54static inline struct nf_flowtable *tcf_ct_ft(const struct tc_action *a)
     55{
     56	return to_ct_params(a)->nf_ft;
     57}
     58
     59#else
     60static inline uint16_t tcf_ct_zone(const struct tc_action *a) { return 0; }
     61static inline int tcf_ct_action(const struct tc_action *a) { return 0; }
     62static inline struct nf_flowtable *tcf_ct_ft(const struct tc_action *a)
     63{
     64	return NULL;
     65}
     66#endif /* CONFIG_NF_CONNTRACK */
     67
     68#if IS_ENABLED(CONFIG_NET_ACT_CT)
     69static inline void
     70tcf_ct_flow_table_restore_skb(struct sk_buff *skb, unsigned long cookie)
     71{
     72	enum ip_conntrack_info ctinfo = cookie & NFCT_INFOMASK;
     73	struct nf_conn *ct;
     74
     75	ct = (struct nf_conn *)(cookie & NFCT_PTRMASK);
     76	nf_conntrack_get(&ct->ct_general);
     77	nf_ct_set(skb, ct, ctinfo);
     78}
     79#else
     80static inline void
     81tcf_ct_flow_table_restore_skb(struct sk_buff *skb, unsigned long cookie) { }
     82#endif
     83
     84static inline bool is_tcf_ct(const struct tc_action *a)
     85{
     86#if defined(CONFIG_NET_CLS_ACT) && IS_ENABLED(CONFIG_NF_CONNTRACK)
     87	if (a->ops && a->ops->id == TCA_ID_CT)
     88		return true;
     89#endif
     90	return false;
     91}
     92
     93#endif /* __NET_TC_CT_H */