Lines Matching refs:bpf
175 static int nsim_xdp_offload_prog(struct netdevsim *ns, struct netdev_bpf *bpf) in nsim_xdp_offload_prog() argument
177 if (!nsim_xdp_offload_active(ns) && !bpf->prog) in nsim_xdp_offload_prog()
179 if (!nsim_xdp_offload_active(ns) && bpf->prog && ns->bpf_offloaded) { in nsim_xdp_offload_prog()
180 NSIM_EA(bpf->extack, "TC program is already loaded"); in nsim_xdp_offload_prog()
184 return nsim_bpf_offload(ns, bpf->prog, nsim_xdp_offload_active(ns)); in nsim_xdp_offload_prog()
188 nsim_xdp_set_prog(struct netdevsim *ns, struct netdev_bpf *bpf, in nsim_xdp_set_prog() argument
193 if (!xdp_attachment_flags_ok(xdp, bpf)) in nsim_xdp_set_prog()
196 if (bpf->command == XDP_SETUP_PROG && !ns->bpf_xdpdrv_accept) { in nsim_xdp_set_prog()
197 NSIM_EA(bpf->extack, "driver XDP disabled in DebugFS"); in nsim_xdp_set_prog()
200 if (bpf->command == XDP_SETUP_PROG_HW && !ns->bpf_xdpoffload_accept) { in nsim_xdp_set_prog()
201 NSIM_EA(bpf->extack, "XDP offload disabled in DebugFS"); in nsim_xdp_set_prog()
205 if (bpf->command == XDP_SETUP_PROG_HW) { in nsim_xdp_set_prog()
206 err = nsim_xdp_offload_prog(ns, bpf); in nsim_xdp_set_prog()
211 xdp_attachment_setup(xdp, bpf); in nsim_xdp_set_prog()
289 static int nsim_setup_prog_checks(struct netdevsim *ns, struct netdev_bpf *bpf) in nsim_setup_prog_checks() argument
291 if (bpf->prog && bpf->prog->aux->offload) { in nsim_setup_prog_checks()
292 NSIM_EA(bpf->extack, "attempt to load offloaded prog to drv"); in nsim_setup_prog_checks()
296 NSIM_EA(bpf->extack, "MTU too large w/ XDP enabled"); in nsim_setup_prog_checks()
303 nsim_setup_prog_hw_checks(struct netdevsim *ns, struct netdev_bpf *bpf) in nsim_setup_prog_hw_checks() argument
307 if (!bpf->prog) in nsim_setup_prog_hw_checks()
310 if (!bpf->prog->aux->offload) { in nsim_setup_prog_hw_checks()
311 NSIM_EA(bpf->extack, "xdpoffload of non-bound program"); in nsim_setup_prog_hw_checks()
314 if (!bpf_offload_dev_match(bpf->prog, ns->netdev)) { in nsim_setup_prog_hw_checks()
315 NSIM_EA(bpf->extack, "program bound to different dev"); in nsim_setup_prog_hw_checks()
319 state = bpf->prog->aux->offload->dev_priv; in nsim_setup_prog_hw_checks()
321 NSIM_EA(bpf->extack, "offloading program in bad state"); in nsim_setup_prog_hw_checks()
544 int nsim_bpf(struct net_device *dev, struct netdev_bpf *bpf) in nsim_bpf() argument
551 switch (bpf->command) { in nsim_bpf()
553 return xdp_attachment_query(&ns->xdp, bpf); in nsim_bpf()
555 return xdp_attachment_query(&ns->xdp_hw, bpf); in nsim_bpf()
557 err = nsim_setup_prog_checks(ns, bpf); in nsim_bpf()
561 return nsim_xdp_set_prog(ns, bpf, &ns->xdp); in nsim_bpf()
563 err = nsim_setup_prog_hw_checks(ns, bpf); in nsim_bpf()
567 return nsim_xdp_set_prog(ns, bpf, &ns->xdp_hw); in nsim_bpf()
572 return nsim_bpf_map_alloc(ns, bpf->offmap); in nsim_bpf()
574 nsim_bpf_map_free(bpf->offmap); in nsim_bpf()