/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
- #if !defined __recvbuff_h
- #define __recvbuff_h
- #ifdef HAVE_CONFIG_H
- # include <config.h>
- #endif
- #include "ntp.h"
- #include "ntp_fp.h"
- #include "ntp_types.h"
- #include <isc/list.h>
- #include <isc/result.h>
- /*
- * recvbuf memory management
- */
- #define RECV_INIT 10 /* 10 buffers initially */
- #define RECV_LOWAT 3 /* when we're down to three buffers get more */
- #define RECV_INC 5 /* get 5 more at a time */
- #define RECV_TOOMANY 40 /* this is way too many buffers */
- #if defined HAVE_IO_COMPLETION_PORT
- # include "ntp_iocompletionport.h"
- #include "ntp_timer.h"
- # define RECV_BLOCK_IO() EnterCriticalSection(&RecvCritSection)
- # define RECV_UNBLOCK_IO() LeaveCriticalSection(&RecvCritSection)
- /* Return the event which is set when items are added to the full list
- */
- extern HANDLE get_recv_buff_event P((void));
- #else
- # define RECV_BLOCK_IO()
- # define RECV_UNBLOCK_IO()
- #endif
- /*
- * Format of a recvbuf. These are used by the asynchronous receive
- * routine to store incoming packets and related information.
- */
- /*
- * the maximum length NTP packet contains the NTP header, one Autokey
- * request, one Autokey response and the MAC. Assuming certificates don't
- * get too big, the maximum packet length is set arbitrarily at 1000.
- */
- #define RX_BUFF_SIZE 1000 /* hail Mary */
- typedef struct recvbuf recvbuf_t;
- struct recvbuf {
- ISC_LINK(recvbuf_t) link;
- union {
- struct sockaddr_storage X_recv_srcadr;
- caddr_t X_recv_srcclock;
- struct peer *X_recv_peer;
- } X_from_where;
- #define recv_srcadr X_from_where.X_recv_srcadr
- #define recv_srcclock X_from_where.X_recv_srcclock
- #define recv_peer X_from_where.X_recv_peer
- #if defined HAVE_IO_COMPLETION_PORT
- WSABUF wsabuff;
- #else
- struct sockaddr_storage srcadr; /* where packet came from */
- #endif
- int src_addr_len; /* source address length */
- struct interface *dstadr; /* interface datagram arrived thru */
- SOCKET fd; /* fd on which it was received */
- int msg_flags; /* Flags received about the packet */
- l_fp recv_time; /* time of arrival */
- void (*receiver) P((struct recvbuf *)); /* routine to receive buffer */
- int recv_length; /* number of octets received */
- union {
- struct pkt X_recv_pkt;
- u_char X_recv_buffer[RX_BUFF_SIZE];
- } recv_space;
- int used;
- #define recv_pkt recv_space.X_recv_pkt
- #define recv_buffer recv_space.X_recv_buffer
- };
- extern void init_recvbuff P((int));
- /* freerecvbuf - make a single recvbuf available for reuse
- */
- extern void freerecvbuf P((struct recvbuf *));
- /* Get a free buffer (typically used so an async
- * read can directly place data into the buffer
- *
- * The buffer is removed from the free list. Make sure
- * you put it back with freerecvbuf() or
- */
- extern struct recvbuf *get_free_recv_buffer P((void)); /* signal safe - no malloc */
- extern struct recvbuf *get_free_recv_buffer_alloc P((void)); /* signal unsafe - may malloc */
- /* Add a buffer to the full list
- */
- extern void add_full_recv_buffer P((struct recvbuf *));
- /*extern void process_recv_buffers P((void)); */
- /* number of recvbufs on freelist */
- extern u_long free_recvbuffs P((void));
- extern u_long full_recvbuffs P((void));
- extern u_long total_recvbuffs P((void));
- extern u_long lowater_additions P((void));
-
- /* Returns the next buffer in the full list.
- *
- */
- extern struct recvbuf *get_full_recv_buffer P((void));
- /*
- * Checks to see if there are buffers to process
- */
- extern isc_boolean_t has_full_recv_buffer P((void));
- #endif /* defined __recvbuff_h */