Annotation of embedaddon/ntp/include/ntpsim.h, revision 1.1.1.1

1.1       misho       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>