File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / ntp / include / recvbuff.h
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue May 29 12:08:38 2012 UTC (12 years, 5 months ago) by misho
Branches: ntp, MAIN
CVS tags: v4_2_6p5p0, v4_2_6p5, HEAD
ntp 4.2.6p5

    1: #ifndef RECVBUFF_H
    2: #define RECVBUFF_H
    3: 
    4: #ifdef HAVE_CONFIG_H
    5: # include <config.h>
    6: #endif
    7: 
    8: #include "ntp.h"
    9: #include "ntp_fp.h"
   10: #include "ntp_lists.h"
   11: 
   12: #include <isc/result.h>
   13: 
   14: /*
   15:  * recvbuf memory management
   16:  */
   17: #define RECV_INIT	10	/* 10 buffers initially */
   18: #define RECV_LOWAT	3	/* when we're down to three buffers get more */
   19: #define RECV_INC	5	/* get 5 more at a time */
   20: #define RECV_TOOMANY	40	/* this is way too many buffers */
   21: 
   22: #if defined HAVE_IO_COMPLETION_PORT
   23: # include "ntp_iocompletionport.h"
   24: #include "ntp_timer.h"
   25: 
   26: # define RECV_BLOCK_IO()	EnterCriticalSection(&RecvCritSection)
   27: # define RECV_UNBLOCK_IO()	LeaveCriticalSection(&RecvCritSection)
   28: 
   29: /*  Return the event which is set when items are added to the full list
   30:  */
   31: extern HANDLE	get_recv_buff_event (void);
   32: #else
   33: # define RECV_BLOCK_IO()	
   34: # define RECV_UNBLOCK_IO()	
   35: #endif
   36: 
   37: 
   38: /*
   39:  * Format of a recvbuf.  These are used by the asynchronous receive
   40:  * routine to store incoming packets and related information.
   41:  */
   42: 
   43: /*
   44:  *  the maximum length NTP packet contains the NTP header, one Autokey
   45:  *  request, one Autokey response and the MAC. Assuming certificates don't
   46:  *  get too big, the maximum packet length is set arbitrarily at 1000.
   47:  */   
   48: #define	RX_BUFF_SIZE	1000		/* hail Mary */
   49: 
   50: 
   51: typedef struct recvbuf recvbuf_t;
   52: 
   53: struct recvbuf {
   54: 	ISC_LINK(recvbuf_t)	link;	/* next in list */
   55: 	union {
   56: 		sockaddr_u X_recv_srcadr;
   57: 		caddr_t X_recv_srcclock;
   58: 		struct peer *X_recv_peer;
   59: 	} X_from_where;
   60: #define recv_srcadr	X_from_where.X_recv_srcadr
   61: #define	recv_srcclock	X_from_where.X_recv_srcclock
   62: #define recv_peer	X_from_where.X_recv_peer
   63: #ifndef HAVE_IO_COMPLETION_PORT
   64: 	sockaddr_u srcadr;		/* where packet came from */
   65: #else
   66: 	int recv_srcadr_len;		/* filled in on completion */
   67: #endif
   68: 	endpt *	dstadr;			/* address pkt arrived on */
   69: 	SOCKET	fd;			/* fd on which it was received */
   70: 	int msg_flags;			/* Flags received about the packet */
   71: 	l_fp recv_time;			/* time of arrival */
   72: 	void (*receiver) (struct recvbuf *); /* routine to receive buffer */
   73: 	int recv_length;		/* number of octets received */
   74: 	union {
   75: 		struct pkt X_recv_pkt;
   76: 		u_char X_recv_buffer[RX_BUFF_SIZE];
   77: 	} recv_space;
   78: #define	recv_pkt	recv_space.X_recv_pkt
   79: #define	recv_buffer	recv_space.X_recv_buffer
   80: 	int used;			/* reference count */
   81: };
   82: 
   83: extern	void	init_recvbuff	(int);
   84: 
   85: /* freerecvbuf - make a single recvbuf available for reuse
   86:  */
   87: extern	void	freerecvbuf (struct recvbuf *);
   88: 
   89: /*  Get a free buffer (typically used so an async
   90:  *  read can directly place data into the buffer
   91:  *
   92:  *  The buffer is removed from the free list. Make sure
   93:  *  you put it back with freerecvbuf() or 
   94:  */
   95: extern	struct recvbuf *get_free_recv_buffer (void); /* signal safe - no malloc */
   96: extern	struct recvbuf *get_free_recv_buffer_alloc (void); /* signal unsafe - may malloc */
   97: 
   98: /*   Add a buffer to the full list
   99:  */
  100: extern	void	add_full_recv_buffer	 (struct recvbuf *);
  101: 
  102: /*extern	void	process_recv_buffers	 (void); */
  103: 
  104: /* number of recvbufs on freelist */
  105: extern u_long free_recvbuffs (void);		
  106: extern u_long full_recvbuffs (void);		
  107: extern u_long total_recvbuffs (void);
  108: extern u_long lowater_additions (void);
  109: 		
  110: /*  Returns the next buffer in the full list.
  111:  *
  112:  */
  113: extern	struct recvbuf *get_full_recv_buffer (void);
  114: 
  115: /*
  116:  * Checks to see if there are buffers to process
  117:  */
  118: extern isc_boolean_t has_full_recv_buffer (void);
  119: 
  120: #endif	/* RECVBUFF_H */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>