Lines Matching refs:bpf

186 static int nsim_xdp_offload_prog(struct netdevsim *ns, struct netdev_bpf *bpf)  in nsim_xdp_offload_prog()  argument
188 if (!nsim_xdp_offload_active(ns) && !bpf->prog) in nsim_xdp_offload_prog()
190 if (!nsim_xdp_offload_active(ns) && bpf->prog && ns->bpf_offloaded) { in nsim_xdp_offload_prog()
191 NSIM_EA(bpf->extack, "TC program is already loaded"); in nsim_xdp_offload_prog()
195 return nsim_bpf_offload(ns, bpf->prog, nsim_xdp_offload_active(ns)); in nsim_xdp_offload_prog()
199 nsim_xdp_set_prog(struct netdevsim *ns, struct netdev_bpf *bpf, in nsim_xdp_set_prog() argument
204 if (!xdp_attachment_flags_ok(xdp, bpf)) in nsim_xdp_set_prog()
207 if (bpf->command == XDP_SETUP_PROG && !ns->bpf_xdpdrv_accept) { in nsim_xdp_set_prog()
208 NSIM_EA(bpf->extack, "driver XDP disabled in DebugFS"); in nsim_xdp_set_prog()
211 if (bpf->command == XDP_SETUP_PROG_HW && !ns->bpf_xdpoffload_accept) { in nsim_xdp_set_prog()
212 NSIM_EA(bpf->extack, "XDP offload disabled in DebugFS"); in nsim_xdp_set_prog()
216 if (bpf->command == XDP_SETUP_PROG_HW) { in nsim_xdp_set_prog()
217 err = nsim_xdp_offload_prog(ns, bpf); in nsim_xdp_set_prog()
222 xdp_attachment_setup(xdp, bpf); in nsim_xdp_set_prog()
272 static int nsim_setup_prog_checks(struct netdevsim *ns, struct netdev_bpf *bpf) in nsim_setup_prog_checks() argument
274 if (bpf->prog && bpf->prog->aux->offload) { in nsim_setup_prog_checks()
275 NSIM_EA(bpf->extack, "attempt to load offloaded prog to drv"); in nsim_setup_prog_checks()
279 NSIM_EA(bpf->extack, "MTU too large w/ XDP enabled"); in nsim_setup_prog_checks()
286 nsim_setup_prog_hw_checks(struct netdevsim *ns, struct netdev_bpf *bpf) in nsim_setup_prog_hw_checks() argument
290 if (!bpf->prog) in nsim_setup_prog_hw_checks()
293 if (!bpf->prog->aux->offload) { in nsim_setup_prog_hw_checks()
294 NSIM_EA(bpf->extack, "xdpoffload of non-bound program"); in nsim_setup_prog_hw_checks()
297 if (!bpf_offload_dev_match(bpf->prog, ns->netdev)) { in nsim_setup_prog_hw_checks()
298 NSIM_EA(bpf->extack, "program bound to different dev"); in nsim_setup_prog_hw_checks()
302 state = bpf->prog->aux->offload->dev_priv; in nsim_setup_prog_hw_checks()
304 NSIM_EA(bpf->extack, "offloading program in bad state"); in nsim_setup_prog_hw_checks()
527 int nsim_bpf(struct net_device *dev, struct netdev_bpf *bpf) in nsim_bpf() argument
535 switch (bpf->command) { in nsim_bpf()
540 err = nsim_bpf_create_prog(ns, bpf->verifier.prog); in nsim_bpf()
544 bpf->verifier.ops = &nsim_bpf_analyzer_ops; in nsim_bpf()
547 state = bpf->offload.prog->aux->offload->dev_priv; in nsim_bpf()
552 nsim_bpf_destroy_prog(bpf->offload.prog); in nsim_bpf()
555 return xdp_attachment_query(&ns->xdp, bpf); in nsim_bpf()
557 return xdp_attachment_query(&ns->xdp_hw, bpf); in nsim_bpf()
559 err = nsim_setup_prog_checks(ns, bpf); in nsim_bpf()
563 return nsim_xdp_set_prog(ns, bpf, &ns->xdp); in nsim_bpf()
565 err = nsim_setup_prog_hw_checks(ns, bpf); in nsim_bpf()
569 return nsim_xdp_set_prog(ns, bpf, &ns->xdp_hw); in nsim_bpf()
574 return nsim_bpf_map_alloc(ns, bpf->offmap); in nsim_bpf()
576 nsim_bpf_map_free(bpf->offmap); in nsim_bpf()