Commit graph

11634 commits

Author SHA1 Message Date
Jon Siwek
e2e90ac477 Merge branch 'misc_cleanup' of https://github.com/MaxKellermann/zeek
- Minor code formatting change in merge

* 'misc_cleanup' of https://github.com/MaxKellermann/zeek:
  Desc: move realloc() call out of the loop
  SerializationFormat: move realloc() call out of the loop
  PacketDumper: remove unused types
2020-01-31 11:16:56 -08:00
Jon Siwek
077fdac332 Merge remote-tracking branch 'origin/topic/timw/264-alternative'
* origin/topic/timw/264-alternative:
  Add better error messaging when RegisterFd/UnregisterFd fail
  Update Supervisor code for the new IOSource API
  Show percentage of packets dropped in the final process output
  Update NEWS and docs submodule
  Remove concept of multiple timer managers
  Test changes caused by minor order-of-operation changes related to the new loop architecture
  Have terminate_processing() raise SIGTERM instead of calling the signal handler directly
  PktSrc iosource changes to match the new IOSource API
  Broker manager changes to match the new IOSource API and loop architecture
  DNS_Mgr changes to match the new IOSource API and loop architecture
  Threading changes for the new loop architecture
  Add Trigger manager for managing triggers created by things like 'when' statements
  Make TimerMgr an IOSource
  Modify IOSource Manager to implement new loop architecture
  Minor amount of code cleanup in Pcap IO source
  IOSource API changes for new loop architecture
  Type and variable usage cleanup in Net.h
  Remove #include of some iosource files from Net.h
  Only allow a single trace file (-r) or interface (-i) option on the command-line
  Remove CQ_TimerMgr in favor of PQ_TimerMgr
2020-01-31 11:04:27 -08:00
Johanna Amann
745829dbe1 Merge remote-tracking branch 'origin/master' into topic/johanna/table-changes 2020-01-31 10:07:38 -08:00
Johanna Amann
7166cb7373 Merge remote-tracking branch 'origin/master' into topic/johanna/table-on-change 2020-01-31 10:06:52 -08:00
Tim Wojtulewicz
fea0339aca Add better error messaging when RegisterFd/UnregisterFd fail 2020-01-31 10:13:10 -07:00
Tim Wojtulewicz
0cfb115c1b Update Supervisor code for the new IOSource API 2020-01-31 10:13:10 -07:00
Tim Wojtulewicz
6ddcc87c48 Show percentage of packets dropped in the final process output 2020-01-31 10:13:10 -07:00
Tim Wojtulewicz
fda8e3fd79 Update NEWS and docs submodule 2020-01-31 10:13:10 -07:00
Tim Wojtulewicz
be42608b51 Remove concept of multiple timer managers
- All timers are now handled by a single global timer manager, which simplifies how they handled by the IOSource manager.
- This change flows down a number of changes to other parts of the code. The timer manager tag field is removed, which means that matching connections to a timer manager is also removed. This removes the ability to tag a connection as internal or external, since that's how the connections where differentiated. This in turn removes the `current_conns_extern` field from the `ConnStats` record type in the script layer.
2020-01-31 10:13:09 -07:00
Tim Wojtulewicz
2dcc936787 Test changes caused by minor order-of-operation changes related to the new loop architecture 2020-01-31 10:13:09 -07:00
Tim Wojtulewicz
a2a2ff325f Have terminate_processing() raise SIGTERM instead of calling the signal handler directly 2020-01-31 10:13:09 -07:00
Tim Wojtulewicz
4751783d56 PktSrc iosource changes to match the new IOSource API 2020-01-31 10:13:09 -07:00
Tim Wojtulewicz
c5462eaa80 Broker manager changes to match the new IOSource API and loop architecture 2020-01-31 10:13:09 -07:00
Tim Wojtulewicz
c4d9566294 DNS_Mgr changes to match the new IOSource API and loop architecture 2020-01-31 10:13:09 -07:00
Tim Wojtulewicz
8b9160fb7e Threading changes for the new loop architecture
- threading::Manager is no longer an IOSource.
- threading::MsgThread is now an IOSource. This allows threads themselves to signal when they have data to process instead of continually checking each of the threads on every loop pass.
- Make the thread heartbeat timer an actual timer and let it fire as necessary instead of checking to see if it should fire
2020-01-31 10:13:09 -07:00
Tim Wojtulewicz
a159d075cf Add Trigger manager for managing triggers created by things like 'when' statements
- Adds new trigger namespace
- Adds trigger::Manager class as a new IOSource for keeping track of triggers and integrating them into the loop. Previously the loop relied on the event manager Drain() method to process all triggers on every loop, but now that the loop actively waits for events to occur, triggers would not fire when they needed to. Adding them as part of the loop ensures they're checked.
2020-01-31 10:13:09 -07:00
Tim Wojtulewicz
92bde61b78 Make TimerMgr an IOSource
- This allows the loop to check what the next timeout is and use that as the basis for the timeout of the poll
- This commit also removes the TimerMgr::Tag type, since it causes a name clash with other code in IOSource
2020-01-31 10:13:09 -07:00
Tim Wojtulewicz
4fa3e4b9b4 Modify IOSource Manager to implement new loop architecture
- Removes entire FindSoonest method that includes all of the calls to select() for checking for ready sources
- Removes FD_Set checking against IOSources
- Adds system for registering and unregistering file descriptors from IOSources. This allows individual sources to mark themselves as ready to be checked by the loop as they become available.
- Adds entirely new loop architecture based on checking the IOSources for when their next timeout is, and then waiting for either that timeout or when the next source is ready. This also implements the polling based on what the OS supports, instead of just calling select() on all platforms. Currently it supports kqueue, epoll, and plain poll.
- Adds system for pinging the loop to force it to wake up
2020-01-31 10:13:09 -07:00
Tim Wojtulewicz
062cadb124 Minor amount of code cleanup in Pcap IO source 2020-01-31 09:34:54 -07:00
Tim Wojtulewicz
a00d11e44d IOSource API changes for new loop architecture
- Removed GetFD and NextTimestamp methods
- Removed concept of idle sources
- Renamed Init to InitSource to avoid a name clash with the thread code
- Added GetNextTimeout method

This commit also removes the FD_Set file since it's no longer used
2020-01-31 09:34:54 -07:00
Tim Wojtulewicz
eee2abf729 Type and variable usage cleanup in Net.h 2020-01-31 09:34:54 -07:00
Tim Wojtulewicz
fa9a568e8f Remove #include of some iosource files from Net.h 2020-01-31 09:34:54 -07:00
Tim Wojtulewicz
f16f0360ff Only allow a single trace file (-r) or interface (-i) option on the command-line 2020-01-31 09:34:54 -07:00
Tim Wojtulewicz
2b2121be60 Remove CQ_TimerMgr in favor of PQ_TimerMgr 2020-01-31 09:34:54 -07:00
Max Kellermann
26da10ca05 util: add a tokenize_string() overload which returns string_views
Additionally, it uses a single "char" as delimiter, which is also
faster.

This patch speeds up Zeek startup by 10%.
2020-01-31 13:46:45 +01:00
Max Kellermann
763afe6f5f util: store std::string_view in "final_components" vector
Don't copy those path segments - instead, use std::string_view to
store references into the existing std::strings.  This saves a good
amount of allocation overhead.
2020-01-31 13:46:45 +01:00
Max Kellermann
37cbd98e34 util: use "auto" in normalize_path() 2020-01-31 13:46:45 +01:00
Max Kellermann
53c4e30024 util: reserve space in normalize_path()
Pessimistic reservations to ensure that it does not need to be
reallocated.
2020-01-31 13:46:45 +01:00
Max Kellermann
5c0c336c6b util: skip "." completely in normalize_path()
Don't copy "." segments to the final_components list only to remove it
afterwards.
2020-01-31 13:46:45 +01:00
Max Kellermann
0589f295fa util: pass std::string_view to normalize_path()
Reduce overhead in some callers.
2020-01-31 13:46:44 +01:00
Max Kellermann
f1566bda14 util: pass std::string_view to tokenize_string()
This saves some overhead because some callers pass a plain C string
here which needed to be copied to a temporary std::string.
2020-01-31 13:46:42 +01:00
Max Kellermann
e068ad8a53 util: don't modify the input string in tokenize_string()
This saves one full copy of the input string and avoids moving memory
around at O(n^2) in the erase() call in each loop iteration.
2020-01-31 13:42:30 +01:00
Arne Welzel
800c0c7132 parse.y: Properly set location info for functions
When defining a function, remember the location where the function header
was and restore it before calling `end_func()`. Inside `end_func()`, a
`BroFunc` object is created using the current global location information.

This came up while experimenting with zeek script profiling and wondering
why the locations set for `BroFunc` were "somewhere" in the middle of
functions instead of spanning them.
2020-01-31 10:47:20 +01:00
Max Kellermann
0b3317b1c2 util: optimize expand_escape() by avoiding sscanf()
sscanf() is notoriously slow, and the default scripts have lots of hex
escapes.  This patch reduces Zeek's startup time by 9%.

Before:

            245.04 msec task-clock:u              #    1.002 CPUs utilized
                 0      context-switches:u        #    0.000 K/sec
                 0      cpu-migrations:u          #    0.000 K/sec
            16,411      page-faults:u             #    0.067 M/sec
       629,238,575      cycles:u                  #    2.568 GHz
     1,237,236,556      instructions:u            #    1.97  insn per cycle
       262,223,957      branches:u                # 1070.142 M/sec
         3,351,083      branch-misses:u           #    1.28% of all branches

After:

            220.99 msec task-clock:u              #    1.002 CPUs utilized
                 0      context-switches:u        #    0.000 K/sec
                 0      cpu-migrations:u          #    0.000 K/sec
            16,419      page-faults:u             #    0.074 M/sec
       544,603,653      cycles:u                  #    2.464 GHz
     1,065,862,324      instructions:u            #    1.96  insn per cycle
       229,207,957      branches:u                # 1037.181 M/sec
         3,045,270      branch-misses:u           #    1.33% of all branches
2020-01-31 10:32:37 +01:00
Jon Siwek
70b45d1aba Merge remote-tracking branch 'origin/topic/robin/631-deprecation-v2'
During merge I split the test for bro_init/bro_done/bro_script_loaded
event errors into individual tests since the other testing of the zeek
versions of those events seemed fine to otherwise keep.

* origin/topic/robin/631-deprecation-v2:
  Update NEWS for naming changes.
  Small cleanup and updating submodules.
  Remove test for legacy plugin.
  Remove legancy symlinks in aux/.
  Add warnings when loading scripts ending in ".bro", or using legacy environment variables.
  Fix missing rename.
  No longer symlink local.zeek to local.bro.
  Update notice user agent.
  Remove old_comm_usage_is_ok.
  Remove bro-config.h.in and bro-path-dev.in.
  Change Bro wrapper script to now abort when old executable names are still used.
  Remove APIs that were explicitly deprecated to be removed in 3.1.
2020-01-30 19:19:56 -08:00
Johanna Amann
0e00113f0e Merge remote-tracking branch 'origin/master' into topic/johanna/table-changes 2020-01-30 15:16:25 -08:00
Max Kellermann
662c3aab58 Desc: move realloc() call out of the loop 2020-01-30 19:53:23 +01:00
Max Kellermann
61c3be8e16 SerializationFormat: move realloc() call out of the loop
Reallocate and copy the data only once.
2020-01-30 19:53:23 +01:00
Max Kellermann
ef15467757 PacketDumper: remove unused types 2020-01-30 19:53:23 +01:00
Tim Wojtulewicz
c5b2659b6b Merge remote-tracking branch 'origin/topic/jsiwek/supervisor-coverity-fixes'
* origin/topic/jsiwek/supervisor-coverity-fixes:
  Fix leaked FDs in redirecting supervised node stdout/stderr
  Add checks for failed fcntl calls
  Set Pipe file descriptor flags correctly
2020-01-30 08:44:59 -07:00
Jon Siwek
948cc32844 Fix leaked FDs in redirecting supervised node stdout/stderr 2020-01-29 16:05:39 -08:00
Jon Siwek
fd2c6c56a5 Add checks for failed fcntl calls 2020-01-29 16:04:46 -08:00
Jon Siwek
aac7f6e8f2 Set Pipe file descriptor flags correctly 2020-01-29 16:03:12 -08:00
Jon Siwek
f3e5728bcb Merge branch 'leaks' of https://github.com/MaxKellermann/zeek
* 'leaks' of https://github.com/MaxKellermann/zeek:
  Scope: fix memory leak by removing duplicate copy_string() call
  util, nb_dns: fix off-by-one bugs in strncpy() calls
  Type, util: add `constexpr` to static variables
  Net: remove unused variable
2020-01-29 11:50:09 -08:00
Max Kellermann
a458827292 Scope: fix memory leak by removing duplicate copy_string() call
The `ID` constructor also calls copy_string().
2020-01-29 20:22:16 +01:00
Max Kellermann
32bb019e3a util, nb_dns: fix off-by-one bugs in strncpy() calls
Fortunately, these bugs had no effect because the following lines
overwrote the last character with a null byte.
2020-01-29 20:22:16 +01:00
Max Kellermann
aacf84e552 Type, util: add constexpr to static variables
This allows the compiler to move them to section `.rodata`.
2020-01-29 20:22:16 +01:00
Max Kellermann
2694b4e2c8 Net: remove unused variable 2020-01-29 20:22:16 +01:00
Johanna Amann
ad18014bed Merge remote-tracking branch 'origin/topic/jsiwek/ssl-empty-files'
* origin/topic/jsiwek/ssl-empty-files:
  Skip file analysis for zero-length SSL/TLS data
2020-01-29 11:16:35 -08:00
Robin Sommer
6bcd583836 Merge remote-tracking branch 'origin/topic/jsiwek/supervisor'
* origin/topic/jsiwek/supervisor: (44 commits)
  Add note that Supervisor script APIs are unstable until 4.0
  Move command-line arg parsing functions to Options.{h,cc}
  Add btests for supervisor stem/leaf process revival
  Move supervisor control events into SupervisorControl namespace
  Fix supervisor "destroy" call on nodes not currently alive
  Move supervisor source files into supervisor/
  Address supervisor code re-factoring feedback from Robin
  Convert supervisor internals to rapidjson
  Add Supervisor documentation
  Add supervisor btests
  Improve logging of supervised node errors
  Fix supervised node inheritence of command-line script paths
  Improve normalize_path() util function
  Use a timer to check for death of supervised node's parent
  Improve supervisor checks for parent process termination
  Improve handling of premature supervisor stem exit
  Improve supervisor signal handler safety
  Remove unused supervisor config options
  Cleanup minor Supervisor TODOs
  Improve supervisor debug logging
  ...
2020-01-29 13:11:04 +00:00