From: Toshiaki Makita <makita.toshi...@lab.ntt.co.jp>

We are going to add kern_flags field in redirect_info for kernel
internal use.
In order to avoid function call to access the flags, make redirect_info
accessible from modules. Also as it is now non-static, add prefix bpf_
to redirect_info.

Signed-off-by: Toshiaki Makita <makita.toshi...@lab.ntt.co.jp>
Signed-off-by: Toshiaki Makita <toshiaki.maki...@gmail.com>
---
 include/linux/filter.h | 10 ++++++++++
 net/core/filter.c      | 29 +++++++++++------------------
 2 files changed, 21 insertions(+), 18 deletions(-)

diff --git a/include/linux/filter.h b/include/linux/filter.h
index c73dd7396886..4717af8b95e6 100644
--- a/include/linux/filter.h
+++ b/include/linux/filter.h
@@ -537,6 +537,16 @@ struct sk_msg_buff {
        struct list_head list;
 };
 
+struct bpf_redirect_info {
+       u32 ifindex;
+       u32 flags;
+       struct bpf_map *map;
+       struct bpf_map *map_to_flush;
+       unsigned long   map_owner;
+};
+
+DECLARE_PER_CPU(struct bpf_redirect_info, bpf_redirect_info);
+
 /* Compute the linear packet data range [data, data_end) which
  * will be accessed by various program types (cls_bpf, act_bpf,
  * lwt, ...). Subsystems allowing direct data access must (!)
diff --git a/net/core/filter.c b/net/core/filter.c
index 104d560946da..acf322296535 100644
--- a/net/core/filter.c
+++ b/net/core/filter.c
@@ -2080,19 +2080,12 @@ static const struct bpf_func_proto 
bpf_clone_redirect_proto = {
        .arg3_type      = ARG_ANYTHING,
 };
 
-struct redirect_info {
-       u32 ifindex;
-       u32 flags;
-       struct bpf_map *map;
-       struct bpf_map *map_to_flush;
-       unsigned long   map_owner;
-};
-
-static DEFINE_PER_CPU(struct redirect_info, redirect_info);
+DEFINE_PER_CPU(struct bpf_redirect_info, bpf_redirect_info);
+EXPORT_SYMBOL_GPL(bpf_redirect_info);
 
 BPF_CALL_2(bpf_redirect, u32, ifindex, u64, flags)
 {
-       struct redirect_info *ri = this_cpu_ptr(&redirect_info);
+       struct bpf_redirect_info *ri = this_cpu_ptr(&bpf_redirect_info);
 
        if (unlikely(flags & ~(BPF_F_INGRESS)))
                return TC_ACT_SHOT;
@@ -2105,7 +2098,7 @@ BPF_CALL_2(bpf_redirect, u32, ifindex, u64, flags)
 
 int skb_do_redirect(struct sk_buff *skb)
 {
-       struct redirect_info *ri = this_cpu_ptr(&redirect_info);
+       struct bpf_redirect_info *ri = this_cpu_ptr(&bpf_redirect_info);
        struct net_device *dev;
 
        dev = dev_get_by_index_rcu(dev_net(skb->dev), ri->ifindex);
@@ -3198,7 +3191,7 @@ static int __bpf_tx_xdp_map(struct net_device *dev_rx, 
void *fwd,
 
 void xdp_do_flush_map(void)
 {
-       struct redirect_info *ri = this_cpu_ptr(&redirect_info);
+       struct bpf_redirect_info *ri = this_cpu_ptr(&bpf_redirect_info);
        struct bpf_map *map = ri->map_to_flush;
 
        ri->map_to_flush = NULL;
@@ -3243,7 +3236,7 @@ static inline bool xdp_map_invalid(const struct bpf_prog 
*xdp_prog,
 static int xdp_do_redirect_map(struct net_device *dev, struct xdp_buff *xdp,
                               struct bpf_prog *xdp_prog)
 {
-       struct redirect_info *ri = this_cpu_ptr(&redirect_info);
+       struct bpf_redirect_info *ri = this_cpu_ptr(&bpf_redirect_info);
        unsigned long map_owner = ri->map_owner;
        struct bpf_map *map = ri->map;
        u32 index = ri->ifindex;
@@ -3283,7 +3276,7 @@ static int xdp_do_redirect_map(struct net_device *dev, 
struct xdp_buff *xdp,
 int xdp_do_redirect(struct net_device *dev, struct xdp_buff *xdp,
                    struct bpf_prog *xdp_prog)
 {
-       struct redirect_info *ri = this_cpu_ptr(&redirect_info);
+       struct bpf_redirect_info *ri = this_cpu_ptr(&bpf_redirect_info);
        struct net_device *fwd;
        u32 index = ri->ifindex;
        int err;
@@ -3315,7 +3308,7 @@ static int xdp_do_generic_redirect_map(struct net_device 
*dev,
                                       struct xdp_buff *xdp,
                                       struct bpf_prog *xdp_prog)
 {
-       struct redirect_info *ri = this_cpu_ptr(&redirect_info);
+       struct bpf_redirect_info *ri = this_cpu_ptr(&bpf_redirect_info);
        unsigned long map_owner = ri->map_owner;
        struct bpf_map *map = ri->map;
        u32 index = ri->ifindex;
@@ -3366,7 +3359,7 @@ static int xdp_do_generic_redirect_map(struct net_device 
*dev,
 int xdp_do_generic_redirect(struct net_device *dev, struct sk_buff *skb,
                            struct xdp_buff *xdp, struct bpf_prog *xdp_prog)
 {
-       struct redirect_info *ri = this_cpu_ptr(&redirect_info);
+       struct bpf_redirect_info *ri = this_cpu_ptr(&bpf_redirect_info);
        u32 index = ri->ifindex;
        struct net_device *fwd;
        int err = 0;
@@ -3397,7 +3390,7 @@ EXPORT_SYMBOL_GPL(xdp_do_generic_redirect);
 
 BPF_CALL_2(bpf_xdp_redirect, u32, ifindex, u64, flags)
 {
-       struct redirect_info *ri = this_cpu_ptr(&redirect_info);
+       struct bpf_redirect_info *ri = this_cpu_ptr(&bpf_redirect_info);
 
        if (unlikely(flags))
                return XDP_ABORTED;
@@ -3421,7 +3414,7 @@ static const struct bpf_func_proto bpf_xdp_redirect_proto 
= {
 BPF_CALL_4(bpf_xdp_redirect_map, struct bpf_map *, map, u32, ifindex, u64, 
flags,
           unsigned long, map_owner)
 {
-       struct redirect_info *ri = this_cpu_ptr(&redirect_info);
+       struct bpf_redirect_info *ri = this_cpu_ptr(&bpf_redirect_info);
 
        if (unlikely(flags))
                return XDP_ABORTED;
-- 
2.14.3

Reply via email to