File: Prefs.h

package info (click to toggle)
ntopng 5.2.1%2Bdfsg1-2
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 121,832 kB
  • sloc: javascript: 143,431; cpp: 71,175; ansic: 11,108; sh: 4,687; makefile: 911; python: 587; sql: 512; pascal: 234; perl: 118; ruby: 52; exp: 4
file content (438 lines) | stat: -rw-r--r-- 25,718 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
/*
 *
 * (C) 2013-22 - ntop.org
 *
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software Foundation,
 * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 *
 */

#ifndef _PREFS_H_
#define _PREFS_H_

#include "ntop_includes.h"

class Ntop;
class Flow;

extern void usage();
extern void nDPIusage();

typedef struct {
  char *name, *description;
  int id;
} InterfaceInfo;

class Prefs {
 private:
  u_int8_t num_deferred_interfaces_to_register;
  pcap_direction_t captureDirection;
  char **deferred_interfaces_to_register, *cli;
  char *http_binding_address1, *http_binding_address2;
  char *https_binding_address1, *https_binding_address2;
  bool enable_client_x509_auth, reproduce_at_original_speed;
  char *lan_interface, *wan_interface, *zmq_publish_events_url;
  Ntop *ntop;
  bool enable_dns_resolution, sniff_dns_responses, pcap_file_purge_hosts_flows,
    categorization_enabled, resolve_all_host_ip, change_user, daemonize,
    enable_auto_logout, enable_auto_logout_at_runtime, use_promiscuous_mode,
    enable_ixia_timestamps, enable_vss_apcon_timestamps, enable_interface_name_only,
    enable_users_login, disable_localhost_login,
    service_license_check, enable_sql_log, enable_access_log, log_to_file,
    enable_mac_ndpi_stats, enable_activities_debug, enable_behaviour_analysis,
    enable_asn_behaviour_analysis, enable_network_behaviour_analysis, enable_iface_l7_behaviour_analysis,
    emit_flow_alerts, emit_host_alerts, use_clickhouse;
  u_int32_t behaviour_analysis_learning_period;
  u_int32_t iec60870_learning_period;
  ServiceAcceptance behaviour_analysis_learning_status_during_learning,
    behaviour_analysis_learning_status_post_learning;
  TsDriver timeseries_driver;
  u_int64_t iec104_allowed_typeids[2];  
  u_int32_t auth_session_duration;
  bool auth_session_midnight_expiration;

  u_int32_t non_local_host_max_idle, local_host_cache_duration,
	  local_host_max_idle, pkt_ifaces_flow_max_idle;
  u_int32_t active_local_hosts_cache_interval;
  u_int32_t intf_rrd_raw_days, intf_rrd_1min_days, intf_rrd_1h_days, intf_rrd_1d_days;
  u_int32_t other_rrd_raw_days, other_rrd_1min_days, other_rrd_1h_days, other_rrd_1d_days;
  u_int32_t housekeeping_frequency;
  bool disable_alerts, enable_top_talkers, enable_idle_local_hosts_cache,
    enable_active_local_hosts_cache;
  bool enable_flow_device_port_rrd_creation, enable_observation_points_rrd_creation;
  bool enable_tiny_flows_export;
  bool enable_captive_portal, enable_informative_captive_portal, mac_based_captive_portal;
  bool override_dst_with_post_nat_dst, override_src_with_post_nat_src;
  bool routing_mode_enabled, global_dns_forging_enabled;
  bool device_protocol_policies_enabled, enable_vlan_trunk_bridge;
  bool enable_arp_matrix_generation;
  bool enable_zmq_encryption;
  bool flow_table_time, flow_table_probe_order;
  bool enable_broadcast_domain_too_large;
  u_int32_t max_num_secs_before_delete_alert, alert_page_refresh_rate;
  int32_t max_entity_alerts;
  u_int32_t safe_search_dns_ip, global_primary_dns_ip, global_secondary_dns_ip;
  u_int32_t max_num_packets_per_tiny_flow, max_num_bytes_per_tiny_flow;
  u_int32_t max_extracted_pcap_bytes;
  u_int32_t max_ui_strlen;
  u_int8_t default_l7policy;
  HostMask hostMask;

  u_int32_t max_num_hosts, max_num_flows;
  u_int32_t attacker_max_num_flows_per_sec, victim_max_num_flows_per_sec;
  u_int32_t attacker_max_num_syn_per_sec, victim_max_num_syn_per_sec;
  u_int8_t ewma_alpha_percent;
  u_int http_port, https_port;
  u_int8_t num_interfaces;
  u_int16_t auto_assigned_pool_id;
  bool dump_flows_on_es, dump_flows_on_mysql, dump_flows_on_syslog, dump_flows_on_nindex,
    dump_json_flows_on_disk, load_json_flows_from_disk_to_nindex, dump_ext_json;
#ifdef NTOPNG_PRO
  bool dump_flows_direct;
  bool is_geo_map_score_enabled, is_geo_map_asname_enabled, is_geo_map_alerted_flows_enabled,
    is_geo_map_blacklisted_flows_enabled, is_geo_map_host_name_enabled, 
    is_geo_map_rxtx_data_enabled, is_geo_map_num_flows_enabled;
#endif
  bool enable_runtime_flows_dump; /**< runtime preference to enable/disable flows dump from the UI */
  InterfaceInfo *ifNames;
  char *local_networks;
  bool local_networks_set, shutdown_when_done, simulate_vlans, simulate_macs, ignore_vlans, ignore_macs;
  bool insecure_tls; /**< Unsecure TLS connections a-la curl */
  u_int32_t num_simulated_ips;
  char *data_dir, *install_dir, *docs_dir, *scripts_dir,
	  *callbacks_dir, *pcap_dir
#ifdef NTOPNG_PRO
    , *pro_callbacks_dir
#endif
    ;
  char *categorization_key;
  char *zmq_encryption_pwd;
  char *zmq_encryption_priv_key;
  char *export_endpoint, *export_zmq_encryption_key;
  char *http_prefix;
  char *instance_name;
  char *config_file_path, *ndpi_proto_path;
  char *packet_filter;
  char *user;
  bool user_set;
  char *redis_host;
  char *redis_password;
  char *pid_path;
  char *cpu_affinity, *other_cpu_affinity;
#ifdef __linux__
  cpu_set_t other_cpu_affinity_mask;
#endif
  u_int8_t redis_db_id;
  int redis_port;
  int dns_mode;
  bool json_labels_string_format;
  char *es_type, *es_index, *es_url, *es_user, *es_pwd, *es_host;
  char *mysql_host, *mysql_dbname, *mysql_user, *mysql_pw;
#ifndef WIN32
  int flows_syslog_facility;
#endif
  int mysql_port;
  char *ls_host,*ls_port,*ls_proto;
  bool has_cmdl_trace_lvl; /**< Indicate whether a verbose level 
			      has been provided on the command line.*/
#ifndef HAVE_NEDGE
  bool appliance;
#endif

#ifdef HAVE_PF_RING
  int pfring_cluster_id;
#endif

  char *test_pre_script_path;
  char *test_post_script_path;

#ifdef NTOPNG_PRO
  bool print_maintenance, print_license;
#endif
  bool print_version, print_version_json;

  inline void help()      { usage();     }
  inline void nDPIhelp()  { nDPIusage(); }
  void setCommandLineString(int optkey, const char * optarg);
  int setOption(int optkey, char *optarg);
  int checkOptions();

  void setTraceLevelFromRedis();
  void parseHTTPPort(char *arg);
  char *parseLocalNetworks(char *arg);

  static inline void set_binding_address(char ** const dest, const char * const addr) {
    if(dest && addr && addr[0] != '\0') {
      if(*dest) free(*dest);
      *dest = strdup(addr);
    }
  };
  bool getDefaultBoolPrefsValue(const char *pref_key, const bool default_value);
  void refreshBehaviourAnalysis();
  
 public:
  Prefs(Ntop *_ntop);
  virtual ~Prefs();

  bool is_pro_edition();
  bool is_enterprise_m_edition();
  bool is_enterprise_l_edition();
  bool is_nedge_edition();
  bool is_nedge_enterprise_edition();
  
  inline bool is_embedded_edition() {
#ifdef NTOPNG_EMBEDDED_EDITION
    return(true);
#else
    return(false);
#endif
  }
  time_t pro_edition_demo_ends_at();
  inline char* get_local_networks()                     { if (!local_networks_set) return NULL; return(local_networks); };
  inline void disable_dns_resolution()                  { enable_dns_resolution = false;  };
  inline void resolve_all_hosts()                       { resolve_all_host_ip = true;     };
  inline bool is_dns_resolution_enabled_for_all_hosts() { return(resolve_all_host_ip);    };
  inline bool is_dns_resolution_enabled()               { return(enable_dns_resolution);  };
  inline bool is_users_login_enabled()                  { return(enable_users_login);     };
  inline bool is_localhost_users_login_disabled()       { return(disable_localhost_login);};
  inline bool is_log_to_file_enabled()                  { return(log_to_file);            };
  inline void disable_dns_responses_decoding()          { sniff_dns_responses = false;    };  
  inline bool decode_dns_responses()                    { return(sniff_dns_responses);    };
  inline void enable_categorization()                   { categorization_enabled = true;  };
  inline bool is_categorization_enabled()               { return(categorization_enabled); };
  inline bool do_change_user()                          { return(change_user);            };
  inline void dont_change_user()                        { change_user = false;            };
  inline bool is_sql_log_enabled()                      { return(enable_sql_log);         };
  inline bool is_access_log_enabled()                   { return(enable_access_log);      };
  inline void do_enable_access_log(bool state = true)   { enable_access_log = state;      };
  inline bool are_ixia_timestamps_enabled()             { return(enable_ixia_timestamps); };
  inline bool are_vss_apcon_timestamps_enabled()        { return(enable_vss_apcon_timestamps); };
  inline char* get_user()                               { return(user);                   };
  inline void set_user(const char *u)                   { if(user) free(user); user = strdup(u); user_set = true; };
  inline bool is_user_set()                             { return user_set; };
  inline u_int32_t get_num_simulated_ips()        const { return(num_simulated_ips);      };
  inline u_int8_t get_num_user_specified_interfaces()   { return(num_interfaces);         };
  inline bool  do_dump_flows_on_es()                    { return(dump_flows_on_es);       };
  inline bool  do_dump_flows_on_mysql()                 { return(dump_flows_on_mysql);    };
  inline bool  do_dump_flows_on_syslog()                { return(dump_flows_on_syslog);   };
  inline bool  do_dump_flows_on_nindex()                { return(dump_flows_on_nindex);   };
  inline bool  do_dump_extended_json()                  { return(dump_ext_json);          };
  inline bool  do_dump_json_flows_on_disk()             { return(dump_json_flows_on_disk);};
  inline bool  do_load_json_flows_from_disk_to_nindex() { return(load_json_flows_from_disk_to_nindex); };
  inline bool  do_dump_flows() const                    { return(dump_flows_on_es || dump_flows_on_mysql || dump_flows_on_syslog || dump_flows_on_nindex); };

#ifdef NTOPNG_PRO
  inline void  toggle_dump_flows_direct(bool enable)    { dump_flows_direct = enable; };
  inline bool  do_dump_flows_direct()                   { return(dump_flows_direct); };
#endif
  inline bool is_runtime_flows_dump_enabled()     const { return(enable_runtime_flows_dump); };
  inline bool is_flows_dump_enabled()             const { return(do_dump_flows() && is_runtime_flows_dump_enabled()); };
    
  int32_t getDefaultPrefsValue(const char *pref_key, int32_t default_value);
  void getDefaultStringPrefsValue(const char *pref_key, char **buffer, const char *default_value);
  char* get_if_name(int id);
  char* get_if_descr(int id);
  inline const char* get_config_file_path()                   { return(config_file_path); };
  inline const char* get_ndpi_proto_file_path()               { return(ndpi_proto_path); };
  inline char* get_data_dir()                                 { return(data_dir);       };
  inline char* get_docs_dir()                                 { return(docs_dir);       }; // HTTP docs
  inline const char* get_scripts_dir()                        { return(scripts_dir);    };
  inline const char* get_callbacks_dir()                      { return(callbacks_dir);  };
  inline const char* get_pcap_dir()                           { return(pcap_dir);       };
#ifdef NTOPNG_PRO
  inline const char* get_pro_callbacks_dir()                  { return(pro_callbacks_dir); };
#endif
  inline const char* get_test_pre_script_path()               { return(test_pre_script_path); };
  inline const char* get_test_post_script_path()              { return(test_post_script_path); };
  inline char* get_export_endpoint()                    { return(export_endpoint);};
  inline char* get_export_zmq_encryption_key()          { return(export_zmq_encryption_key); };
  inline char* get_categorization_key()                 { return(categorization_key); };
  inline char* get_http_prefix()                        { return(http_prefix); };
  inline char* get_instance_name()                      { return(instance_name); };

  inline bool  do_auto_logout()                         { return(enable_auto_logout);               };
  inline bool  do_auto_logout_at_runtime()              { return(enable_auto_logout_at_runtime);    };
  inline bool  interface_name_only()                    { return(enable_interface_name_only);       };
  inline bool  do_ignore_vlans()                        { return(ignore_vlans);                     };
  inline bool  do_ignore_macs()                         { return(ignore_macs);                      };
  inline bool  do_simulate_vlans()                      { return(simulate_vlans);                   };
  inline bool  do_simulate_macs()                       { return(simulate_macs);                    };
  inline bool  do_insecure_tls()                        { return(insecure_tls);                     };
  inline char* get_cpu_affinity()                       { return(cpu_affinity);                     };
  inline char* get_other_cpu_affinity()                 { return(other_cpu_affinity);               };
#ifdef __linux__
  inline cpu_set_t* get_other_cpu_affinity_mask()       { return(&other_cpu_affinity_mask); };
#endif
  inline u_int get_http_port()                          { return(http_port);               };
  inline u_int get_https_port()                         { return(https_port);              };
  inline bool  is_client_x509_auth_enabled()            { return(enable_client_x509_auth); };
  inline char* get_redis_host()                         { return(redis_host);     }
  inline char* get_redis_password()                     { return(redis_password); }
  inline u_int get_redis_port()                         { return(redis_port);     };
  inline u_int get_redis_db_id()                        { return(redis_db_id);    };
  inline char* get_pid_path()                           { return(pid_path);       };
  inline char* get_packet_filter()                      { return(packet_filter);  };

  inline u_int32_t get_max_num_hosts()                  { return(max_num_hosts);          };
  inline u_int32_t get_max_num_flows()                  { return(max_num_flows);          };

  inline bool daemonize_ntopng()                        { return(daemonize);              };

  inline u_int32_t get_attacker_max_num_flows_per_sec() { return(attacker_max_num_flows_per_sec); };
  inline u_int32_t get_victim_max_num_flows_per_sec()   { return(victim_max_num_flows_per_sec);   };
  inline u_int32_t get_attacker_max_num_syn_per_sec()   { return(attacker_max_num_syn_per_sec);   };
  inline u_int32_t get_victim_max_num_syn_per_sec()     { return(victim_max_num_syn_per_sec);     };
  inline u_int8_t  get_ewma_alpha_percent()             { return(ewma_alpha_percent);             };

  void add_default_interfaces();
  int loadFromCLI(int argc, char *argv[]);
  int loadFromFile(const char *path);
  void add_network_interface(char *name, char *description);
  inline bool json_labels_as_strings()                        { return(json_labels_string_format);       };
  inline void set_json_symbolic_labels_format(bool as_string) { json_labels_string_format = as_string;   };
  void set_routing_mode(bool enabled);
  virtual void lua(lua_State* vm);
  void reloadPrefsFromRedis();
  void loadInstanceNameDefaults();
  void resetDeferredInterfacesToRegister();
  bool addDeferredInterfaceToRegister(const char *ifname);
  void registerNetworkInterfaces();
  void refreshHostsAlertsPrefs();
  void refreshDeviceProtocolsPolicyPref();
  /* Runtime database dump prefs. Allows the user to toggle flows dump from the UI at runtime. */
  void refreshDbDumpPrefs();

  void bind_http_to_address(const char * const addr1, const char * const addr2);
  void bind_https_to_address(const char * const addr1, const char * const addr2);
  void bind_http_to_loopback()  { bind_http_to_address((char*)CONST_LOOPBACK_ADDRESS, (char*)CONST_LOOPBACK_ADDRESS);  };
  inline void bind_https_to_loopback() { bind_https_to_address((char*)CONST_LOOPBACK_ADDRESS, (char*)CONST_LOOPBACK_ADDRESS); };
  inline void get_http_binding_addresses(const char** addr1, const char** addr2) { *addr1=http_binding_address1; *addr2=http_binding_address2; };
  inline void get_https_binding_addresses(const char** addr1, const char** addr2) { *addr1=https_binding_address1; *addr2=https_binding_address2; };

  inline bool checkServiceLicense()              { return(service_license_check); };
  inline void disableServiceLicense()            { service_license_check = false; };
  inline char* get_es_type()  { return(es_type);  };
  inline char* get_es_index() { return(es_index); };
  inline char* get_es_url()   { return(es_url);   };
  inline char* get_es_user()  { return(es_user);  };
  inline char* get_es_pwd()   { return(es_pwd);   };
  const inline char* get_es_host()  { return(es_host);  };
  inline bool shutdownWhenDone() { return(shutdown_when_done); }
  inline void set_promiscuous_mode(bool mode)  { use_promiscuous_mode = mode; };
  inline bool use_promiscuous()         { return(use_promiscuous_mode);  };
  inline char* get_mysql_host()         { return(mysql_host);            };
  inline int get_mysql_port()           { return(mysql_port);            };
  inline char* get_mysql_dbname()       { return(mysql_dbname);          };
  inline char* get_mysql_tablename()    { return((char*)"flows");        };
  inline char* get_mysql_user()         { return(mysql_user);            };
  inline char* get_mysql_pw()           { return(mysql_pw);              };
#ifndef WIN32
  inline int get_flows_syslog_facility() { return(flows_syslog_facility); };
#endif
  inline char* get_ls_host()            { return(ls_host);               };
  inline char* get_ls_port()		{ return(ls_port);		 };
  inline char* get_ls_proto()		{ return(ls_proto);		 };
  inline char* get_zmq_encryption_pwd() { return(zmq_encryption_pwd);    };
  inline char* get_zmq_encryption_priv_key() { return(zmq_encryption_priv_key); };
  inline bool  is_zmq_encryption_enabled() { return(enable_zmq_encryption); };
  inline char* get_command_line()       { return(cli ? cli : (char*)""); };
  inline char* get_lan_interface()      { return(lan_interface ? lan_interface : (char*)""); };
  inline char* get_wan_interface()      { return(wan_interface ? wan_interface : (char*)""); };
  inline void set_lan_interface(char *iface) { if(lan_interface) free(lan_interface); lan_interface = strdup(iface); };
  inline void set_wan_interface(char *iface) { if(wan_interface) free(wan_interface); wan_interface = strdup(iface); };
  inline bool areMacNdpiStatsEnabled()  { return(enable_mac_ndpi_stats); };
  inline pcap_direction_t getCaptureDirection() { return(captureDirection); };
  inline void setCaptureDirection(pcap_direction_t dir) { captureDirection = dir; };
#ifdef HAVE_PF_RING
  inline bool hasPF_RINGClusterID() { return pfring_cluster_id >= 0; };
  inline int getPF_RINGClusterID()  { return pfring_cluster_id;      };
#endif
  inline bool hasCmdlTraceLevel()      { return has_cmdl_trace_lvl;      };
  inline u_int32_t get_auth_session_duration()          { return(auth_session_duration);  };
  inline bool get_auth_session_midnight_expiration()    { return(auth_session_midnight_expiration);  };
  inline u_int32_t get_housekeeping_frequency()         { return(housekeeping_frequency); };
  inline u_int32_t get_host_max_idle(bool localHost) const { return(localHost ? local_host_max_idle : non_local_host_max_idle);  };
  /* Maximum idleness for hosts with alerts engaged, that is, with ongoing issues. */
  inline u_int32_t get_alerted_host_max_idle()       const { return(local_host_max_idle); /* Treat all hosts as local */         };
  inline u_int32_t get_local_host_cache_duration()      { return(local_host_cache_duration);   };
  inline u_int32_t get_pkt_ifaces_flow_max_idle()       { return(pkt_ifaces_flow_max_idle);    };
  inline bool  are_alerts_disabled()                    { return(disable_alerts);              };
  inline bool  are_top_talkers_enabled()                { return(enable_top_talkers);     };
  inline bool  flow_table_duration_or_last_seen()       { return(flow_table_time);     };
  inline bool  is_idle_local_host_cache_enabled()       { return(enable_idle_local_hosts_cache);    };
  inline bool  is_active_local_host_cache_enabled()     { return(enable_active_local_hosts_cache);  };

  inline bool is_tiny_flows_export_enabled()             { return(enable_tiny_flows_export);            };
  inline bool is_flow_device_port_rrd_creation_enabled() { return(enable_flow_device_port_rrd_creation);};
  inline bool is_observation_points_rrd_creation_enabled() { return(enable_observation_points_rrd_creation);};
  inline bool is_arp_matrix_generation_enabled()         { return(enable_arp_matrix_generation);        };

  inline bool do_override_dst_with_post_nat_dst()     const { return(override_dst_with_post_nat_dst);     };
  inline bool do_override_src_with_post_nat_src()     const { return(override_src_with_post_nat_src);     };
  inline bool are_device_protocol_policies_enabled()  const { return(device_protocol_policies_enabled);   };

  inline bool isVLANTrunkModeEnabled()                const { return(enable_vlan_trunk_bridge);           }
  inline bool isCaptivePortalEnabled()                const { return(enable_captive_portal && !enable_vlan_trunk_bridge); }
  inline bool isInformativeCaptivePortalEnabled()     const { return(enable_informative_captive_portal && !enable_vlan_trunk_bridge); }
  inline bool isMacBasedCaptivePortal()               const { return(mac_based_captive_portal);  }
  inline bool enableActivitiesDebug()                 const { return(enable_activities_debug);   }
  const char * const getCaptivePortalUrl();
  const TsDriver getTimeseriesDriver()                const { return(timeseries_driver);         }

  inline u_int8_t  getDefaultl7Policy()                  { return(default_l7policy);  }

  inline u_int32_t get_max_num_packets_per_tiny_flow()       const { return(max_num_packets_per_tiny_flow);       };
  inline u_int32_t get_max_num_bytes_per_tiny_flow()         const { return(max_num_bytes_per_tiny_flow);         };

  inline u_int64_t get_max_extracted_pcap_bytes() { return max_extracted_pcap_bytes; };

  inline u_int32_t get_safe_search_dns_ip()      { return(safe_search_dns_ip);                          };
  inline u_int32_t get_global_primary_dns_ip()   { return(global_primary_dns_ip);                       };
  inline u_int32_t get_global_secondary_dns_ip() { return(global_secondary_dns_ip);                     };
  inline bool      isGlobalDNSDefined()          { return(global_primary_dns_ip ? true : false);        };
  inline HostMask  getHostMask()                 { return(hostMask);                                    };
  inline u_int16_t get_auto_assigned_pool_id()   { return(auto_assigned_pool_id);                       };
  inline u_int16_t is_routing_mode()             { return(routing_mode_enabled);                        };
#ifndef HAVE_NEDGE
  inline bool      is_appliance()                { return(appliance);                                   };
#endif
  inline bool      isGlobalDnsForgingEnabled()   { return(global_dns_forging_enabled);                  };
  inline bool      reproduceOriginalSpeed()      { return(reproduce_at_original_speed);                 };
  inline void      doReproduceOriginalSpeed()    { reproduce_at_original_speed = true;                  };
  inline bool      purgeHostsFlowsOnPcapFiles()  { return(pcap_file_purge_hosts_flows);                 };
  inline void      enableBehaviourAnalysis()     { enable_behaviour_analysis = true;                    };
  inline bool      isBehavourAnalysisEnabled()   { return(enable_behaviour_analysis);                   };
  inline u_int32_t behaviourAnalysisLearningPeriod() { return behaviour_analysis_learning_period;       };
  
  inline bool      isBroadcastDomainTooLargeEnabled()     { return(enable_broadcast_domain_too_large);  };

  inline bool      isASNBehavourAnalysisEnabled()     { return(enable_asn_behaviour_analysis);               };
  inline bool      isNetworkBehavourAnalysisEnabled() { return(enable_network_behaviour_analysis);           };
  inline bool      isIfaceL7BehavourAnalysisEnabled() { return(enable_iface_l7_behaviour_analysis);          };

  inline ServiceAcceptance behaviourAnalysisStatusDuringLearning() { return behaviour_analysis_learning_status_during_learning; };
  inline ServiceAcceptance behaviourAnalysisStatusPostLearning()   { return behaviour_analysis_learning_status_post_learning;   };
  inline u_int64_t* getIEC104AllowedTypeIDs()    { return(iec104_allowed_typeids);                      };
  inline u_int32_t getIEC60870LearingPeriod()    { return(iec60870_learning_period);                    };
  inline bool      dontEmitFlowAlerts()          { return(!emit_flow_alerts);                           };
  inline bool      dontEmitHostAlerts()          { return(!emit_host_alerts);                           };
  inline bool      useClickHouse()               { return(use_clickhouse);                              };
  inline char*     getZMQPublishEventsURL()      { return(zmq_publish_events_url);                      };
  void setIEC104AllowedTypeIDs(const char * const protos);
  void validate();
};

#endif /* _PREFS_H_ */