linux/include/linux/netfilter_bridge.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2#ifndef __LINUX_BRIDGE_NETFILTER_H
   3#define __LINUX_BRIDGE_NETFILTER_H
   4
   5#include <uapi/linux/netfilter_bridge.h>
   6#include <linux/skbuff.h>
   7
   8struct nf_bridge_frag_data {
   9        char    mac[ETH_HLEN];
  10        bool    vlan_present;
  11        u16     vlan_tci;
  12        __be16  vlan_proto;
  13};
  14
  15#if IS_ENABLED(CONFIG_BRIDGE_NETFILTER)
  16
  17int br_handle_frame_finish(struct net *net, struct sock *sk, struct sk_buff *skb);
  18
  19static inline void br_drop_fake_rtable(struct sk_buff *skb)
  20{
  21        struct dst_entry *dst = skb_dst(skb);
  22
  23        if (dst && (dst->flags & DST_FAKE_RTABLE))
  24                skb_dst_drop(skb);
  25}
  26
  27static inline struct nf_bridge_info *
  28nf_bridge_info_get(const struct sk_buff *skb)
  29{
  30        return skb_ext_find(skb, SKB_EXT_BRIDGE_NF);
  31}
  32
  33static inline bool nf_bridge_info_exists(const struct sk_buff *skb)
  34{
  35        return skb_ext_exist(skb, SKB_EXT_BRIDGE_NF);
  36}
  37
  38static inline int nf_bridge_get_physinif(const struct sk_buff *skb)
  39{
  40        const struct nf_bridge_info *nf_bridge = nf_bridge_info_get(skb);
  41
  42        if (!nf_bridge)
  43                return 0;
  44
  45        return nf_bridge->physindev ? nf_bridge->physindev->ifindex : 0;
  46}
  47
  48static inline int nf_bridge_get_physoutif(const struct sk_buff *skb)
  49{
  50        const struct nf_bridge_info *nf_bridge = nf_bridge_info_get(skb);
  51
  52        if (!nf_bridge)
  53                return 0;
  54
  55        return nf_bridge->physoutdev ? nf_bridge->physoutdev->ifindex : 0;
  56}
  57
  58static inline struct net_device *
  59nf_bridge_get_physindev(const struct sk_buff *skb)
  60{
  61        const struct nf_bridge_info *nf_bridge = nf_bridge_info_get(skb);
  62
  63        return nf_bridge ? nf_bridge->physindev : NULL;
  64}
  65
  66static inline struct net_device *
  67nf_bridge_get_physoutdev(const struct sk_buff *skb)
  68{
  69        const struct nf_bridge_info *nf_bridge = nf_bridge_info_get(skb);
  70
  71        return nf_bridge ? nf_bridge->physoutdev : NULL;
  72}
  73
  74static inline bool nf_bridge_in_prerouting(const struct sk_buff *skb)
  75{
  76        const struct nf_bridge_info *nf_bridge = nf_bridge_info_get(skb);
  77
  78        return nf_bridge && nf_bridge->in_prerouting;
  79}
  80#else
  81#define br_drop_fake_rtable(skb)                do { } while (0)
  82static inline bool nf_bridge_in_prerouting(const struct sk_buff *skb)
  83{
  84        return false;
  85}
  86#endif /* CONFIG_BRIDGE_NETFILTER */
  87
  88#endif
  89