Lines Matching refs:bpf
16 #include <linux/bpf.h>
180 static int nsim_xdp_offload_prog(struct netdevsim *ns, struct netdev_bpf *bpf)
182 if (!nsim_xdp_offload_active(ns) && !bpf->prog)
184 if (!nsim_xdp_offload_active(ns) && bpf->prog && ns->bpf_offloaded) {
185 NSIM_EA(bpf->extack, "TC program is already loaded");
189 return nsim_bpf_offload(ns, bpf->prog, nsim_xdp_offload_active(ns));
193 nsim_xdp_set_prog(struct netdevsim *ns, struct netdev_bpf *bpf,
198 if (bpf->command == XDP_SETUP_PROG && !ns->bpf_xdpdrv_accept) {
199 NSIM_EA(bpf->extack, "driver XDP disabled in DebugFS");
202 if (bpf->command == XDP_SETUP_PROG_HW && !ns->bpf_xdpoffload_accept) {
203 NSIM_EA(bpf->extack, "XDP offload disabled in DebugFS");
207 if (bpf->command == XDP_SETUP_PROG_HW) {
208 err = nsim_xdp_offload_prog(ns, bpf);
213 xdp_attachment_setup(xdp, bpf);
293 static int nsim_setup_prog_checks(struct netdevsim *ns, struct netdev_bpf *bpf)
295 if (bpf->prog && bpf->prog->aux->offload) {
296 NSIM_EA(bpf->extack, "attempt to load offloaded prog to drv");
300 NSIM_EA(bpf->extack, "MTU too large w/ XDP enabled");
307 nsim_setup_prog_hw_checks(struct netdevsim *ns, struct netdev_bpf *bpf)
311 if (!bpf->prog)
314 if (!bpf->prog->aux->offload) {
315 NSIM_EA(bpf->extack, "xdpoffload of non-bound program");
318 if (!bpf_offload_dev_match(bpf->prog, ns->netdev)) {
319 NSIM_EA(bpf->extack, "program bound to different dev");
323 state = bpf->prog->aux->offload->dev_priv;
325 NSIM_EA(bpf->extack, "offloading program in bad state");
551 int nsim_bpf(struct net_device *dev, struct netdev_bpf *bpf)
558 switch (bpf->command) {
560 err = nsim_setup_prog_checks(ns, bpf);
564 return nsim_xdp_set_prog(ns, bpf, &ns->xdp);
566 err = nsim_setup_prog_hw_checks(ns, bpf);
570 return nsim_xdp_set_prog(ns, bpf, &ns->xdp_hw);
575 return nsim_bpf_map_alloc(ns, bpf->offmap);
577 nsim_bpf_map_free(bpf->offmap);