linux/include/net/tc_act/tc_mirred.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2#ifndef __NET_TC_MIR_H
   3#define __NET_TC_MIR_H
   4
   5#include <net/act_api.h>
   6#include <linux/tc_act/tc_mirred.h>
   7
   8struct tcf_mirred {
   9        struct tc_action        common;
  10        int                     tcfm_eaction;
  11        bool                    tcfm_mac_header_xmit;
  12        struct net_device __rcu *tcfm_dev;
  13        struct list_head        tcfm_list;
  14};
  15#define to_mirred(a) ((struct tcf_mirred *)a)
  16
  17static inline bool is_tcf_mirred_egress_redirect(const struct tc_action *a)
  18{
  19#ifdef CONFIG_NET_CLS_ACT
  20        if (a->ops && a->ops->id == TCA_ID_MIRRED)
  21                return to_mirred(a)->tcfm_eaction == TCA_EGRESS_REDIR;
  22#endif
  23        return false;
  24}
  25
  26static inline bool is_tcf_mirred_egress_mirror(const struct tc_action *a)
  27{
  28#ifdef CONFIG_NET_CLS_ACT
  29        if (a->ops && a->ops->id == TCA_ID_MIRRED)
  30                return to_mirred(a)->tcfm_eaction == TCA_EGRESS_MIRROR;
  31#endif
  32        return false;
  33}
  34
  35static inline bool is_tcf_mirred_ingress_redirect(const struct tc_action *a)
  36{
  37#ifdef CONFIG_NET_CLS_ACT
  38        if (a->ops && a->ops->id == TCA_ID_MIRRED)
  39                return to_mirred(a)->tcfm_eaction == TCA_INGRESS_REDIR;
  40#endif
  41        return false;
  42}
  43
  44static inline bool is_tcf_mirred_ingress_mirror(const struct tc_action *a)
  45{
  46#ifdef CONFIG_NET_CLS_ACT
  47        if (a->ops && a->ops->id == TCA_ID_MIRRED)
  48                return to_mirred(a)->tcfm_eaction == TCA_INGRESS_MIRROR;
  49#endif
  50        return false;
  51}
  52
  53static inline struct net_device *tcf_mirred_dev(const struct tc_action *a)
  54{
  55        return rtnl_dereference(to_mirred(a)->tcfm_dev);
  56}
  57
  58#endif /* __NET_TC_MIR_H */
  59