Mercurial > routeflapper
view src/routeconfig.h @ 8:69a5dcf953df default tip
routeflapper runs as root to read the log files
author | Carl Byington <carl@five-ten-sg.com> |
---|---|
date | Thu, 04 Sep 2014 08:57:50 -0700 |
parents | 180d26aa2a17 |
children |
line wrap: on
line source
/* Copyright (c) 2007 Carl Byington - 510 Software Group, released under the GPL version 3 or any later version at your choice available at http://www.gnu.org/licenses/gpl-3.0.txt */ class ROUTECONFIG; class CONFIG; enum pattern_style {style_reset, style_path, style_announce, style_withdraw, style_ip}; enum suspicion {suspicious_none, suspicious_origin, suspicious_adjacency}; class PATTERN { pattern_style style; const char * pattern; // owned by the string table regex_t re; int index1; // zero based substring of the regex match that contains the as list or prefix value int index2; // zero based substring of the regex match that contains the prefix length public: ~PATTERN(); PATTERN(TOKEN &tok, pattern_style style_, const char *pattern_, int index1_, int index2_); bool process(char *buf, CONFIG &con, const char *file_name, int pattern_index); void dump(int level, int index, const char *token); void dump(int level); }; typedef ROUTECONFIG * ROUTECONFIGP; typedef PATTERN * PATTERNP; typedef list<ROUTECONFIGP> routeconfig_list; typedef list<PATTERNP> pattern_list; const int buflen = 1024; class ROUTECONFIG { TOKEN * tokp; const char * file_name; // name of the syslog file pattern_list patterns; // owns the patterns int fd; struct stat openfdstat; int len; // bytes in the buffer char buf[buflen]; public: ROUTECONFIG(TOKEN &tok, const char *file_name_); ~ROUTECONFIG(); bool failed() { return (fd == -1); }; void open(bool msg); bool read(CONFIG &con); void close(); void add_pattern(PATTERNP pat); void process(CONFIG &con); void dump(int level); }; class CONFIG { public: // the only mutable stuff once it has been loaded from the config file int reference_count; // protected by the global config_mutex // all the rest is constant after loading from the config file int generation; time_t load_time; string_set config_files; routeconfig_list routeconfigs; // owns all the route configs CONFIG(); ~CONFIG(); void add_routeconfig(ROUTECONFIGP con) {routeconfigs.push_back(con);}; void dump(); void read(); }; void discard(string_set &s); const char* register_string(string_set &s, const char *name); const char* register_string(const char *name); void clear_strings(); void clear_rib(); int ip_address(const char *have); bool load_conf(CONFIG &dc, const char *fn); void routing_hourly_update(); void token_init(); extern const char *token_announce_aslist_index; extern const char *token_announce_pattern; extern const char *token_announce_prelen_index; extern const char *token_announce_preval_index; extern const char *token_file; extern const char *token_include; extern const char *token_lbrace; extern const char *token_rbrace; extern const char *token_semi; extern const char *token_slash; extern const char *token_withdraw_aslist_index; extern const char *token_withdraw_pattern; extern const char *token_withdraw_prelen_index; extern const char *token_withdraw_preval_index;