diff options
Diffstat (limited to 'kernel/bpf/devmap.c')
-rw-r--r-- | kernel/bpf/devmap.c | 14 |
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 | ||
348 | int 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 | |||
348 | static void *dev_map_lookup_elem(struct bpf_map *map, void *key) | 362 | static 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); |