File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / ntp / include / ntpsim.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: /* ntpsim.h
    2:  *
    3:  * The header file for the ntp discrete event simulator. 
    4:  *
    5:  * Written By:	Sachin Kamboj
    6:  *		University of Delaware
    7:  *		Newark, DE 19711
    8:  * Copyright (c) 2006
    9:  */
   10: 
   11: #ifndef NTPSIM_H
   12: #define NTPSIM_H
   13: 
   14: #include <stdio.h>
   15: #include <math.h>
   16: #ifdef HAVE_SYS_SOCKET_H
   17: #include <sys/socket.h>
   18: #endif
   19: #include <arpa/inet.h>
   20: #include "ntp_syslog.h"
   21: #include "ntp_fp.h"
   22: #include "ntp.h"
   23: #include "ntp_select.h"
   24: #include "ntp_malloc.h"
   25: #include "ntp_refclock.h"
   26: #include "recvbuff.h"
   27: #include "ntp_io.h"
   28: #include "ntp_stdlib.h"
   29: 
   30: #include "ntp_data_structures.h"
   31: 
   32: /* CONSTANTS */
   33: 
   34: #ifdef PI
   35: # undef PI
   36: #endif
   37: #define PI 3.1415926535         /* The world's most famous constant */
   38: #define SIM_TIME 86400		/* end simulation time */
   39: #define NET_DLY .001            /* network delay */
   40: #define PROC_DLY .001		/* processing delay */
   41: #define BEEP_DLY 3600           /* beep interval (s) */
   42: 
   43: 
   44: /* Discrete Event Queue
   45:  * --------------------
   46:  * The NTP simulator is a discrete event simulator.
   47:  *
   48:  * Central to this simulator is an event queue which is a priority queue
   49:  * in which the "priority" is given by the time of arrival of the event.
   50:  *
   51:  * A discrete set of events can happen and are stored in the queue to arrive
   52:  * at a particular time.
   53:  */
   54: 
   55: /* Possible Discrete Events */
   56: 
   57: typedef enum {
   58:     BEEP,          /* Event to record simulator stats */
   59:     CLOCK,         /* Event to advance the clock to the specified time */
   60:     TIMER,         /* Event that designates a timer interrupt. */
   61:     PACKET         /* Event that designates arrival of a packet */
   62: } funcTkn;
   63: 
   64: 
   65: /* Event information */
   66: 
   67: typedef struct {
   68:     double time;       /* Time at which event occurred */
   69:     funcTkn function;  /* Type of event that occured */
   70:     union {
   71:         struct pkt evnt_pkt;
   72:         struct recvbuf evnt_buf;
   73:     } buffer;          /* Other data associated with the event */
   74: #define ntp_pkt buffer.evnt_pkt
   75: #define rcv_buf buffer.evnt_buf
   76: } Event;
   77: 
   78: 
   79: /* Server Script Information */
   80: 
   81: typedef struct {
   82:     double duration;
   83:     double freq_offset;
   84:     double wander;
   85:     double jitter; 
   86:     double prop_delay;
   87:     double proc_delay;
   88: } script_info;   
   89: 
   90: 
   91: 
   92: /* Server Structures */
   93: 
   94: typedef struct {
   95:     double server_time;             /* Server time */
   96:     sockaddr_u *addr;  		    /* Server Address */
   97:     queue *script;                  /* Server Script */
   98:     script_info *curr_script;       /* Current Script */
   99: } server_info;
  100: 
  101: 
  102: /* Simulation control information */
  103: 
  104: typedef struct Sim_Info {
  105:     double sim_time;      /* Time in the simulation */
  106:     double end_time;      /* Time at which simulation needs to be ended */
  107:     double beep_delay;    /* Delay between simulation "beeps" at which
  108:                              simulation  stats are recorded. */
  109:     int num_of_servers;   /* Number of servers in the simulation */
  110:     server_info *servers; /* Pointer to array of servers */
  111: } sim_info;
  112: 
  113: 
  114: /* Local Clock (Client) Variables */
  115: 
  116: typedef struct Local_Clock_Info {
  117:     double local_time;     /* Client disciplined time */
  118:     double adj;            /* Remaining time correction */
  119:     double slew;           /* Correction Slew Rate */
  120:     double last_read_time; /* Last time the clock was read */
  121: } local_clock_info;
  122: 
  123: extern local_clock_info simclock;   /* Local Clock Variables */
  124: extern sim_info simulation;         /* Simulation Control Variables */
  125: 
  126: /* Function Prototypes */
  127: 
  128: int	 ntpsim			 (int argc, char *argv[]);
  129: Event    *event                  (double t, funcTkn f);
  130: void     sim_event_timer         (Event *e);
  131: int      simulate_server         (sockaddr_u *serv_addr,
  132: 				  struct interface *inter,
  133: 				  struct pkt *rpkt);
  134: void     sim_update_clocks       (Event *e);
  135: void     sim_event_recv_packet   (Event *e);
  136: void     sim_event_beep          (Event *e);
  137: void     abortsim                (char *errmsg);
  138: double	 gauss		         (double, double);
  139: double	 poisson		 (double, double);
  140: int      yyparse                 (void);
  141: void     create_server_associations (void);
  142: 
  143: #endif	/* NTPSIM_H */

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