#ifndef NTP_CONFIG_H
#define NTP_CONFIG_H
#include "ntp_machine.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 */
#ifdef HAVE_IPTOS_SUPPORT
/*
* "qos" modified keywords
*/
#define CONF_QOS_LOWDELAY 1
#define CONF_QOS_THROUGHPUT 2
#define CONF_QOS_RELIABILITY 3
#define CONF_QOS_MINCOST 4
#ifdef IPTOS_PREC_INTERNETCONTROL
#define CONF_QOS_CS0 5
#define CONF_QOS_CS1 6
#define CONF_QOS_CS2 7
#define CONF_QOS_CS3 8
#define CONF_QOS_CS4 9
#define CONF_QOS_CS5 10
#define CONF_QOS_CS6 11
#define CONF_QOS_CS7 12
#endif /* IPTOS_PREC_INTERNETCONTROL */
#endif /* HAVE_IPTOS_SUPPORT */
/*
* We keep config trees around for possible saveconfig use. When
* built with configure --disable-saveconfig, and when built with
* debugging enabled, include the free_config_*() routines. In the
* DEBUG case, they are used in an atexit() cleanup routine to make
* postmortem leak check reports more interesting.
*/
#if !defined(FREE_CFG_T) && (!defined(SAVECONFIG) || defined(DEBUG))
#define FREE_CFG_T
#endif
/* Limits */
#define MAXLINE 1024
/* Configuration sources */
#define CONF_SOURCE_FILE 0
#define CONF_SOURCE_NTPQ 1
/* Structure for storing an attribute-value pair */
struct attr_val {
int attr;
union val {
double d;
int i;
u_int u;
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;
queue *peerflags;
int minpoll;
int maxpoll;
int ttl;
int peerversion;
int peerkey;
double bias;
};
struct unpeer_node {
u_int assocID;
struct address_node * addr;
};
struct auth_node {
int control_key;
int cryptosw;
queue *crypto_cmd_list;
char *keys;
char *keysdir;
int request_key;
int revoke;
queue *trusted_key_list;
char *ntp_signd_socket;
};
struct filegen_node {
int filegen_token;
queue * options;
};
struct setvar_node {
char * var;
char * val;
int isdefault;
};
typedef struct nic_rule_node_tag {
int match_class;
char *if_name; /* interface name or numeric address */
int action;
} nic_rule_node;
struct addr_opts_node {
struct address_node *addr;
queue *options;
};
struct sim_node {
queue *init_opts;
queue *servers;
};
/* The syntax tree */
struct config_tree {
struct config_tree *link;
struct attr_val source;
time_t timestamp;
queue *peers;
queue *unpeers;
/* 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 *qos;
queue *phone;
queue *setvar;
queue *ttl;
queue *trap;
queue *vars;
queue *nic_rules;
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;
};
/* get text from T_ tokens */
const char * token_name(int token);
struct peer_node *create_peer_node(int hmode,
struct address_node *addr,
queue *options);
struct unpeer_node *create_unpeer_node(struct address_node *addr);
struct address_node *create_address_node(char *addr, int type);
void destroy_address_node(struct address_node *my_node);
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_shorts(int, ntp_u_int16_t, ntp_u_int16_t);
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(int filegen_token, 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,
int isdefault);
nic_rule_node *create_nic_rule_node(int match_class, char *if_name,
int action);
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(sockaddr_u *);
#ifdef SAVECONFIG
int dump_config_tree(struct config_tree *ptree, FILE *df, int comment);
int dump_all_config_trees(FILE *df, int comment);
#endif
#endif /* !defined(NTP_CONFIG_H) */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>