mbuf.h revision 78189
178189Sbrian/*-
278189Sbrian * Copyright (c) 1996 - 2001 Brian Somers <brian@Awfulhak.org>
378189Sbrian *          based on work by Toshiharu OHNO <tony-o@iij.ad.jp>
478189Sbrian *                           Internet Initiative Japan, Inc (IIJ)
578189Sbrian * All rights reserved.
66059Samurai *
778189Sbrian * Redistribution and use in source and binary forms, with or without
878189Sbrian * modification, are permitted provided that the following conditions
978189Sbrian * are met:
1078189Sbrian * 1. Redistributions of source code must retain the above copyright
1178189Sbrian *    notice, this list of conditions and the following disclaimer.
1278189Sbrian * 2. Redistributions in binary form must reproduce the above copyright
1378189Sbrian *    notice, this list of conditions and the following disclaimer in the
1478189Sbrian *    documentation and/or other materials provided with the distribution.
156059Samurai *
1678189Sbrian * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
1778189Sbrian * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
1878189Sbrian * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
1978189Sbrian * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
2078189Sbrian * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
2178189Sbrian * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
2278189Sbrian * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2378189Sbrian * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
2478189Sbrian * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
2578189Sbrian * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
2678189Sbrian * SUCH DAMAGE.
276059Samurai *
2850479Speter * $FreeBSD: head/usr.sbin/ppp/mbuf.h 78189 2001-06-13 21:52:19Z brian $
296059Samurai */
306059Samurai
316059Samuraistruct mbuf {
3254912Sbrian  size_t m_size;		/* size allocated (excluding header) */
3354912Sbrian  short m_offset;		/* offset from header end to start position */
3454912Sbrian  size_t m_len;			/* available byte count in buffer */
3554912Sbrian  short m_type;			/* MB_* below */
3654912Sbrian  struct mbuf *m_next;		/* link to next mbuf */
3754912Sbrian  struct mbuf *m_nextpkt;	/* link to next packet */
3838472Sbrian  /* buffer space is malloc()d directly after the header */
396059Samurai};
406059Samurai
416059Samuraistruct mqueue {
426059Samurai  struct mbuf *top;
436059Samurai  struct mbuf *last;
4454912Sbrian  size_t len;
456059Samurai};
466059Samurai
4746828Sbrian#define MBUF_CTOP(bp) \
4854912Sbrian	((bp) ? (u_char *)((bp)+1) + (bp)->m_offset : NULL)
496059Samurai
5046828Sbrian#define CONST_MBUF_CTOP(bp) \
5154912Sbrian	((bp) ? (const u_char *)((bp)+1) + (bp)->m_offset : NULL)
5246828Sbrian
5347695Sbrian#define MB_IPIN		0
5447695Sbrian#define MB_IPOUT	1
5550059Sbrian#define MB_NATIN	2
5650059Sbrian#define MB_NATOUT	3
5747695Sbrian#define MB_MPIN		4
5847695Sbrian#define MB_MPOUT	5
5947695Sbrian#define MB_VJIN		6
6047695Sbrian#define MB_VJOUT	7
6147695Sbrian#define MB_ICOMPDIN	8
6247695Sbrian#define MB_ICOMPDOUT	9
6347695Sbrian#define MB_COMPDIN	10
6447695Sbrian#define MB_COMPDOUT	11
6547695Sbrian#define MB_LQRIN	12
6647695Sbrian#define MB_LQROUT	13
6747695Sbrian#define MB_ECHOIN	14
6847695Sbrian#define MB_ECHOOUT	15
6947695Sbrian#define MB_PROTOIN	16
7047695Sbrian#define MB_PROTOOUT	17
7147695Sbrian#define MB_ACFIN	18
7247695Sbrian#define MB_ACFOUT	19
7347695Sbrian#define MB_SYNCIN	20
7447695Sbrian#define MB_SYNCOUT	21
7547695Sbrian#define MB_HDLCIN	22
7647695Sbrian#define MB_HDLCOUT	23
7747695Sbrian#define MB_ASYNCIN	24
7847695Sbrian#define MB_ASYNCOUT	25
7947695Sbrian#define MB_CBCPIN	26
8047695Sbrian#define MB_CBCPOUT	27
8147695Sbrian#define MB_CHAPIN	28
8247695Sbrian#define MB_CHAPOUT	29
8347695Sbrian#define MB_PAPIN	30
8447695Sbrian#define MB_PAPOUT	31
8547695Sbrian#define MB_CCPIN	32
8647695Sbrian#define MB_CCPOUT	33
8747695Sbrian#define MB_IPCPIN	34
8847695Sbrian#define MB_IPCPOUT	35
8947695Sbrian#define MB_LCPIN	36
9047695Sbrian#define MB_LCPOUT	37
9147695Sbrian#define MB_UNKNOWN	38
9247695Sbrian#define MB_MAX		MB_UNKNOWN
936059Samurai
9468596Sbrian#define M_MAXLEN	(4352 - sizeof(struct mbuf))	/* > HDLCSIZE */
9554913Sbrian
9636285Sbrianstruct cmdargs;
9736285Sbrian
9854912Sbrianextern int m_length(struct mbuf *);
9954912Sbrianextern struct mbuf *m_get(size_t, int);
10054912Sbrianextern struct mbuf *m_free(struct mbuf *);
10154912Sbrianextern void m_freem(struct mbuf *);
10246686Sbrianextern void mbuf_Write(struct mbuf *, const void *, size_t);
10346686Sbrianextern struct mbuf *mbuf_Read(struct mbuf *, void *, size_t);
10446686Sbrianextern size_t mbuf_View(struct mbuf *, void *, size_t);
10554912Sbrianextern struct mbuf *m_prepend(struct mbuf *, const void *, size_t, size_t);
10654912Sbrianextern struct mbuf *m_adj(struct mbuf *, ssize_t);
10754912Sbrianextern struct mbuf *m_pullup(struct mbuf *);
10854912Sbrianextern void m_settype(struct mbuf *, int);
10955353Sbrianextern struct mbuf *m_append(struct mbuf *, const void *, size_t);
11054912Sbrian
11136285Sbrianextern int mbuf_Show(struct cmdargs const *);
11254912Sbrian
11354912Sbrianextern void m_enqueue(struct mqueue *, struct mbuf *);
11454912Sbrianextern struct mbuf *m_dequeue(struct mqueue *);
115