BPF_MISC+BPF_COP and BPF_COPX

Christos Zoulas christos at astron.com
Mon Aug 5 05:20:13 UTC 2013


In article <9813E50B-C557-4FE1-BADF-A2CFFCBB8BD7 at felyko.com>,
Rui Paulo  <rpaulo at felyko.com> wrote:
>On 4 Aug 2013, at 12:12, Mindaugas Rasiukevicius <rmind at netbsd.org> wrote:
>
>> 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.

Well, aside from the consideration that somehow bpf needs to understand
what memory locations the coproc function alters (so that it considers
them initialized), the bigger question is how does the code for those
functions gets loaded and unloaded, and which bpf programs have access to
those functions.

christos



More information about the freebsd-net mailing list