#ifndef __ntpsim_h
#define __ntpsim_h
#include <stdio.h>
#include <math.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include "ntp_syslog.h"
#include "ntp_fp.h"
#include "ntp.h"
#include "ntp_select.h"
#include "ntp_malloc.h"
#include "ntp_refclock.h"
#include "recvbuff.h"
#include "ntp_io.h"
#include "ntp_stdlib.h"
#define PI 3.1415926535
typedef enum {
BEEP, CLOCK, TIMER, PACKET
} funcTkn;
typedef struct {
double time;
union {
struct pkt evnt_pkt;
struct recvbuf evnt_buf;
} buffer;
#define ntp_pkt buffer.evnt_pkt
#define rcv_buf buffer.evnt_buf
funcTkn function;
} Event;
typedef struct List {
Event event;
struct List *next;
} *Queue;
typedef struct nde {
double time;
double sim_time;
double ntp_time;
double adj;
double slew;
double clk_time;
double ferr;
double fnse;
double ndly;
double snse;
double pdly;
double bdly;
double last_time;
Queue events;
struct recvbuf *rbuflist;
} Node;
int ntpsim P((int argc, char *argv[]));
Event event P((double, funcTkn));
Queue queue P((Event, Queue ));
Node node P((void));
void push P((Event, Queue *));
Event pop P((Queue *));
void ndbeep P((Node *, Event));
void ndeclk P((Node *, Event));
void ntptmr P((Node *, Event));
void netpkt P((Node *, Event));
int srvr_rply P((Node *, struct sockaddr_storage *,
struct interface *, struct pkt *));
double gauss P((double, double));
double poisson P((double, double));
int node_clock P((Node *, double));
void abortsim P((char *));
Node ntp_node;
#endif