PageRenderTime 10ms CodeModel.GetById 1ms app.highlight 7ms RepoModel.GetById 1ms app.codeStats 0ms

/contrib/ntp/include/recvbuff.h

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