Date: Sun, 4 Aug 2013 20:12:49 +0100 From: Mindaugas Rasiukevicius <rmind@netbsd.org> To: tech-net@netbsd.org, freebsd-net@freebsd.org Cc: guy@alum.mit.edu Subject: BPF_MISC+BPF_COP and BPF_COPX Message-ID: <20130804191310.2FFBB14A152@mail.netbsd.org>
next in thread | raw e-mail | index | archive | help
Hello, I would like propose new BPF instructions for the misc category: BPF_COP and BPF_COPX. It would provide a capability of calling an external function - think of BPF "coprocessor". The argument for BPF_COP is an index to a pre-loaded array of function pointers. BPF_COPX takes the function index from the register X rather than a constant. BPF_STMT(BPF_MISC+BPF_COP, 0), /* A <- funcs[0](...) */ typedef uint32_t(*bpf_copfunc_t)(struct mbuf *pkt, uint32_t A, uint32_t *M); int bpf_set_cop(bpf_ctx_t *c, bpf_copfunc_t funcs[], size_t n); The arguments passed to a called function would be the packet, accumulator and the memory store. The return value would be stored in the accumulator and the register X would be reset to 0. Note that the function may also change the memory store. If the function index is out of range, then the register X would be set to 0xffffffff. Note that bpf_filter(9) would need to take some context structure (which is preferable in general). Comments? -- Mindaugas
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20130804191310.2FFBB14A152>