EN JA
DRBR(9)
DRBR(9) FreeBSD Kernel Developer's Manual DRBR(9)

名称

drbr, drbr_free, drbr_enqueue, drbr_dequeue, drbr_dequeue_cond, drbr_flush, drbr_empty, drbr_inuse, — buf_ring へのネットワークドライバインタフェース

書式

#include < sys/param.h>
#include < net/if.h>
#include < net/if_var.h>

void
drbr_free( struct buf_ring *br, struct malloc_type *type);

int
drbr_enqueue( struct ifnet *ifp, struct buf_ring *br, struct mbuf *m);

struct mbuf *
drbr_dequeue( struct ifnet *ifp, struct buf_ring *br);

struct mbuf *
drbr_dequeue_cond( struct ifnet *ifp, struct buf_ring *br, int (*func) (struct mbuf *, void *), void *arg);

void
drbr_flush( struct ifnet *ifp, struct buf_ring *br);

int
drbr_empty( struct ifnet *ifp, struct buf_ring *br);

int
drbr_inuse( struct ifnet *ifp, struct buf_ring *br);

解説

drbr 関数は、パケットをキューに入れてキューから出すために buf_ring(9) を使用するネットワークドライブへの API を提供しています。これは、パケットをキューに入れるために IFQ インタフェースの代わりとして重要です。それによって、パケットは、不可分に単一でキューに入れることができ、パケットをキューから出すことを、ドライバの tx キューのロックによって保護されるように、あらゆる不可分なパケットごとでなく行うことができます。 INVARIANTS が有効であるなら、 drbr_dequeue() は、呼び出されるとき、tx キューのロックが保持されることをアサート (assert) します。

drbr_free() 関数は、キューに入れられたすべての mbuf を解放し、次に、buf_ring を解放します。

drbr_enqueue() 関数は、mbuf を buf_ring のキューに入れるために、 ALTQ(4) が有効にされているなら、ifnet の IFQ に戻すために使用されます。

drbr_dequeue() 関数は、buf_ring から、または ALTQ(4) が有効にされているなら、ifnet の IFQ から mbuf をキューから出すために使用されます。

drbr_dequeue_cond() 関数は、 funcTRUE または FALSE を返すかどうかに基づいて、条件付きで mbuf を buf_ring のキューから出すために使用されます。

drbr_flush() 関数は、buf_ring と ifnet の IFQ のキューに入れられた mbuf をすべて解放します。

drbr_empty() 関数は、キューに入れた mbuf がないなら、 TRUE を返し、そうでなければ、 FALSE を返します。

drbr_inuse() 関数は、キューに入れられた mbuf の数を返します。これは、 drbr_dequeue() が実際に呼び出されるとき、さらなる mbuf がないことの保証がないように、本質的に、際どいことにユーザは、注意してください。提供された tx キューのロックは、それほど少なくなく保持されます。

戻り値

drbr_enqueue() 関数は、buf_ring に利用可能なスロットがないなら、 ENOBUFS を返し、成功すれば、 0 を返します。

drbr_dequeue() と drbr_dequeue_cond() 関数は、成功すれば、mbuf を返し、buf_ring が空であるなら、 NULL を返します。

歴史

これらの関数は、 FreeBSD 8.0 で導入されました。
September 27, 2012 FreeBSD