#ifndef _SYS_MCHAIN_H_
#define _SYS_MCHAIN_H_
#ifdef _KERNEL
#define MB_MSYSTEM 0
#define MB_MUSER 1
#define MB_MINLINE 2
#define MB_MZERO 3
#define MB_MCUSTOM 4
struct mbuf;
struct mbchain;
typedef int mb_copy_t(struct mbchain *mbp, c_caddr_t src, caddr_t dst,
size_t *srclen, size_t *dstlen);
struct mbchain {
struct mbuf * mb_top;
struct mbuf * mb_cur;
int mb_mleft;
int mb_count;
mb_copy_t * mb_copy;
void * mb_udata;
};
struct mdchain {
struct mbuf * md_top;
struct mbuf * md_cur;
u_char * md_pos;
};
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_padbyte(struct mbchain *mbp);
int mb_put_uint8(struct mbchain *mbp, u_int8_t x);
int mb_put_uint16be(struct mbchain *mbp, u_int16_t x);
int mb_put_uint16le(struct mbchain *mbp, u_int16_t x);
int mb_put_uint32be(struct mbchain *mbp, u_int32_t x);
int mb_put_uint32le(struct mbchain *mbp, u_int32_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);
int md_init(struct mdchain *mdp);
void md_initm(struct mdchain *mbp, struct mbuf *m);
void md_done(struct mdchain *mdp);
void md_append_record(struct mdchain *mdp, struct mbuf *top);
int md_next_record(struct mdchain *mdp);
int md_get_uint8(struct mdchain *mdp, u_int8_t *x);
int md_get_uint16(struct mdchain *mdp, u_int16_t *x);
int md_get_uint16le(struct mdchain *mdp, u_int16_t *x);
int md_get_uint16be(struct mdchain *mdp, u_int16_t *x);
int md_get_uint32(struct mdchain *mdp, u_int32_t *x);
int md_get_uint32be(struct mdchain *mdp, u_int32_t *x);
int md_get_uint32le(struct mdchain *mdp, u_int32_t *x);
int md_get_int64(struct mdchain *mdp, int64_t *x);
int md_get_int64be(struct mdchain *mdp, int64_t *x);
int md_get_int64le(struct mdchain *mdp, int64_t *x);
int md_get_mem(struct mdchain *mdp, caddr_t target, int size, int type);
int md_get_mbuf(struct mdchain *mdp, int size, struct mbuf **m);
int md_get_uio(struct mdchain *mdp, struct uio *uiop, int size);
#endif
#endif