aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/bpf/devmap.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/bpf/devmap.c')
-rw-r--r--kernel/bpf/devmap.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/kernel/bpf/devmap.c b/kernel/bpf/devmap.c
index a7cc7b3494a9..642c97f6d1b8 100644
--- a/kernel/bpf/devmap.c
+++ b/kernel/bpf/devmap.c
@@ -345,6 +345,20 @@ int dev_map_enqueue(struct bpf_dtab_netdev *dst, struct xdp_buff *xdp,
345 return bq_enqueue(dst, xdpf, dev_rx); 345 return bq_enqueue(dst, xdpf, dev_rx);
346} 346}
347 347
348int dev_map_generic_redirect(struct bpf_dtab_netdev *dst, struct sk_buff *skb,
349 struct bpf_prog *xdp_prog)
350{
351 int err;
352
353 err = __xdp_generic_ok_fwd_dev(skb, dst->dev);
354 if (unlikely(err))
355 return err;
356 skb->dev = dst->dev;
357 generic_xdp_tx(skb, xdp_prog);
358
359 return 0;
360}
361
348static void *dev_map_lookup_elem(struct bpf_map *map, void *key) 362static void *dev_map_lookup_elem(struct bpf_map *map, void *key)
349{ 363{
350 struct bpf_dtab_netdev *obj = __dev_map_lookup_elem(map, *(u32 *)key); 364 struct bpf_dtab_netdev *obj = __dev_map_lookup_elem(map, *(u32 *)key);