tech-net archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: BPF_MISC+BPF_COP and BPF_COPX



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



Home | Main Index | Thread Index | Old Index