⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nbq.h

📁 unix and linux net driver
💻 H
字号:
/* * All very trivial - the simpler the better I say. We try and keep * quqes of netbufs by squirreling a pointer away below the data area. * This is done by the ppp_nb_alloc function. As long as everyone * uses the ppp shrink and grow functions we should be o.k. This code * has now been modified to keep the mark_t stuff nhere as well since * we probably shafted that good and proper in the last version. oops ! * PCF */#ifndef __NBQ_H__#define __NBQ_H__#define KERNEL 1#include <sys/types.h>#if !(NS_TARGET >= 40)#include <kernserv/prototypes.h>#endif /* NS_TARGET */#include "netbuf.h"typedef u_int mark_t;#define NETBUF_T netbuf_t#define NB_ALLOC ppp_nb_alloc#define NB_FREE nb_free#define NB_MAP nb_map#define NB_SIZE nb_size#define NB_SHRINK_TOP ppp_nb_shrink_top#define NB_GROW_TOP ppp_nb_grow_top#define NB_SHRINK_BOT nb_shrink_bot#define NB_GROW_BOT nb_grow_bot#define NB_READ nb_read#define NB_WRITE nb_write#define NB_GET_MARK nb_get_mark#define NB_SET_MARK nb_set_mark#define NB_GET_NEXT nb_get_next#define NB_SET_NEXT nb_set_next#define nb_TO_NB(nb) (nb)#define NB_TO_nb(NB) (NB)struct qparms {    u_char	q_low, q_high, q_max;    char 	*q_name;};struct nb_queue {    char	*name;    int		low, high, max, len, dropped;    NETBUF_T 	head, tail;};#define NB_EXTRA (sizeof(mark_t)+sizeof(netbuf_t))static inline voidnb_set_next(netbuf_t nb, netbuf_t ptr){if(nb) bcopy(&ptr,NB_MAP(nb)-sizeof(netbuf_t),sizeof(netbuf_t));}static inline voidnb_get_next(netbuf_t nb, netbuf_t *ptr){if(nb && ptr) bcopy(NB_MAP(nb)-sizeof(netbuf_t),ptr,sizeof(netbuf_t));}static inline voidnb_set_mark(netbuf_t nb, mark_t ptr){if(nb) bcopy(&ptr,NB_MAP(nb)-NB_EXTRA,sizeof(mark_t));}static inline voidnb_get_mark(netbuf_t nb, mark_t *ptr){if(nb && ptr) bcopy(NB_MAP(nb)-NB_EXTRA,ptr,sizeof(mark_t));}static inline voidppp_nb_shrink_top(netbuf_t nb, unsigned int size){    netbuf_t ptr;    mark_t   mark;    NB_GET_NEXT(nb,&ptr);    NB_GET_MARK(nb,&mark);    nb_shrink_top(nb,size);    NB_SET_MARK(nb,mark);    NB_SET_NEXT(nb,ptr);}static inline voidppp_nb_grow_top(netbuf_t nb, unsigned int size){    netbuf_t ptr;    mark_t   mark;    NB_GET_NEXT(nb,&ptr);    NB_GET_MARK(nb,&mark);    nb_grow_top(nb,size);    NB_SET_MARK(nb,mark);    NB_SET_NEXT(nb,ptr);}static inline netbuf_tppp_nb_alloc(unsigned int size){    netbuf_t nb;    size+=NB_EXTRA;    nb=nb_alloc(size);    if(nb) {	nb_shrink_top(nb,NB_EXTRA);	NB_SET_NEXT(nb,NULL);	NB_SET_MARK(nb,0);    }    return nb;}#endif /* __NBQ_H__ */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -