MBCHAIN(9) | FreeBSD Kernel Developer's Manual | MBCHAIN(9) |
名称
mbchain, mb_init, mb_initm, mb_done, mb_detach, mb_fixhdr, mb_reserve, mb_put_uint8, mb_put_uint16be, mb_put_uint16le, mb_put_uint32be, mb_put_uint32le, mb_put_int64be, mb_put_int64le, mb_put_mem, mb_put_mbuf, mb_put_uio — 様々なデータタイプから mbuf チェーンを構築する関数の集合書式
options LIBMCHAINkldload libmchain
#include < sys/param.h>
#include < sys/uio.h>
#include < sys/mchain.h>
int
mb_init( struct mbchain *mbp);
void
mb_initm( struct mbchain *mbp, struct mbuf *m);
void
mb_done( struct mbchain *mbp);
struct mbuf *
mb_detach( struct mbchain *mbp);
int
mb_fixhdr( struct mbchain *mbp);
caddr_t
mb_reserve( struct mbchain *mbp, int size);
int
mb_put_uint8( struct mbchain *mbp, uint8_t x);
int
mb_put_uint16be( struct mbchain *mbp, uint16_t x);
int
mb_put_uint16le( struct mbchain *mbp, uint16_t x);
int
mb_put_uint32be( struct mbchain *mbp, uint32_t x);
int
mb_put_uint32le( struct mbchain *mbp, uint32_t x);
int
mb_put_int64be( struct mbchain *mbp, int64_t x);
int
mb_put_int64le( struct mbchain *mbp, int64_t x);
int
mb_put_mem( struct mbchain *mbp, c_caddr_t source, int size, int type);
int
mb_put_mbuf( struct mbchain *mbp, struct mbuf *m);
int
mb_put_uio( struct mbchain *mbp, struct uio *uiop, int size);
解説
これらの関数は、様々なデータタイプから mbuf チェーンを構成するために使用されます。 mbchain 構造体は、作業用コンテキストとして使用されて、 mb_init() または mb_initm() のいずれかへの呼び出しで初期化されるべきです。それには、次のフィールドがあります:- mb_top
- ( struct mbuf *) 構築された mbuf チェーンの先端へのポインタ
- mb_cur
- ( struct mbuf *) 現在満たされた mbuf へのポインタ
- mb_mleft
- ( int) 現在の mbuf に残っているバイト数
- mb_count
- ( int) mbuf チェーンに位置付けられたバイト数の合計
- mb_copy
- ( mb_copy_t *) mbuf にコピーを実行するユーザ定義関数;なにか通常でないデータ変換が必要であるなら、役に立ちます
- mb_udata
- ( void *) mb_copy 関数で使用することができるユーザによって提供されたデータ
mb_done() 関数は、 mbp->mb_top フィールドによって指された mbuf チェーンを処理して、そのフィールドを NULL に設定します。
mb_detach() 関数は、 mbp->mb_top フィールドの値を返して、その値を NULL に設定します。
mb_fixhdr() は mbuf チェーンの長さを計算し直して、チェーンでの最初の mbuf の m_pkthdr.len フィールドを更新します。それは計算された長さを返します。
mb_reserve() は size 引数によって指定された長さのオブジェクトが現在の mbuf (必要なら、mbuf の割り付けを実行して) に適合できるようにして、まるで本当のデータが置かれるかのようにすべてのポインタを進めます。返された値は予約された空間の始まりを指します。オブジェクトのサイズが MLEN バイトを超えてはいけないことに注意してください。
すべての mb_put_*() 関数は mbuf チェーンにデータの実際のコピーを実行します。 le または be 接尾辞がある関数はリトルエンディアン (little-endian) かビッグエンディアン (big-endian) のデータ形式への変換を実行します。
mb_put_mem() 関数は、mbuf チェーンへの source 引数によって指定された size バイトのデータをコピーします。 type 引数は、コピーを実行するために使用される方法を指定して、次の 1 つを指定できます:
- MB_MSYSTEM
- bcopy() 関数を使用します。
- MB_MUSER
- copyin(9) 関数を使用します。
- MB_MINLINE
- どんな関数も呼び出さない“inline”ループを使用します。
- MB_MZERO
- 0 バイトで宛先をただ満たすことを除いて、なにもデータをコピーしません。
- MB_MCUSTOM
- mbp->mb_copy フィールドによって指定された関数を呼び出します。
戻り値
mb_fixhdr() を除いて、成功するなら、すべての int 関数は 0 を返し、そうでなければ、エラーコードを返します。注: どんな関数の失敗の後も、mbuf チェーンは壊れた状態のまま残されます、そして、 mb_done() 関数のみ、それを破壊するために安全に呼び出すことができます。
使用例
struct mbchain *mbp; struct mbuf *m; mb_init(mbp); mb_put_uint8(mbp, 33); mb_put_uint16le(mbp, length); m = m_copym(mbp->mb_top, 0, M_COPYALL, M_WAIT); send(m); mb_done(mbp);
作者
このマニュアルページは <bp@FreeBSD.org>によって書かれました。February 20, 2001 | FreeBSD |