#ifndef __NTP_CONFIG_H__
#define __NTP_CONFIG_H__
#include "ntp_data_structures.h"
#include "ntpsim.h"
/*
* Configuration file name
*/
#ifndef CONFIG_FILE
# ifndef SYS_WINNT
# define CONFIG_FILE "/etc/ntp.conf"
# else /* SYS_WINNT */
# define CONFIG_FILE "%windir%\\system32\\drivers\\etc\\ntp.conf"
# define ALT_CONFIG_FILE "%windir%\\ntp.conf"
# define NTP_KEYSDIR "%windir%\\system32\\drivers\\etc"
# endif /* SYS_WINNT */
#endif /* not CONFIG_FILE */
/* Limits */
#define MAXLINE 1024
/* Structure for storing an attribute-value pair */
struct attr_val {
int attr;
union val{
double d;
int i;
char *s;
void *p;
} value;
int type;
};
/* Structure for nodes on the syntax tree */
struct address_node {
char *address;
int type;
};
struct restrict_node {
struct address_node *addr;
struct address_node *mask;
queue *flags;
int line_no;
};
struct peer_node {
int host_mode;
struct address_node *addr;
int minpoll;
int maxpoll;
int ttl;
int peerversion;
int peerkey;
int peerflags;
};
struct auth_node {
int autokey;
int control_key;
queue *crypto_cmd_list;
char *keys;
char *keysdir;
int requested_key;
int revoke;
queue *trusted_key_list;
};
struct filegen_node {
char *name;
queue *options;
};
struct setvar_node {
char *data;
u_long len;
u_short def;
};
struct addr_opts_node {
struct address_node *addr;
queue *options;
};
struct sim_node {
queue *init_opts;
queue *servers;
};
enum broadcastclienttype {
SIMPLE = 1,
NOVOLLEY
};
/* The syntax tree */
struct config_tree {
queue *peers;
/* Other Modes */
int broadcastclient;
queue *manycastserver;
queue *multicastclient;
queue *orphan_cmds;
/* Monitoring Configuration */
queue *stats_list;
char *stats_dir;
queue *filegen_opts;
/* Access Control Configuration */
queue *discard_opts;
queue *restrict_opts;
queue *fudge;
queue *tinker;
queue *enable_opts;
queue *disable_opts;
struct auth_node auth;
queue *logconfig;
queue *phone;
queue *setvar;
queue *ttl;
queue *trap;
queue *vars;
struct sim_node *sim_details;
};
/* Structure for holding a remote configuration command */
struct REMOTE_CONFIG_INFO {
char buffer[MAXLINE];
char err_msg[MAXLINE];
int pos;
int err_pos;
int no_errors;
};
struct peer_node *create_peer_node(int hmode, struct address_node *addr, queue *options);
struct address_node *create_address_node(char *addr, int type);
queue *enqueue_in_new_queue(void *my_node);
struct attr_val *create_attr_dval(int attr, double value);
struct attr_val *create_attr_ival(int attr, int value);
struct attr_val *create_attr_sval(int attr, char *s);
struct attr_val *create_attr_pval(int attr, void *s);
struct filegen_node *create_filegen_node(void **name, queue *options);
void **create_pval(void *val);
struct restrict_node *create_restrict_node(struct address_node *addr,struct address_node *mask,queue *flags, int line_no);
int *create_ival(int val);
struct addr_opts_node *create_addr_opts_node(struct address_node *addr, queue *options);
struct sim_node *create_sim_node(queue *init_opts, queue *servers);
struct setvar_node *create_setvar_node(char *var, char *val, u_short def);
script_info *create_sim_script_info(double duration, queue *script_queue);
server_info *create_sim_server(struct address_node *addr, double server_offset, queue *script);
extern struct REMOTE_CONFIG_INFO remote_config;
void config_remotely(void);
#endif
syntax highlighted by Code2HTML, v. 0.9.1