#ifndef NTPSIM_H
#define NTPSIM_H
#include <stdio.h>
#include <math.h>
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#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"
#include "ntp_data_structures.h"
#ifdef PI
# undef PI
#endif
#define PI 3.1415926535
#define SIM_TIME 86400
#define NET_DLY .001
#define PROC_DLY .001
#define BEEP_DLY 3600
#define SLEW 500e-6
typedef enum {
BEEP,
CLOCK,
TIMER,
PACKET
} funcTkn;
typedef struct {
double time;
funcTkn function;
union {
struct pkt evnt_pkt;
struct recvbuf evnt_buf;
} buffer;
#define ntp_pkt buffer.evnt_pkt
#define rcv_buf buffer.evnt_buf
} Event;
typedef struct {
double duration;
double freq_offset;
double wander;
double jitter;
double prop_delay;
double proc_delay;
} script_info;
typedef struct {
double server_time;
sockaddr_u *addr;
queue *script;
script_info *curr_script;
} server_info;
typedef struct Sim_Info {
double sim_time;
double end_time;
double beep_delay;
int num_of_servers;
server_info *servers;
} sim_info;
typedef struct Local_Clock_Info {
double local_time;
double adj;
double slew;
double last_read_time;
} local_clock_info;
extern local_clock_info simclock;
extern sim_info simulation;
int ntpsim (int argc, char *argv[]);
Event *event (double t, funcTkn f);
void sim_event_timer (Event *e);
int simulate_server (sockaddr_u *serv_addr,
struct interface *inter,
struct pkt *rpkt);
void sim_update_clocks (Event *e);
void sim_event_recv_packet (Event *e);
void sim_event_beep (Event *e);
void abortsim (char *errmsg);
double gauss (double, double);
double poisson (double, double);
int yyparse (void);
void create_server_associations (void);
#endif