/* buf.h Copyright 1995 Philip Homburg */ #ifndef BUF_H #define BUF_H /* Note: BUF_S should be defined in const.h */ #define MAX_BUFREQ_PRI 10 #define ARP_PRI_REC 3 #define ARP_PRI_SEND 3 #define ETH_PRI_PORTBUFS 3 #define ETH_PRI_FDBUFS_EXTRA 5 #define ETH_PRI_FDBUFS 6 #define IP_PRI_PORTBUFS 3 #define IP_PRI_ASSBUFS 4 #define IP_PRI_FDBUFS_EXTRA 5 #define IP_PRI_FDBUFS 6 #define ICMP_PRI_QUEUE 1 #define TCP_PRI_FRAG2SEND 4 #define TCP_PRI_CONN_EXTRA 5 #define TCP_PRI_CONNwoUSER 7 #define TCP_PRI_CONN_INUSE 9 #define UDP_PRI_FDBUFS_EXTRA 5 #define UDP_PRI_FDBUFS 6 #define PSIP_PRI_EXP_PROMISC 2 struct acc; typedef void (*buffree_t) ARGS(( struct acc *acc )); typedef void (*bf_freereq_t) ARGS(( int priority )); #ifdef BUF_CONSISTENCY_CHECK typedef void (*bf_checkreq_t) ARGS(( void )); #endif typedef struct buf { int buf_linkC; buffree_t buf_free; size_t buf_size; char *buf_data_p; #ifdef BUF_TRACK_ALLOC_FREE char *buf_alloc_file; int buf_alloc_line; char *buf_free_file; int buf_free_line; #endif #ifdef BUF_CONSISTENCY_CHECK unsigned buf_generation; int buf_check_linkC; #endif } buf_t; typedef struct acc { int acc_linkC; int acc_offset, acc_length; buf_t *acc_buffer; struct acc *acc_next, *acc_ext_link; #ifdef BUF_TRACK_ALLOC_FREE char *acc_alloc_file; int acc_alloc_line; char *acc_free_file; int acc_free_line; #endif #ifdef BUF_CONSISTENCY_CHECK unsigned acc_generation; int acc_check_linkC; #endif } acc_t; extern acc_t *bf_temporary_acc; extern acc_t *bf_linkcheck_acc; /* For debugging... */ #ifdef BUF_TRACK_ALLOC_FREE #ifndef BUF_IMPLEMENTATION #define bf_memreq(a) _bf_memreq(this_file, __LINE__, a) #define bf_cut(a,b,c) _bf_cut(this_file, __LINE__, a, b, c) #define bf_delhead(a,b) _bf_delhead(this_file, __LINE__, a, b) #define bf_packIffLess(a,b) _bf_packIffLess(this_file, __LINE__, \ a, b) #define bf_afree(a) _bf_afree(this_file, __LINE__, a) #define bf_pack(a) _bf_pack(this_file, __LINE__, a) #define bf_append(a,b) _bf_append(this_file, __LINE__, a, b) #define bf_dupacc(a) _bf_dupacc(this_file, __LINE__, a) #if 0 #define bf_mark_1acc(a) _bf_mark_1acc(this_file, __LINE__, a) #define bf_mark_acc(a) _bf_mark_acc(this_file, __LINE__, a) #endif #define bf_align(a,s,al) _bf_align(this_file, __LINE__, a, s, al) #else /* BUF_IMPLEMENTATION */ #define bf_afree(a) _bf_afree(clnt_file, clnt_line, a) #define bf_pack(a) _bf_pack(clnt_file, clnt_line, a) #define bf_memreq(a) _bf_memreq(clnt_file, clnt_line, a) #define bf_dupacc(a) _bf_dupacc(clnt_file, clnt_line, a) #define bf_cut(a,b,c) _bf_cut(clnt_file, clnt_line, a, b, c) #define bf_delhead(a,b) _bf_delhead(clnt_file, clnt_line, a, b) #define bf_align(a,s,al) _bf_align(clnt_file, clnt_line, a, s, al) #endif /* !BUF_IMPLEMENTATION */ #else #define bf_mark_1acc(acc) ((void)0) #define bf_mark_acc(acc) ((void)0) #endif /* BUF_TRACK_ALLOC_FREE */ /* Prototypes */ void bf_init ARGS(( void )); #ifndef BUF_CONSISTENCY_CHECK void bf_logon ARGS(( bf_freereq_t func )); #else void bf_logon ARGS(( bf_freereq_t func, bf_checkreq_t checkfunc )); #endif #ifndef BUF_TRACK_ALLOC_FREE acc_t *bf_memreq ARGS(( unsigned size)); #else acc_t *_bf_memreq ARGS(( char *clnt_file, int clnt_line, unsigned size)); #endif /* the result is an acc with linkC == 1 */ #ifndef BUF_TRACK_ALLOC_FREE acc_t *bf_dupacc ARGS(( acc_t *acc )); #else acc_t *_bf_dupacc ARGS(( char *clnt_file, int clnt_line, acc_t *acc )); #endif /* the result is an acc with linkC == 1 identical to the given one */ #ifndef BUF_TRACK_ALLOC_FREE void bf_afree ARGS(( acc_t *acc)); #else void _bf_afree ARGS(( char *clnt_file, int clnt_line, acc_t *acc)); #endif /* this reduces the linkC off the given acc with one */ #ifndef BUF_TRACK_ALLOC_FREE acc_t *bf_pack ARGS(( acc_t *pack)); #else acc_t *_bf_pack ARGS(( char *clnt_file, int clnt_line, acc_t *pack)); #endif /* this gives a packed copy of the given acc, the linkC of the given acc is reduced by one, the linkC of the result == 1 */ #ifndef BUF_TRACK_ALLOC_FREE acc_t *bf_packIffLess ARGS(( acc_t *pack, int min_len )); #else acc_t *_bf_packIffLess ARGS(( char *clnt_file, int clnt_line, acc_t *pack, int min_len )); #endif /* this performs a bf_pack iff pack->acc_lengthacc_buffer->buf_data_p[bf_temporary_acc-> \ acc_offset])) #define bf_chkbuf(buf) ((buf)? (compare((buf)->acc_linkC,>,0), \ compare((buf)->acc_buffer, !=, 0), \ compare((buf)->acc_buffer->buf_linkC,>,0)) : (void)0) #ifdef BUF_CONSISTENCY_CHECK int bf_consistency_check ARGS(( void )); void bf_check_acc ARGS(( acc_t *acc )); void _bf_mark_1acc ARGS(( char *clnt_file, int clnt_line, acc_t *acc )); void _bf_mark_acc ARGS(( char *clnt_file, int clnt_line, acc_t *acc )); #endif #endif /* BUF_H */ /* * $PchId: buf.h,v 1.13 2003/09/10 08:52:09 philip Exp $ */