xref: /netbsd-src/external/bsd/ntp/dist/include/ntp_config.h (revision 7788a0781fe6ff2cce37368b4578a7ade0850cb1)
1 /*	$NetBSD: ntp_config.h,v 1.3 2012/02/01 07:46:21 kardel Exp $	*/
2 
3 #ifndef NTP_CONFIG_H
4 #define NTP_CONFIG_H
5 
6 #include "ntp_machine.h"
7 #include "ntp_data_structures.h"
8 #include "ntpsim.h"
9 
10 
11 /*
12  * Configuration file name
13  */
14 #ifndef CONFIG_FILE
15 # ifndef SYS_WINNT
16 #  define	CONFIG_FILE "/etc/ntp.conf"
17 # else /* SYS_WINNT */
18 #  define	CONFIG_FILE	"%windir%\\system32\\drivers\\etc\\ntp.conf"
19 #  define	ALT_CONFIG_FILE "%windir%\\ntp.conf"
20 #  define	NTP_KEYSDIR	"%windir%\\system32\\drivers\\etc"
21 # endif /* SYS_WINNT */
22 #endif /* not CONFIG_FILE */
23 
24 #ifdef HAVE_IPTOS_SUPPORT
25 /*
26  * "qos" modified keywords
27  */
28 #define	CONF_QOS_LOWDELAY		1
29 #define CONF_QOS_THROUGHPUT		2
30 #define CONF_QOS_RELIABILITY		3
31 #define CONF_QOS_MINCOST		4
32 
33 #ifdef 		IPTOS_PREC_INTERNETCONTROL
34 #define CONF_QOS_CS0			5
35 #define CONF_QOS_CS1			6
36 #define CONF_QOS_CS2			7
37 #define CONF_QOS_CS3			8
38 #define CONF_QOS_CS4			9
39 #define CONF_QOS_CS5			10
40 #define CONF_QOS_CS6			11
41 #define CONF_QOS_CS7			12
42 #endif		/* IPTOS_PREC_INTERNETCONTROL */
43 
44 #endif	/* HAVE_IPTOS_SUPPORT */
45 
46 
47 /*
48  * We keep config trees around for possible saveconfig use.  When
49  * built with configure --disable-saveconfig, and when built with
50  * debugging enabled, include the free_config_*() routines.  In the
51  * DEBUG case, they are used in an atexit() cleanup routine to make
52  * postmortem leak check reports more interesting.
53  */
54 #if !defined(FREE_CFG_T) && (!defined(SAVECONFIG) || defined(DEBUG))
55 #define FREE_CFG_T
56 #endif
57 
58 /* Limits */
59 #define MAXLINE 1024
60 
61 /* Configuration sources */
62 
63 #define CONF_SOURCE_FILE		0
64 #define CONF_SOURCE_NTPQ		1
65 
66 
67 /* Structure for storing an attribute-value pair  */
68 struct attr_val {
69     int attr;
70     union val {
71  	double	d;
72  	int	i;
73 	u_int	u;
74  	char *	s;
75 	void *	p;
76     } value;
77     int type;
78 };
79 
80 /* Structure for nodes on the syntax tree */
81 struct address_node {
82     char *address;
83     int type;
84 };
85 
86 struct restrict_node {
87     struct address_node *addr;
88     struct address_node *mask;
89     queue *flags;
90     int line_no;
91 };
92 
93 struct peer_node {
94     int host_mode;
95     struct address_node *addr;
96     queue *peerflags;
97     int minpoll;
98     int maxpoll;
99     int ttl;
100     int peerversion;
101     int peerkey;
102     double bias;
103 };
104 
105 struct unpeer_node {
106 	u_int			assocID;
107 	struct address_node *	addr;
108 };
109 
110 struct auth_node {
111     int control_key;
112     int cryptosw;
113     queue *crypto_cmd_list;
114     char *keys;
115     char *keysdir;
116     int request_key;
117     int revoke;
118     queue *trusted_key_list;
119     char *ntp_signd_socket;
120 };
121 
122 struct filegen_node {
123 	int	filegen_token;
124 	queue *	options;
125 };
126 
127 struct setvar_node {
128 	char *	var;
129 	char *	val;
130 	int	isdefault;
131 };
132 
133 typedef struct nic_rule_node_tag {
134     int match_class;
135     char *if_name;	/* interface name or numeric address */
136     int action;
137 } nic_rule_node;
138 
139 struct addr_opts_node {
140     struct address_node *addr;
141     queue *options;
142 };
143 
144 struct sim_node {
145     queue *init_opts;
146     queue *servers;
147 };
148 
149 
150 /* The syntax tree */
151 struct config_tree {
152     struct config_tree *link;
153 
154     struct attr_val source;
155     time_t timestamp;
156 
157     queue *peers;
158     queue *unpeers;
159 
160     /* Other Modes */
161     int broadcastclient;
162     queue *manycastserver;
163     queue *multicastclient;
164 
165     queue *orphan_cmds;
166 
167     /* Monitoring Configuration */
168     queue *stats_list;
169     char *stats_dir;
170     queue *filegen_opts;
171 
172     /* Access Control Configuration */
173     queue *discard_opts;
174     queue *restrict_opts;
175 
176     queue *fudge;
177     queue *tinker;
178     queue *enable_opts;
179     queue *disable_opts;
180     struct auth_node auth;
181 
182     queue *logconfig;
183     queue *qos;
184     queue *phone;
185     queue *setvar;
186     queue *ttl;
187     queue *trap;
188     queue *vars;
189     queue *nic_rules;
190 
191     struct sim_node *sim_details;
192 
193     int	mdnstries;
194 };
195 
196 
197 /* Structure for holding a remote configuration command */
198 struct REMOTE_CONFIG_INFO {
199 	char buffer[MAXLINE];
200 	char err_msg[MAXLINE];
201 	int pos;
202 	int err_pos;
203 	int no_errors;
204 };
205 
206 /* get text from T_ tokens */
207 const char * token_name(int token);
208 
209 struct peer_node *create_peer_node(int hmode,
210 				   struct address_node *addr,
211 				   queue *options);
212 struct unpeer_node *create_unpeer_node(struct address_node *addr);
213 struct address_node *create_address_node(char *addr, int type);
214 void destroy_address_node(struct address_node *my_node);
215 queue *enqueue_in_new_queue(void *my_node);
216 struct attr_val *create_attr_dval(int attr, double value);
217 struct attr_val *create_attr_ival(int attr, int value);
218 struct attr_val *create_attr_shorts(int, ntp_u_int16_t, ntp_u_int16_t);
219 struct attr_val *create_attr_sval(int attr, char *s);
220 struct attr_val *create_attr_pval(int attr, void *s);
221 struct filegen_node *create_filegen_node(int filegen_token, queue *options);
222 void **create_pval(void *val);
223 struct restrict_node *create_restrict_node(struct address_node *addr,
224 					   struct address_node *mask,
225 					   queue *flags, int line_no);
226 int *create_ival(int val);
227 struct addr_opts_node *create_addr_opts_node(struct address_node *addr,
228 					     queue *options);
229 struct sim_node *create_sim_node(queue *init_opts, queue *servers);
230 struct setvar_node *create_setvar_node(char *var, char *val,
231 				       int isdefault);
232 nic_rule_node *create_nic_rule_node(int match_class, char *if_name,
233 				    int action);
234 
235 script_info *create_sim_script_info(double duration,
236 				    queue *script_queue);
237 server_info *create_sim_server(struct address_node *addr,
238 			       double server_offset, queue *script);
239 
240 extern struct REMOTE_CONFIG_INFO remote_config;
241 void config_remotely(sockaddr_u *);
242 
243 #ifdef SAVECONFIG
244 int dump_config_tree(struct config_tree *ptree, FILE *df, int comment);
245 int dump_all_config_trees(FILE *df, int comment);
246 #endif
247 
248 
249 #endif	/* !defined(NTP_CONFIG_H) */
250