mirror of
https://github.com/rsyslog/rsyslog.git
synced 2025-12-19 01:00:41 +01:00
Merge branch 'v6-devel'
This commit is contained in:
commit
93cbf964ea
155
doc/imfile.html
155
doc/imfile.html
@ -36,48 +36,17 @@ file names in the future.</p>
|
||||
<p>Multiple files may be monitored by specifying
|
||||
$InputRunFileMonitor multiple times.
|
||||
</p>
|
||||
|
||||
<p><b>Configuration Directives</b>:</p>
|
||||
<p><b>Module Directives</b></p>
|
||||
<ul>
|
||||
<li><strong>$InputFileName /path/to/file</strong><br>
|
||||
The file being monitored. So far, this must be an absolute name (no
|
||||
macros or templates)</li>
|
||||
<li><span style="font-weight: bold;">$InputFileTag
|
||||
tag:</span><br>
|
||||
The tag to be used for messages that originate from this file. If you
|
||||
would like to see the colon after the tag, you need to specify it here
|
||||
(as shown above).</li>
|
||||
<li><span style="font-weight: bold;">$InputFileStateFile
|
||||
<name-of-state-file></span><br>
|
||||
Rsyslog must keep track of which parts of the to be monitored file it
|
||||
already processed. This is done in the state file. This file always is
|
||||
created in the rsyslog working directory (configurable via
|
||||
$WorkDirectory). Be careful to use unique names for different files
|
||||
being monitored. If there are duplicates, all sorts of "interesting"
|
||||
things may happen. Rsyslog currently does not check if a name is
|
||||
specified multiple times.</li>
|
||||
<li><span style="font-weight: bold;">$InputFileFacility
|
||||
facility</span><br>
|
||||
The syslog facility to be assigned to lines read. Can be specified in
|
||||
textual form (e.g. "local0", "local1", ...) or as numbers (e.g. 128 for
|
||||
"local0"). Textual form is suggested. <span style="font-weight: bold;">Default</span> is
|
||||
"local0".<span style="font-weight: bold;"></span></li>
|
||||
<li><span style="font-weight: bold;">$InputFileSeverity</span><br>
|
||||
The
|
||||
syslog severity to be assigned to lines read. Can be specified in
|
||||
textual form (e.g. "info", "warning", ...) or as numbers (e.g. 4 for
|
||||
"info"). Textual form is suggested. <span style="font-weight: bold;">Default</span>
|
||||
is "notice".</li>
|
||||
<li><span style="font-weight: bold;">$InputRunFileMonitor</span><br>
|
||||
This <span style="font-weight: bold;">activates</span>
|
||||
the current monitor. It has no parameters. If you forget this
|
||||
directive, no file monitoring will take place.</li>
|
||||
<li><span style="font-weight: bold;">$InputFilePollInterval
|
||||
<li><span style="font-weight: bold;">PollingInterval
|
||||
seconds</span><br>
|
||||
This is a global setting. It specifies how often files are to be polled
|
||||
for new data. The time specified is in seconds. The <span style="font-weight: bold;">default value</span> is 10
|
||||
seconds. Please note that future
|
||||
releases of imfile may support per-file polling intervals, but
|
||||
currently this is not the case. If multiple $InputFilePollInterval
|
||||
currently this is not the case. If multiple PollingInterval
|
||||
statements are present in rsyslog.conf, only the last one is used.<br>
|
||||
A short poll interval provides more rapid message forwarding, but
|
||||
requires more system ressources. While it is possible, we stongly
|
||||
@ -88,7 +57,40 @@ level may be needed. Even if you need quick response, 1 seconds should
|
||||
be well enough. Please note that imfile keeps reading files as long as
|
||||
there is any data in them. So a "polling sleep" will only happen when
|
||||
nothing is left to be processed.</li>
|
||||
<li><b>$InputFilePersistStateInterval</b> [lines]</b><br>
|
||||
</ul>
|
||||
|
||||
<p><b>Action Directives</b></p>
|
||||
<ul>
|
||||
<li><strong>File /path/to/file</strong><br>
|
||||
The file being monitored. So far, this must be an absolute name (no
|
||||
macros or templates)</li>
|
||||
<li><span style="font-weight: bold;">Tag
|
||||
tag:</span><br>
|
||||
The tag to be used for messages that originate from this file. If you
|
||||
would like to see the colon after the tag, you need to specify it here
|
||||
(as shown above).</li>
|
||||
<li><span style="font-weight: bold;">StateFile
|
||||
<name-of-state-file></span><br>
|
||||
Rsyslog must keep track of which parts of the to be monitored file it
|
||||
already processed. This is done in the state file. This file always is
|
||||
created in the rsyslog working directory (configurable via
|
||||
$WorkDirectory). Be careful to use unique names for different files
|
||||
being monitored. If there are duplicates, all sorts of "interesting"
|
||||
things may happen. Rsyslog currently does not check if a name is
|
||||
specified multiple times.</li>
|
||||
<li><span style="font-weight: bold;">Facility
|
||||
facility</span><br>
|
||||
The syslog facility to be assigned to lines read. Can be specified in
|
||||
textual form (e.g. "local0", "local1", ...) or as numbers (e.g. 128 for
|
||||
"local0"). Textual form is suggested. <span style="font-weight: bold;">Default</span> is
|
||||
"local0".<span style="font-weight: bold;"></span></li>
|
||||
<li><span style="font-weight: bold;">Severity</span><br>
|
||||
The
|
||||
syslog severity to be assigned to lines read. Can be specified in
|
||||
textual form (e.g. "info", "warning", ...) or as numbers (e.g. 4 for
|
||||
"info"). Textual form is suggested. <span style="font-weight: bold;">Default</span>
|
||||
is "notice".</li>
|
||||
<li><b>PersistStateInterval</b> [lines]</b><br>
|
||||
Available in 4.7.3+, 5.6.2+<br>
|
||||
Specifies how often the state file shall be written when processing the input
|
||||
file. The default value is 0, which means a new state file is only written when
|
||||
@ -98,9 +100,9 @@ been processed. This setting can be used to guard against message duplication du
|
||||
to fatal errors (like power fail). Note that this setting affects imfile
|
||||
performance, especially when set to a low value. Frequently writing the state
|
||||
file is very time consuming.
|
||||
<li><b>$InputFileReadMode</b> [mode]</b><br>
|
||||
<li><b>ReadMode</b> [mode]</b><br>
|
||||
Available in 5.7.5+
|
||||
<li><b>$InputFileMaxLinesAtOnce</b> [number]</b><br>
|
||||
<li><b>MaxLinesAtOnce</b> [number]</b><br>
|
||||
Available in 5.9.0+
|
||||
<br>
|
||||
This is useful if multiple files need to be monitored. If set to 0, each file
|
||||
@ -109,8 +111,16 @@ will be fully processed and then processing switches to the next file
|
||||
[number] lines is processed in sequence for each file, and then the file is
|
||||
switched. This provides a kind of mutiplexing the load of multiple files and
|
||||
probably leads to a more natural distribution of events when multiple busy files
|
||||
are monitored. The default is 10240.
|
||||
<li>$InputFileBindRuleset <ruleset><br>
|
||||
are monitored. The default is 1024.
|
||||
<li><b>MaxSubmitAtOnce</b> [number]</b><br>
|
||||
Available in 5.9.0+
|
||||
<br>
|
||||
This is an expert option. It can be used to set the maximum input batch size that
|
||||
imfile can generate. The default is 1024, which is suitable for a wide range of
|
||||
applications. Be sure to understand rsyslog message batch processing before you
|
||||
modify this option. If you do not know what this doc here talks about, this is a
|
||||
good indication that you should NOT modify the default.
|
||||
<li><b>Ruleset</b> <ruleset><br>
|
||||
Available in 5.7.5+, 6.1.5+
|
||||
Binds the listener to a specific <a href="multi_ruleset.html">ruleset</a>.</li>
|
||||
</ul>
|
||||
@ -132,6 +142,71 @@ your distro puts rsyslog's config files). Note that only commands
|
||||
actually needed need to be specified. The second file uses less
|
||||
commands and uses defaults instead.<br>
|
||||
</p>
|
||||
<textarea rows="15" cols="60">module(load="folder/to/rsyslog/plugins/imfile/.libs/imfile" PollingInterval="10") #needs to be done just once
|
||||
# File 1
|
||||
input(type="imfile" File="/path/to/file1"
|
||||
Tag="tag1"
|
||||
StateFile="/var/spool/rsyslog/statefile1"
|
||||
Severity="error"
|
||||
Facility="local7")
|
||||
# File 2
|
||||
input(type="imfile" File="/path/to/file2"
|
||||
Tag="tag2"
|
||||
StateFile="/var/spool/rsyslog/statefile2")
|
||||
# ... and so on ...
|
||||
#
|
||||
</textarea>
|
||||
|
||||
|
||||
<p><b>Legacy Configuration Directives</b>:</p>
|
||||
<ul>
|
||||
<li><strong>$InputFileName /path/to/file</strong><br>
|
||||
equivalent to: File </li>
|
||||
<li><span style="font-weight: bold;">$InputFileTag
|
||||
tag:</span><br>
|
||||
equivalent to: Tag </li>
|
||||
<li><span style="font-weight: bold;">$InputFileStateFile
|
||||
<name-of-state-file></span><br>
|
||||
equivalent to: StateFile </li>
|
||||
<li><span style="font-weight: bold;">$InputFileFacility
|
||||
facility</span><br>
|
||||
equivalent to: Facility </span></li>
|
||||
<li><span style="font-weight: bold;">$InputFileSeverity</span><br>
|
||||
equivalent to: Severity</li>
|
||||
<li><span style="font-weight: bold;">$InputRunFileMonitor</span><br>
|
||||
This <span style="font-weight: bold;">activates</span>
|
||||
the current monitor. It has no parameters. If you forget this
|
||||
directive, no file monitoring will take place.</li>
|
||||
<li><span style="font-weight: bold;">$InputFilePollInterval
|
||||
seconds</span><br>
|
||||
equivalent to: PollingInterva</li>
|
||||
<li><b>$InputFilePersistStateInterval</b> [lines]</b><br>
|
||||
equivalent to: PersistStateInterval
|
||||
<li><b>$InputFileReadMode</b> [mode]</b><br>
|
||||
equivalent to: ReadMode
|
||||
<li><b>$InputFileMaxLinesAtOnce</b> [number]</b><br>
|
||||
equivalent to: MaxLinesAtOnce
|
||||
<li>$InputFileBindRuleset <ruleset><br>
|
||||
equivalent to: Ruleset </li>
|
||||
</ul>
|
||||
<b>Caveats/Known Bugs:</b>
|
||||
<p>So far, only 100 files can be monitored. If more are needed,
|
||||
the source needs to be patched. See define MAX_INPUT_FILES in imfile.c</p><p>Powertop
|
||||
users may want to notice that imfile utilizes polling. Thus, it is no
|
||||
good citizen when it comes to conserving system power consumption. We
|
||||
are currently evaluating to move to inotify(). However, there are a
|
||||
number of subtle issues, which needs to be worked out first. We will
|
||||
make the change as soon as we can. If you can afford it, we recommend
|
||||
using a long polling interval in the mean time.
|
||||
</p>
|
||||
<p><b>Sample:</b></p>
|
||||
<p>The following sample monitors two files. If you need just one,
|
||||
remove the second one. If you need more, add them according to the
|
||||
sample ;). This code must be placed in /etc/rsyslog.conf (or wherever
|
||||
your distro puts rsyslog's config files). Note that only commands
|
||||
actually needed need to be specified. The second file uses less
|
||||
commands and uses defaults instead.<br>
|
||||
</p>
|
||||
<textarea rows="15" cols="60">$ModLoad imfile #
|
||||
needs to be done just once
|
||||
# File 1
|
||||
|
||||
@ -19,11 +19,12 @@ Encryption can be provided by using <a href="rsyslog_stunnel.html">stunnel</a>.
|
||||
<p>Multiple receivers may be configured by
|
||||
specifying $InputPTCPServerRun multiple times.
|
||||
</p>
|
||||
|
||||
<p><b>Configuration Directives</b>:</p>
|
||||
<p>This plugin has config directives similar named as imtcp, but they all have <b>P</b>TCP in
|
||||
their name instead of just TCP. Note that only a subset of the parameters are supported.
|
||||
<ul>
|
||||
<li>$InputPTCPServerAddtlFrameDelimiter <Delimiter><br>
|
||||
<li><b>AddTLFrameDelimiter</b> <Delimiter><br>
|
||||
This directive permits to specify an additional frame delimiter for plain tcp syslog.
|
||||
The industry-standard specifies using the LF character as frame delimiter. Some vendors,
|
||||
notable Juniper in their NetScreen products, use an invalid frame delimiter, in Juniper's
|
||||
@ -43,48 +44,91 @@ very limited interest in fixing this issue. This directive <b>can not</b> fix th
|
||||
That would require much more code changes, which I was unable to do so far. Full details
|
||||
can be found at the <a href="http://www.rsyslog.com/Article321.phtml">Cisco tcp syslog anomaly</a>
|
||||
page.
|
||||
<li><b>$InputPTCPSupportOctetCountedFraming</b> <<b>on</b>|off><br>
|
||||
<li><b>SupportOctetCountedFraming</b> <<b>on</b>|off><br>
|
||||
If set to "on", the legacy octed-counted framing (similar to RFC5425 framing) is
|
||||
activated. This is the default and should be left unchanged until you know
|
||||
very well what you do. It may be useful to turn it off, if you know this framing
|
||||
is not used and some senders emit multi-line messages into the message stream.
|
||||
</li>
|
||||
<li>$InputPTCPServerNotifyOnConnectionClose [on/<b>off</b>]<br>
|
||||
<li><b>ServerNotifyOnConnectionClose</b> [on/<b>off</b>]<br>
|
||||
instructs imptcp to emit a message if the remote peer closes a connection.<br>
|
||||
<li><b>$InputPTCPServerKeepAlive</b> <on/<b>off</b>><br>
|
||||
<li><b>KeepAlive</b> <on/<b>off</b>><br>
|
||||
enable of disable keep-alive packets at the tcp socket layer. The default is
|
||||
to disable them.</li>
|
||||
<li><b>$InputPTCPServerKeepAlive_probes</b> <number><br>
|
||||
<li><b>KeepAlive.Probes</b> <number><br>
|
||||
The number of unacknowledged probes to send before considering the connection dead and notifying the application layer.
|
||||
The default, 0, means that the operating system defaults are used. This has only
|
||||
effect if keep-alive is enabled. The functionality may not be available on
|
||||
all platforms.
|
||||
<li><b>$InputPTCPServerKeepAlive_intvl</b> <number><br>
|
||||
<li><b>KeepAlive.Interval</b> <number><br>
|
||||
The interval between subsequential keepalive probes, regardless of what the connection has exchanged in the meantime.
|
||||
The default, 0, means that the operating system defaults are used. This has only
|
||||
effect if keep-alive is enabled. The functionality may not be available on
|
||||
all platforms.
|
||||
<li><b>$InputPTCPServerKeepAlive_time</b> <number><br>
|
||||
<li><b>KeepAlive.Time</b> <number><br>
|
||||
The interval between the last data packet sent (simple ACKs are not considered data) and the first keepalive probe; after the connection is marked to need keepalive, this counter is not used any further.
|
||||
The default, 0, means that the operating system defaults are used. This has only
|
||||
effect if keep-alive is enabled. The functionality may not be available on
|
||||
all platforms.
|
||||
<li><b>$InputPTCPServerRun</b> <port><br>
|
||||
Starts a TCP server on selected port</li>
|
||||
<li>$InputPTCPServerInputName <name><br>
|
||||
<li><b>Port</b> <number><br>
|
||||
Select a port to listen on</li>
|
||||
<li><b>Name</b> <name><br>
|
||||
Sets a name for the inputname property. If no name is set "imptcp" is used by default. Setting a
|
||||
name is not strictly necessary, but can be useful to apply filtering based on which input
|
||||
the message was received from.
|
||||
<li>$InputPTCPServerBindRuleset <name><br>
|
||||
<li><b>Ruleset</b> <name><br>
|
||||
Binds specified ruleset to next server defined.
|
||||
<!--<li>$InputPTCPHelperThreads <number><br>
|
||||
Number of helper worker threads to process incoming messages. These
|
||||
threads are utilized to pull data off the network. On a busy system, additional
|
||||
helper threads (but not more than there are CPUs/Cores) can help improving
|
||||
performance. The default value is two.-->
|
||||
<li><b>Address</b> <name><br>
|
||||
On multi-homed machines, specifies to which local address the listerner should be bound.
|
||||
</ul>
|
||||
<b>Caveats/Known Bugs:</b>
|
||||
<ul>
|
||||
<li>module always binds to all interfaces</li>
|
||||
</ul>
|
||||
<p><b>Sample:</b></p>
|
||||
<p>This sets up a TCP server on port 514:<br>
|
||||
</p>
|
||||
<textarea rows="15" cols="60">module(load="/folder/to/rsyslog/plugins/imptcp/.libs/imptcp") # needs to be done just once
|
||||
input(type="imptcp" port="514")
|
||||
</textarea>
|
||||
|
||||
<p><b>Legacy Configuration Directives</b>:</p>
|
||||
<p>This plugin has config directives similar named as imtcp, but they all have <b>P</b>TCP in
|
||||
their name instead of just TCP. Note that only a subset of the parameters are supported.
|
||||
<ul>
|
||||
<li>$InputPTCPServerAddtlFrameDelimiter <Delimiter><br>
|
||||
Equivalent to: AddTLFrameDelimiter</li>
|
||||
<li><b>$InputPTCPSupportOctetCountedFraming</b> <<b>on</b>|off><br>
|
||||
Equivalent to: SupportOctetCountedFraming
|
||||
</li>
|
||||
<li>$InputPTCPServerNotifyOnConnectionClose [on/<b>off</b>]<br>
|
||||
Equivalent to: ServerNotifyOnConnectionClose.<br></li>
|
||||
<li><b>$InputPTCPServerKeepAlive</b> <on/<b>off</b>><br>
|
||||
Equivalent to: KeepAlive </li>
|
||||
<li><b>$InputPTCPServerKeepAlive_probes</b> <number><br>
|
||||
Equivalent to: KeepAlive.Probes</li>
|
||||
<li><b>$InputPTCPServerKeepAlive_intvl</b> <number><br>
|
||||
Equivalent to: KeepAlive.Interval </li>
|
||||
<li><b>$InputPTCPServerKeepAlive_time</b> <number><br>
|
||||
Equivalent to: KeepAlive.Time</li>
|
||||
<li><b>$InputPTCPServerRun</b> <port><br>
|
||||
Equivalent to: Port </li>
|
||||
<li>$InputPTCPServerInputName <name><br>
|
||||
Equivalent to: Name </li>
|
||||
<li>$InputPTCPServerBindRuleset <name><br>
|
||||
Equivalent to: Ruleset </li>
|
||||
<li>$InputPTCPHelperThreads <number><br>
|
||||
Number of helper worker threads to process incoming messages. These
|
||||
threads are utilized to pull data off the network. On a busy system, additional
|
||||
helper threads (but not more than there are CPUs/Cores) can help improving
|
||||
performance. The default value is two.
|
||||
<li>$InputPTCPServerListenIP <name><br>
|
||||
On multi-homed machines, specifies to which local address the next listerner should
|
||||
be bound.
|
||||
Equivalent to: Address </li>
|
||||
</ul>
|
||||
<b>Caveats/Known Bugs:</b>
|
||||
<ul>
|
||||
|
||||
@ -27,11 +27,12 @@ scenarios also exists with plain tcp syslog. RELP, even with the small
|
||||
nits outlined above, is a much more reliable solution than plain tcp
|
||||
syslog and so it is highly suggested to use RELP instead of plain tcp.
|
||||
Clients send messages to the RELP server via omrelp.</p>
|
||||
|
||||
<p><b>Configuration Directives</b>:</p>
|
||||
<ul>
|
||||
<li>InputRELPServerBindRuleset <name> (available in 6.3.6+)</br>
|
||||
<li><b>Ruleset</b> <name> (available in 6.3.6+)</br>
|
||||
Binds the specified ruleset to all RELP listeners.
|
||||
<li>InputRELPServerRun <port><br>
|
||||
<li><b>Port</b> <port><br>
|
||||
Starts a RELP server on selected port</li>
|
||||
</ul>
|
||||
<b>Caveats/Known Bugs:</b>
|
||||
@ -46,6 +47,29 @@ not specific ones. This is due to a currently existing limitation in librelp.
|
||||
<p><b>Sample:</b></p>
|
||||
<p>This sets up a RELP server on port 20514.<br>
|
||||
</p>
|
||||
<textarea rows="15" cols="60">module(load="/folder/to/rsyslog/plugins/imrelp/.libs/imrelp") # needs to be done just once
|
||||
input(type="imrelp" port="20514")
|
||||
</textarea>
|
||||
|
||||
<p><b>Legacy Configuration Directives</b>:</p>
|
||||
<ul>
|
||||
<li>InputRELPServerBindRuleset <name> (available in 6.3.6+)</br>
|
||||
equivalent to: RuleSet
|
||||
<li>InputRELPServerRun <port><br>
|
||||
equivalent to: Port</li>
|
||||
</ul>
|
||||
<b>Caveats/Known Bugs:</b>
|
||||
<ul>
|
||||
<li>see description</li>
|
||||
<li>To obtain the remote system's IP address, you need to have at least
|
||||
librelp 1.0.0 installed. Versions below it return the hostname instead
|
||||
of the IP address.</li>
|
||||
<li>Contrary to other inputs, the ruleset can only be bound to all listeners,
|
||||
not specific ones. This is due to a currently existing limitation in librelp.
|
||||
</ul>
|
||||
<p><b>Sample:</b></p>
|
||||
<p>This sets up a RELP server on port 20514.<br>
|
||||
</p>
|
||||
<textarea rows="15" cols="60">$ModLoad imrelp # needs to be done just once
|
||||
$InputRELPServerRun 20514
|
||||
</textarea>
|
||||
|
||||
@ -15,16 +15,13 @@
|
||||
<p><b>Description</b>:</p>
|
||||
<p>Provides the ability to receive syslog messages via UDP.
|
||||
<p>Multiple receivers may be configured by specifying
|
||||
$UDPServerRun multiple times.
|
||||
multiple input actions.
|
||||
</p>
|
||||
|
||||
<p><b>Configuration Directives</b>:</p>
|
||||
<p><b>Global Directives</b>:</p>
|
||||
<ul>
|
||||
<li>$UDPServerAddress <IP><br>
|
||||
local IP address (or name) the UDP listens should bind to</li>
|
||||
<li>$UDPServerRun <port><br>
|
||||
former -r<port> option, default 514, start UDP server on this
|
||||
port, "*" means all addresses</li>
|
||||
<li>$UDPServerTimeRequery <nbr-of-times><br>
|
||||
<li><b>TimeRequery</b> <nbr-of-times><br>
|
||||
this is a performance
|
||||
optimization. Getting the system time is very costly. With this setting, imudp can
|
||||
be instructed to obtain the precise time only once every n-times. This logic is
|
||||
@ -33,15 +30,51 @@ time calls should usually be acceptable. The default value is two, because we ha
|
||||
seen that even without optimization the kernel often returns twice the identical time.
|
||||
You can set this value as high as you like, but do so at your own risk. The higher
|
||||
the value, the less precise the timestamp.
|
||||
<li>$InputUDPServerBindRuleset <ruleset><br>
|
||||
Binds the listener to a specific <a href="multi_ruleset.html">ruleset</a>.</li>
|
||||
<li>$IMUDPSchedulingPolicy <rr/fifo/other><br>
|
||||
<li><b>SchedulingPolicy</b> <rr/fifo/other><br>
|
||||
Can be used the set the scheduler priority, if the necessary functionality
|
||||
is provided by the platform. Most useful to select "fifo" for real-time
|
||||
processing under Linux (and thus reduce chance of packet loss). Available since 4.7.4+, 5.7.3+, 6.1.3+.
|
||||
<li>$IMUDPSchedulingPriority <number><br>
|
||||
<li><b>SchedulingPriority</b> <number><br>
|
||||
Scheduling priority to use. Available since 4.7.4+, 5.7.3+, 6.1.3+.
|
||||
</ul>
|
||||
<p><b>Action Directives</b>:</p>
|
||||
<ul>
|
||||
<li><b>Address</b> <IP><br>
|
||||
local IP address (or name) the UDP listens should bind to</li>
|
||||
<li><b>Port</b> <port><br>
|
||||
default 514, start UDP server on this port</li>
|
||||
<li><b>Ruleset</b> <ruleset><br>
|
||||
Binds the listener to a specific <a href="multi_ruleset.html">ruleset</a>.</li>
|
||||
</ul>
|
||||
<b>Caveats/Known Bugs:</b>
|
||||
<ul>
|
||||
<li>currently none known</li>
|
||||
</ul>
|
||||
<p><b>Sample:</b></p>
|
||||
<p>This sets up an UPD server on port 514:<br>
|
||||
</p>
|
||||
<textarea rows="15" cols="60">module(load="/folder/to/rsyslog/plugins/imudp/.libs/imudp") # needs to be done just once
|
||||
input(type="imudp" port="514")
|
||||
</textarea>
|
||||
|
||||
<p><b>Legacy Configuration Directives</b>:</p>
|
||||
<p>Multiple receivers may be configured by specifying
|
||||
$UDPServerRun multiple times.
|
||||
</p>
|
||||
<ul>
|
||||
<li>$UDPServerAddress <IP><br>
|
||||
equivalent to: Address </li>
|
||||
<li>$UDPServerRun <port><br>
|
||||
equivalent to: Port </li>
|
||||
<li>$UDPServerTimeRequery <nbr-of-times><br>
|
||||
equivalent to: TimeRequery
|
||||
<li>$InputUDPServerBindRuleset <ruleset><br>
|
||||
equivalent to: Ruleset </li>
|
||||
<li>$IMUDPSchedulingPolicy <rr/fifo/other><br>
|
||||
equivalent to: SchedulingPolicy
|
||||
<li>$IMUDPSchedulingPriority <number><br>
|
||||
equivalent to: SchedulingPriority
|
||||
</ul>
|
||||
<b>Caveats/Known Bugs:</b>
|
||||
<ul>
|
||||
<li>currently none known</li>
|
||||
|
||||
@ -24,11 +24,11 @@ information). This seems to be consistent with what sysklogd did for
|
||||
the past four years. Alternate behaviour may be desirable if
|
||||
gateway-like processes send messages via the local log slot - in this
|
||||
case, it can be enabled via the
|
||||
$InputUnixListenSocketIgnoreMsgTimestamp and $SystemLogSocketIgnoreMsgTimestamp config directives</p>
|
||||
IgnoreTimestamp and SysSock.IgnoreTimestamp config directives</p>
|
||||
<p><b>There is input rate limiting available,</b> (since 5.7.1) to guard you against
|
||||
the problems of a wild running logging process.
|
||||
If more than $SystemLogRateLimitInterval * $SystemLogRateLimitBurst log messages are emitted
|
||||
from the same process, those messages with $SystemLogRateLimitSeverity or lower will be
|
||||
If more than SysSock.RateLimit.Interval * SysSock.RateLimit.Burst log messages are emitted
|
||||
from the same process, those messages with SysSock.RateLimit.Severity or lower will be
|
||||
dropped. It is not possible to recover anything about these messages, but imuxsock will
|
||||
tell you how many it has dropped one the interval has expired AND the next message
|
||||
is logged. Rate-limiting depends on SCM_CREDENTIALS. If the platform does not support
|
||||
@ -36,7 +36,7 @@ this socket option, rate limiting is turned off. If multiple sockets are configu
|
||||
rate limiting works independently on each of them (that should be what you usually expect).
|
||||
The same functionality is available for additional log sockets, in which case the
|
||||
config statements just use
|
||||
the prefix $IMUXSockRateLimit... but otherwise works exactly the same.
|
||||
the prefix RateLimit... but otherwise works exactly the same.
|
||||
When working with severities, please keep in mind that higher severity numbers mean lower
|
||||
severity and configure things accordingly.
|
||||
To turn off rate limiting, set the interval to zero.
|
||||
@ -46,8 +46,8 @@ the queues (which may cause exessive disk-io where it actually would not be need
|
||||
flow-controlling a log socket (and especially the system log socket) can lead to a very
|
||||
unresponsive system. As such, flow control is disabled by default. That means any log records
|
||||
are places as quickly as possible into the processing queues. If you would like to have
|
||||
flow control, you need to enable it via the $SystemLogSocketFlowControl and
|
||||
$InputUnixListenSocketFlowControl config directives. Just make sure you thought about
|
||||
flow control, you need to enable it via the SysSock.FlowControl and
|
||||
FlowControl config directives. Just make sure you thought about
|
||||
the implications. Note that for many systems, turning on flow control does not hurt.
|
||||
<p>Starting with rsyslog 5.9.4,
|
||||
<b><a href="http://www.rsyslog.com/what-are-trusted-properties/">trusted syslog properties</a>
|
||||
@ -57,87 +57,177 @@ privileges are dropped (depending on how they are dropped). Note that trusted pr
|
||||
can be very useful, but also typically cause the message to grow rather large. Also, the
|
||||
format of log messages is obviously changed by adding the trusted properties at the end.
|
||||
For these reasons, the feature is <b>not enabled by default</b>. If you want to use it,
|
||||
you must turn it on (via $SystemLogSocketAnnotate and $InputUnixListenSocketAnnotate).
|
||||
you must turn it on (via SysSock.Annotate and Annotate).
|
||||
|
||||
<p><b>Configuration Directives</b>:</p>
|
||||
<p><b>Global Parameters</b></p>
|
||||
<ul>
|
||||
<li><b>$InputUnixListenSocketIgnoreMsgTimestamp</b> [<b>on</b>/off]
|
||||
<li><b>SysSock.IgnoreTimestamp</b> [<b>on</b>/off]<br>
|
||||
Ignore timestamps included in the messages, applies to messages received via the system log socket.
|
||||
</li>
|
||||
<li><b>SysSock.Use</b> (imuxsock) [on/<b>off</b>]
|
||||
do NOT listen for the local log socket. This is most useful if you run multiple
|
||||
instances of rsyslogd where only one shall handle the system log socket.
|
||||
</li>
|
||||
<li><b>SysSock.Name</b> <name-of-socket>
|
||||
</li>
|
||||
<li><b>SysSock.FlowControl</b> [on/<b>off</b>] - specifies if flow control should be applied
|
||||
to the system log socket.
|
||||
</li>
|
||||
<li><b>SysSock.UsePIDFromSystem</b> [on/<b>off</b>] - specifies if the pid being logged shall
|
||||
be obtained from the log socket itself. If so, the TAG part of the message is rewritten.
|
||||
It is recommended to turn this option on, but the default is "off" to keep compatible
|
||||
with earlier versions of rsyslog. This option was introduced in 5.7.0.
|
||||
</li>
|
||||
<li><b>SysSock.RateLimit.Interval</b> [number] - specifies the rate-limiting
|
||||
interval in seconds. Default value is 5 seconds. Set it to 0 to turn rate limiting off.
|
||||
</li>
|
||||
<li><b>SysSock.RateLimit.Burst</b> [number] - specifies the rate-limiting
|
||||
burst in number of messages. Default is 200.
|
||||
</li>
|
||||
<li><b>SysSock.RateLimit.Severity</b> [numerical severity] - specifies the severity of
|
||||
messages that shall be rate-limited.
|
||||
</li>
|
||||
<li><b>SysSock.UseSysTimeStamp</b> [<b>on</b>/off] the same as $InputUnixListenSocketUseSysTimeStamp, but for the system log socket.
|
||||
</li>
|
||||
<li><b>SysSock.Annotate</b> <on/<b>off</b>> turn on annotation/trusted
|
||||
properties for the system log socket.</li>
|
||||
</ul>
|
||||
|
||||
<p><b>Input Instance Parameters</b></p>
|
||||
<ul>
|
||||
<li><b>IgnoreTimestamp</b> [<b>on</b>/off]
|
||||
<br>Ignore timestamps included in the message. Applies to the next socket being added.</li>
|
||||
<li><b>$InputUnixListenSocketFlowControl</b> [on/<b>off</b>] - specifies if flow control should be applied
|
||||
<li><b>FlowControl</b> [on/<b>off</b>] - specifies if flow control should be applied
|
||||
to the next socket.</li>
|
||||
<li><b>$IMUXSockRateLimitInterval</b> [number] - specifies the rate-limiting
|
||||
<li><b>RateLimit.Interval</b> [number] - specifies the rate-limiting
|
||||
interval in seconds. Default value is 0, which turns off rate limiting. Set it to a number
|
||||
of seconds (5 recommended) to activate rate-limiting. The default of 0 has been choosen in 5.9.6+,
|
||||
as people experienced problems with this feature activated by default. Now it needs an
|
||||
explicit opt-in by setting this parameter.
|
||||
</li>
|
||||
<li><b>$IMUXSockRateLimitBurst</b> [number] - specifies the rate-limiting
|
||||
<li><b>RateLimit.Burst</b> [number] - specifies the rate-limiting
|
||||
burst in number of messages. Default is 200.
|
||||
</li>
|
||||
<li><b>$IMUXSockRateLimitSeverity</b> [numerical severity] - specifies the severity of
|
||||
<li><b>RateLimit.Severity</b> [numerical severity] - specifies the severity of
|
||||
messages that shall be rate-limited.
|
||||
</li>
|
||||
<li><b>$IMUXSockLocalIPIF</b> [interface name] - (available since 5.9.6) - if provided, the IP of the specified
|
||||
<!--<li><b>LocalIPIF</b> [interface name] - (available since 5.9.6) - if provided, the IP of the specified
|
||||
interface (e.g. "eth0") shall be used as fromhost-ip for imuxsock-originating messages.
|
||||
If this directive is not given OR the interface cannot be found (or has no IP address),
|
||||
the default of "127.0.0.1" is used.
|
||||
</li>
|
||||
<li><b>$InputUnixListenSocketUsePIDFromSystem</b> [on/<b>off</b>] - specifies if the pid being logged shall
|
||||
</li>-->
|
||||
<li><b>UsePIDFromSystem</b> [on/<b>off</b>] - specifies if the pid being logged shall
|
||||
be obtained from the log socket itself. If so, the TAG part of the message is rewritten.
|
||||
It is recommended to turn this option on, but the default is "off" to keep compatible
|
||||
with earlier versions of rsyslog. This option was introduced in 5.7.0.</li>
|
||||
<li><b>$InputUnixListenSocketUseSysTimeStamp</b> [<b>on</b>/off] instructs imuxsock
|
||||
<li><b>UseSysTimeStamp</b> [<b>on</b>/off] instructs imuxsock
|
||||
to obtain message time from the system (via control messages) insted of using time
|
||||
recorded inside the message. This may be most useful in combination with systemd. Note:
|
||||
this option was introduced with version 5.9.1. Due to the usefulness of it, we
|
||||
decided to enable it by default. As such, 5.9.1 and above behave slightly different
|
||||
than previous versions. However, we do not see how this could negatively affect
|
||||
existing environments.<br>
|
||||
<li><b>$SystemLogSocketIgnoreMsgTimestamp</b> [<b>on</b>/off]<br>
|
||||
Ignore timestamps included in the messages, applies to messages received via the system log socket.</li>
|
||||
<li><b>$OmitLocalLogging</b> (imuxsock) [on/<b>off</b>] -- former -o option;
|
||||
do NOT listen for the local log socket. This is most useful if you run multiple
|
||||
instances of rsyslogd where only one shall handle the system log socket.</li>
|
||||
<li><b>$SystemLogSocketName</b> <name-of-socket> -- former -p option</li>
|
||||
<li><b>$SystemLogFlowControl</b> [on/<b>off</b>] - specifies if flow control should be applied
|
||||
to the system log socket.</li>
|
||||
<li><b>$SystemLogUsePIDFromSystem</b> [on/<b>off</b>] - specifies if the pid being logged shall
|
||||
be obtained from the log socket itself. If so, the TAG part of the message is rewritten.
|
||||
It is recommended to turn this option on, but the default is "off" to keep compatible
|
||||
with earlier versions of rsyslog. This option was introduced in 5.7.0.</li>
|
||||
<li><b>$SystemLogParseTrusted</b> [on/<b>off</b>] - specifies if Trusted Properties shall be parsed
|
||||
and saved into libee event structure. This option needs $SystemLogSocketAnnotate to be on.</li>
|
||||
<li><b>$SystemLogRateLimitInterval</b> [number] - specifies the rate-limiting
|
||||
interval in seconds. Default value is 5 seconds. Set it to 0 to turn rate limiting off.
|
||||
</li>
|
||||
<li><b>$SystemLogRateLimitBurst</b> [number] - specifies the rate-limiting
|
||||
burst in number of messages. Default is 200.
|
||||
</li>
|
||||
<li><b>$SystemLogRateLimitSeverity</b> [numerical severity] - specifies the severity of
|
||||
messages that shall be rate-limited.
|
||||
</li>
|
||||
<li><b>$SystemLogUseSysTimeStamp</b> [<b>on</b>/off] the same as $InputUnixListenSocketUseSysTimeStamp, but for the system log socket.
|
||||
<li><b>$InputUnixListenSocketCreatePath</b> [on/<b>off</b>] - create directories in the socket path
|
||||
<li><b>CreatePath</b> [on/<b>off</b>] - create directories in the socket path
|
||||
if they do not already exist. They are created with 0755 permissions with the owner being the process under
|
||||
which rsyslogd runs. The default is not to create directories. Keep in mind, though, that rsyslogd always
|
||||
creates the socket itself if it does not exist (just not the directories by default).
|
||||
<br>Note that this statement affects the
|
||||
next $AddUnixListenSocket directive that follows in sequence in the configuration file. It never works
|
||||
next Socket directive that follows in sequence in the configuration file. It never works
|
||||
on the system log socket (where it is deemed unnecessary). Also note that it is automatically
|
||||
being reset to "off" after the $AddUnixListenSocket directive, so if you would have it active
|
||||
being reset to "off" after the Socket directive, so if you would have it active
|
||||
for two additional listen sockets, you need to specify it in front of each one. This option is primarily considered
|
||||
useful for defining additional sockets that reside on non-permanent file systems. As rsyslogd probably starts
|
||||
up before the daemons that create these sockets, it is a vehicle to enable rsyslogd to listen to those
|
||||
sockets even though their directories do not yet exist. [available since 4.7.0 and 5.3.0]</li>
|
||||
<li><b>$AddUnixListenSocket</b> <name-of-socket> adds additional unix socket, default none -- former -a option</li>
|
||||
<li><b>$InputUnixListenSocketHostName</b> <hostname> permits to override the hostname that
|
||||
shall be used inside messages taken from the <b>next</b> $AddUnixListenSocket socket. Note that
|
||||
<li><b>Socket</b> <name-of-socket> adds additional unix socket, default none -- former -a option</li>
|
||||
<li><b>HostName</b> <hostname> permits to override the hostname that
|
||||
shall be used inside messages taken from the <b>next</b> Socket socket. Note that
|
||||
the hostname must be specified before the $AddUnixListenSocket configuration directive, and it
|
||||
will only affect the next one and then automatically be reset. This functionality is provided so
|
||||
that the local hostname can be overridden in cases where that is desired.</li>
|
||||
<li><b>$InputUnixListenSocketAnnotate</b> <on/<b>off</b>> turn on annotation/trusted
|
||||
<li><b>Annotate</b> <on/<b>off</b>> turn on annotation/trusted
|
||||
properties for the non-system log socket in question.</li>
|
||||
<li><b>$SystemLogSocketAnnotate</b> <on/<b>off</b>> turn on annotation/trusted
|
||||
properties for the system log socket.</li>
|
||||
</ul>
|
||||
|
||||
<b>Caveats/Known Bugs:</b><br>
|
||||
<ul>
|
||||
<li>There is a compile-time limit of 50 concurrent sockets. If you need more, you need to
|
||||
change the array size in imuxsock.c.
|
||||
<li>This documentation is sparse and incomplete.
|
||||
</ul>
|
||||
<p><b>Sample:</b></p>
|
||||
<p>The following sample is the minimum setup required to accept syslog messages from applications running
|
||||
on the local system.<br>
|
||||
</p>
|
||||
<textarea rows="2" cols="70">module(load="/folder/to/rsyslog/plugins/imuxsock/.libs/imuxsock" # needs to be done just once
|
||||
SysSock.FlowControl="on") # enable flow control (use if needed)
|
||||
</textarea>
|
||||
<p>The following sample is a configuration where rsyslogd pulls logs from two
|
||||
jails, and assigns different hostnames to each of the jails: </p>
|
||||
<textarea rows="6" cols="70">module(load="/folder/to/rsyslog/plugins/imuxsock/.libs/imuxsock") # needs to be done just once
|
||||
|
||||
input(type="imuxsock" HostName="jail1.example.net" Socket="/jail/1/dev/log")
|
||||
input(type="imuxsock" HostName="jail2.example.net" Socket="/jail/2/dev/log")
|
||||
</textarea>
|
||||
<p>The following sample is a configuration where rsyslogd reads the openssh log
|
||||
messages via a separate socket, but this socket is created on a temporary file
|
||||
system. As rsyslogd starts up before the sshd, it needs to create the socket
|
||||
directories, because it otherwise can not open the socket and thus not listen
|
||||
to openssh messages. Note that it is vital not to place any other socket between
|
||||
the CreatePath and the Socket.</p>
|
||||
<textarea rows="6" cols="70">module(load="/folder/to/rsyslog/plugins/imuxsock/.libs/imuxsock") # needs to be done just once
|
||||
|
||||
input(type="imuxsock" Socket="/var/run/sshd/dev/log" CreatePath="on")
|
||||
</textarea>
|
||||
<p>The following sample is used to turn off input rate limiting on the system log
|
||||
socket.
|
||||
<textarea rows="4" cols="70">module(load="/folder/to/rsyslog/plugins/imuxsock/.libs/imuxsock" # needs to be done just once
|
||||
SysSock.RateLimit.Interval="0") # turn off rate limiting
|
||||
</textarea>
|
||||
<p>The following sample is used activate message annotation and thus trusted properties
|
||||
on the system log socket.
|
||||
<textarea rows="4" cols="70">module(load="/folder/to/rsyslog/plugins/imuxsock/.libs/imuxsock" # needs to be done just once
|
||||
SysSock.Annotate="on")
|
||||
</textarea>
|
||||
|
||||
|
||||
<p><b>Legacy Configuration Directives</b>:</p>
|
||||
<ul>
|
||||
<li><b>$InputUnixListenSocketIgnoreMsgTimestamp</b> [<b>on</b>/off]
|
||||
<br>Please see: IgnoreTimestamp.</li>
|
||||
<li><b>$InputUnixListenSocketFlowControl</b> [on/<b>off</b>] - Please see: FlowControl .</li>
|
||||
<li><b>$IMUXSockRateLimitInterval</b> [number] - Please see: RateLimit.Interval
|
||||
</li>
|
||||
<li><b>$IMUXSockRateLimitBurst</b> [number] - Please see: RateLimit.Burst
|
||||
</li>
|
||||
<li><b>$IMUXSockRateLimitSeverity</b> [numerical severity] - Please see: RateLimit.Severity
|
||||
</li>
|
||||
<li><b>$IMUXSockLocalIPIF</b> [interface name] - (available since 5.9.6) - if provided, the IP of the specified
|
||||
interface (e.g. "eth0") shall be used as fromhost-ip for imuxsock-originating messages.
|
||||
If this directive is not given OR the interface cannot be found (or has no IP address),
|
||||
the default of "127.0.0.1" is used.
|
||||
</li>
|
||||
<li><b>$InputUnixListenSocketUsePIDFromSystem</b> [on/<b>off</b>] - Please see: UsePIDFromSystem.</li>
|
||||
<li><b>$InputUnixListenSocketUseSysTimeStamp</b> [<b>on</b>/off] Please see: UseSysTimeStamp .<br>
|
||||
<li><b>$SystemLogSocketIgnoreMsgTimestamp</b> [<b>on</b>/off]<br>
|
||||
Please see: SysSock.IgnoreTimestamp.</li>
|
||||
<li><b>$OmitLocalLogging</b> (imuxsock) [on/<b>off</b>] Please see: SysSock.Use</li>
|
||||
<li><b>$SystemLogSocketName</b> <name-of-socket> Please see: SysSock.Name</li>
|
||||
<li><b>$SystemLogFlowControl</b> [on/<b>off</b>] - Please see: SysSock.FlowControl.</li>
|
||||
<li><b>$SystemLogUsePIDFromSystem</b> [on/<b>off</b>] - Please see: SysSock.UsePIDFromSystem.</li>
|
||||
<li><b>$SystemLogRateLimitInterval</b> [number] - Please see: SysSock.RateLimit.Interval.
|
||||
</li>
|
||||
<li><b>$SystemLogRateLimitBurst</b> [number] - Please see: SysSock.RateLimit.Burst
|
||||
</li>
|
||||
<li><b>$SystemLogRateLimitSeverity</b> [numerical severity] - Please see: SysSock.RateLimit.Severity
|
||||
</li>
|
||||
<li><b>$SystemLogUseSysTimeStamp</b> [<b>on</b>/off] Please see: SysSock.UseSysTimeStamp.
|
||||
<li><b>$InputUnixListenSocketCreatePath</b> [on/<b>off</b>] - Please see: CreatePath</li>
|
||||
<li><b>$AddUnixListenSocket</b> <name-of-socket> Please see: Socket </li>
|
||||
<li><b>$InputUnixListenSocketHostName</b> <hostname> Please see: HostName.</li>
|
||||
<li><b>$InputUnixListenSocketAnnotate</b> <on/<b>off</b>> Please see: Annotate.</li>
|
||||
<li><b>$SystemLogSocketAnnotate</b> <on/<b>off</b>> Please see: SysSock.Annotate.</li>
|
||||
</ul>
|
||||
|
||||
<b>Caveats/Known Bugs:</b><br>
|
||||
@ -171,7 +261,7 @@ the $InputUnixListenSocketCreatePath and the $InputUnixListenSocketHostName.</p>
|
||||
<textarea rows="6" cols="70">$ModLoad imuxsock # needs to be done just once
|
||||
|
||||
$InputUnixListenSocketCreatePath on # turn on for *next* socket
|
||||
$InputUnixListenSocketHostName /var/run/sshd/dev/log
|
||||
$InputUnixListenSocket /var/run/sshd/dev/log
|
||||
</textarea>
|
||||
<p>The following sample is used to turn off input rate limiting on the system log
|
||||
socket.
|
||||
|
||||
@ -562,7 +562,6 @@ finalize_it:
|
||||
ENDsetModCnf
|
||||
|
||||
|
||||
|
||||
BEGINendCnfLoad
|
||||
CODESTARTendCnfLoad
|
||||
if(!loadModConf->configSetViaV2Method) {
|
||||
|
||||
@ -90,6 +90,8 @@ DEFobjCurrIf(statsobj)
|
||||
/* forward references */
|
||||
static void * wrkr(void *myself);
|
||||
|
||||
#define DFLT_wrkrMax 2
|
||||
|
||||
/* config settings */
|
||||
typedef struct configSettings_s {
|
||||
int bKeepAlive; /* support keep-alive packets */
|
||||
@ -127,11 +129,22 @@ struct modConfData_s {
|
||||
rsconf_t *pConf; /* our overall config object */
|
||||
instanceConf_t *root, *tail;
|
||||
int wrkrMax;
|
||||
sbool configSetViaV2Method;
|
||||
};
|
||||
|
||||
static modConfData_t *loadModConf = NULL;/* modConf ptr to use for the current load process */
|
||||
static modConfData_t *runModConf = NULL;/* modConf ptr to use for the current load process */
|
||||
|
||||
/* module-global parameters */
|
||||
static struct cnfparamdescr modpdescr[] = {
|
||||
{ "threads", eCmdHdlrPositiveInt, 0 }
|
||||
};
|
||||
static struct cnfparamblk modpblk =
|
||||
{ CNFPARAMBLK_VERSION,
|
||||
sizeof(modpdescr)/sizeof(struct cnfparamdescr),
|
||||
modpdescr
|
||||
};
|
||||
|
||||
/* input instance parameters */
|
||||
static struct cnfparamdescr inppdescr[] = {
|
||||
{ "port", eCmdHdlrString, CNFPARAM_REQUIRED }, /* legacy: InputTCPServerRun */
|
||||
@ -153,6 +166,8 @@ static struct cnfparamblk inppblk =
|
||||
};
|
||||
|
||||
#include "im-helper.h" /* must be included AFTER the type definitions! */
|
||||
static int bLegacyCnfModGlobalsPermitted;/* are legacy module-global config parameters permitted? */
|
||||
|
||||
/* data elements describing our running config */
|
||||
typedef struct ptcpsrv_s ptcpsrv_t;
|
||||
typedef struct ptcplstn_s ptcplstn_t;
|
||||
@ -832,7 +847,7 @@ static inline void
|
||||
initConfigSettings(void)
|
||||
{
|
||||
cs.bEmitMsgOnClose = 0;
|
||||
cs.wrkrMax = 2;
|
||||
cs.wrkrMax = DFLT_wrkrMax;
|
||||
cs.bSuppOctetFram = 1;
|
||||
cs.iAddtlFrameDelim = TCPSRV_NO_ADDTL_DELIMITER;
|
||||
cs.pszInputName = NULL;
|
||||
@ -1152,6 +1167,7 @@ startWorkerPool(void)
|
||||
wrkrRunning = 0;
|
||||
if(runModConf->wrkrMax > 16)
|
||||
runModConf->wrkrMax = 16; /* TODO: make dynamic? */
|
||||
DBGPRINTF("imptcp: starting worker pool, %d workers\n", runModConf->wrkrMax);
|
||||
pthread_mutex_init(&wrkrMut, NULL);
|
||||
pthread_cond_init(&wrkrIdle, NULL);
|
||||
for(i = 0 ; i < runModConf->wrkrMax ; ++i) {
|
||||
@ -1170,6 +1186,7 @@ static inline void
|
||||
stopWorkerPool(void)
|
||||
{
|
||||
int i;
|
||||
DBGPRINTF("imptcp: stoping worker pool\n");
|
||||
for(i = 0 ; i < runModConf->wrkrMax ; ++i) {
|
||||
pthread_cond_signal(&wrkrInfo[i].run); /* awake wrkr if not running */
|
||||
pthread_join(wrkrInfo[i].tid, NULL);
|
||||
@ -1178,7 +1195,6 @@ stopWorkerPool(void)
|
||||
}
|
||||
pthread_cond_destroy(&wrkrIdle);
|
||||
pthread_mutex_destroy(&wrkrMut);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -1455,15 +1471,60 @@ BEGINbeginCnfLoad
|
||||
CODESTARTbeginCnfLoad
|
||||
loadModConf = pModConf;
|
||||
pModConf->pConf = pConf;
|
||||
/* init our settings */
|
||||
loadModConf->wrkrMax = DFLT_wrkrMax;
|
||||
loadModConf->configSetViaV2Method = 0;
|
||||
bLegacyCnfModGlobalsPermitted = 1;
|
||||
/* init legacy config vars */
|
||||
initConfigSettings();
|
||||
ENDbeginCnfLoad
|
||||
|
||||
|
||||
BEGINsetModCnf
|
||||
struct cnfparamvals *pvals = NULL;
|
||||
int i;
|
||||
CODESTARTsetModCnf
|
||||
pvals = nvlstGetParams(lst, &modpblk, NULL);
|
||||
if(pvals == NULL) {
|
||||
errmsg.LogError(0, RS_RET_MISSING_CNFPARAMS, "imptcp: error processing module "
|
||||
"config parameters [module(...)]");
|
||||
ABORT_FINALIZE(RS_RET_MISSING_CNFPARAMS);
|
||||
}
|
||||
|
||||
if(Debug) {
|
||||
dbgprintf("module (global) param blk for imptcp:\n");
|
||||
cnfparamsPrint(&modpblk, pvals);
|
||||
}
|
||||
|
||||
for(i = 0 ; i < modpblk.nParams ; ++i) {
|
||||
if(!pvals[i].bUsed)
|
||||
continue;
|
||||
if(!strcmp(modpblk.descr[i].name, "threads")) {
|
||||
loadModConf->wrkrMax = (int) pvals[i].val.d.n;
|
||||
} else {
|
||||
dbgprintf("imptcp: program error, non-handled "
|
||||
"param '%s' in beginCnfLoad\n", modpblk.descr[i].name);
|
||||
}
|
||||
}
|
||||
|
||||
/* remove all of our legacy handlers, as they can not used in addition
|
||||
* the the new-style config method.
|
||||
*/
|
||||
bLegacyCnfModGlobalsPermitted = 0;
|
||||
loadModConf->configSetViaV2Method = 1;
|
||||
|
||||
finalize_it:
|
||||
if(pvals != NULL)
|
||||
cnfparamvalsDestruct(pvals, &modpblk);
|
||||
ENDsetModCnf
|
||||
|
||||
|
||||
BEGINendCnfLoad
|
||||
CODESTARTendCnfLoad
|
||||
/* persist module-specific settings from legacy config system */
|
||||
loadModConf->wrkrMax = cs.wrkrMax;
|
||||
if(!loadModConf->configSetViaV2Method) {
|
||||
/* persist module-specific settings from legacy config system */
|
||||
loadModConf->wrkrMax = cs.wrkrMax;
|
||||
}
|
||||
|
||||
loadModConf = NULL; /* done loading */
|
||||
/* free legacy config vars */
|
||||
@ -1647,7 +1708,7 @@ static rsRetVal
|
||||
resetConfigVariables(uchar __attribute__((unused)) *pp, void __attribute__((unused)) *pVal)
|
||||
{
|
||||
cs.bEmitMsgOnClose = 0;
|
||||
cs.wrkrMax = 2;
|
||||
cs.wrkrMax = DFLT_wrkrMax;
|
||||
cs.bKeepAlive = 0;
|
||||
cs.iKeepAliveProbes = 0;
|
||||
cs.iKeepAliveTime = 0;
|
||||
@ -1673,6 +1734,7 @@ BEGINqueryEtryPt
|
||||
CODESTARTqueryEtryPt
|
||||
CODEqueryEtryPt_STD_IMOD_QUERIES
|
||||
CODEqueryEtryPt_STD_CONF2_QUERIES
|
||||
CODEqueryEtryPt_STD_CONF2_setModCnf_QUERIES
|
||||
CODEqueryEtryPt_STD_CONF2_PREPRIVDROP_QUERIES
|
||||
CODEqueryEtryPt_STD_CONF2_IMOD_QUERIES
|
||||
CODEqueryEtryPt_IsCompatibleWithFeature_IF_OMOD_QUERIES
|
||||
@ -1716,14 +1778,15 @@ CODEmodInit_QueryRegCFSLineHdlr
|
||||
eCmdHdlrBinary, NULL, &cs.bEmitMsgOnClose, STD_LOADABLE_MODULE_ID));
|
||||
CHKiRet(omsdRegCFSLineHdlr(UCHAR_CONSTANT("inputptcpserveraddtlframedelimiter"), 0, eCmdHdlrInt,
|
||||
NULL, &cs.iAddtlFrameDelim, STD_LOADABLE_MODULE_ID));
|
||||
CHKiRet(omsdRegCFSLineHdlr(UCHAR_CONSTANT("inputptcpserverhelperthreads"), 0, eCmdHdlrInt,
|
||||
NULL, &cs.wrkrMax, STD_LOADABLE_MODULE_ID));
|
||||
CHKiRet(omsdRegCFSLineHdlr(UCHAR_CONSTANT("inputptcpserverinputname"), 0,
|
||||
eCmdHdlrGetWord, NULL, &cs.pszInputName, STD_LOADABLE_MODULE_ID));
|
||||
CHKiRet(omsdRegCFSLineHdlr(UCHAR_CONSTANT("inputptcpserverlistenip"), 0,
|
||||
eCmdHdlrGetWord, NULL, &cs.lstnIP, STD_LOADABLE_MODULE_ID));
|
||||
CHKiRet(omsdRegCFSLineHdlr(UCHAR_CONSTANT("inputptcpserverbindruleset"), 0,
|
||||
eCmdHdlrGetWord, NULL, &cs.pszBindRuleset, STD_LOADABLE_MODULE_ID));
|
||||
/* module-global parameters */
|
||||
CHKiRet(regCfSysLineHdlr2(UCHAR_CONSTANT("inputptcpserverhelperthreads"), 0, eCmdHdlrInt,
|
||||
NULL, &cs.wrkrMax, STD_LOADABLE_MODULE_ID, &bLegacyCnfModGlobalsPermitted));
|
||||
CHKiRet(omsdRegCFSLineHdlr(UCHAR_CONSTANT("resetconfigvariables"), 1, eCmdHdlrCustomHandler,
|
||||
resetConfigVariables, NULL, STD_LOADABLE_MODULE_ID));
|
||||
ENDmodInit
|
||||
|
||||
@ -123,11 +123,31 @@ struct modConfData_s {
|
||||
sbool bKeepAlive;
|
||||
sbool bEmitMsgOnClose; /* emit an informational message on close by remote peer */
|
||||
uchar *pszStrmDrvrAuthMode; /* authentication mode to use */
|
||||
sbool configSetViaV2Method;
|
||||
};
|
||||
|
||||
static modConfData_t *loadModConf = NULL;/* modConf ptr to use for the current load process */
|
||||
static modConfData_t *runModConf = NULL;/* modConf ptr to use for the current load process */
|
||||
|
||||
/* module-global parameters */
|
||||
static struct cnfparamdescr modpdescr[] = {
|
||||
{ "flowcontrol", eCmdHdlrBinary, 0 },
|
||||
{ "disablelfdelimiter", eCmdHdlrBinary, 0 },
|
||||
{ "octetcountedframing", eCmdHdlrBinary, 0 },
|
||||
{ "notifyonconnectionclose", eCmdHdlrBinary, 0 },
|
||||
{ "addtlframedelimiter", eCmdHdlrPositiveInt, 0 },
|
||||
{ "maxsessions", eCmdHdlrPositiveInt, 0 },
|
||||
{ "maxlistners", eCmdHdlrPositiveInt, 0 },
|
||||
{ "streamdriver.mode", eCmdHdlrPositiveInt, 0 },
|
||||
{ "streamdriver.authmode", eCmdHdlrString, 0 },
|
||||
{ "keepalive", eCmdHdlrBinary, 0 }
|
||||
};
|
||||
static struct cnfparamblk modpblk =
|
||||
{ CNFPARAMBLK_VERSION,
|
||||
sizeof(modpdescr)/sizeof(struct cnfparamdescr),
|
||||
modpdescr
|
||||
};
|
||||
|
||||
/* input instance parameters */
|
||||
static struct cnfparamdescr inppdescr[] = {
|
||||
{ "port", eCmdHdlrString, CNFPARAM_REQUIRED }, /* legacy: InputTCPServerRun */
|
||||
@ -143,6 +163,8 @@ static struct cnfparamblk inppblk =
|
||||
|
||||
#include "im-helper.h" /* must be included AFTER the type definitions! */
|
||||
|
||||
static int bLegacyCnfModGlobalsPermitted;/* are legacy module-global config parameters permitted? */
|
||||
|
||||
/* callbacks */
|
||||
/* this shall go into a specific ACL module! */
|
||||
static int
|
||||
@ -242,8 +264,6 @@ finalize_it:
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/* This function is called when a new listener instace shall be added to
|
||||
* the current config object via the legacy config system. It just shuffles
|
||||
* all parameters to the listener in-memory instance.
|
||||
@ -369,30 +389,103 @@ BEGINbeginCnfLoad
|
||||
CODESTARTbeginCnfLoad
|
||||
loadModConf = pModConf;
|
||||
pModConf->pConf = pConf;
|
||||
/* init our settings */
|
||||
loadModConf->iTCPSessMax = 200;
|
||||
loadModConf->iTCPLstnMax = 20;
|
||||
loadModConf->bSuppOctetFram = 1;
|
||||
loadModConf->iStrmDrvrMode = 0;
|
||||
loadModConf->bUseFlowControl = 0;
|
||||
loadModConf->bKeepAlive = 0;
|
||||
loadModConf->bEmitMsgOnClose = 0;
|
||||
loadModConf->iAddtlFrameDelim = TCPSRV_NO_ADDTL_DELIMITER;
|
||||
loadModConf->bDisableLFDelim = 0;
|
||||
loadModConf->pszStrmDrvrAuthMode = NULL;
|
||||
loadModConf->configSetViaV2Method = 0;
|
||||
bLegacyCnfModGlobalsPermitted = 1;
|
||||
/* init legacy config variables */
|
||||
cs.pszStrmDrvrAuthMode = NULL;
|
||||
resetConfigVariables(NULL, NULL); /* dummy parameters just to fulfill interface def */
|
||||
ENDbeginCnfLoad
|
||||
|
||||
|
||||
BEGINsetModCnf
|
||||
struct cnfparamvals *pvals = NULL;
|
||||
int i;
|
||||
CODESTARTsetModCnf
|
||||
pvals = nvlstGetParams(lst, &modpblk, NULL);
|
||||
if(pvals == NULL) {
|
||||
errmsg.LogError(0, RS_RET_MISSING_CNFPARAMS, "imtcp: error processing module "
|
||||
"config parameters [module(...)]");
|
||||
ABORT_FINALIZE(RS_RET_MISSING_CNFPARAMS);
|
||||
}
|
||||
|
||||
if(Debug) {
|
||||
dbgprintf("module (global) param blk for imtcp:\n");
|
||||
cnfparamsPrint(&modpblk, pvals);
|
||||
}
|
||||
|
||||
for(i = 0 ; i < modpblk.nParams ; ++i) {
|
||||
if(!pvals[i].bUsed)
|
||||
continue;
|
||||
if(!strcmp(modpblk.descr[i].name, "flowcontrol")) {
|
||||
loadModConf->bUseFlowControl = (int) pvals[i].val.d.n;
|
||||
} else if(!strcmp(modpblk.descr[i].name, "disablelfdelimiter")) {
|
||||
loadModConf->bDisableLFDelim = (int) pvals[i].val.d.n;
|
||||
} else if(!strcmp(modpblk.descr[i].name, "octetcountedframing")) {
|
||||
loadModConf->bSuppOctetFram = (int) pvals[i].val.d.n;
|
||||
} else if(!strcmp(modpblk.descr[i].name, "notifyonconnectionclose")) {
|
||||
loadModConf->bEmitMsgOnClose = (int) pvals[i].val.d.n;
|
||||
} else if(!strcmp(modpblk.descr[i].name, "addtlframedelimiter")) {
|
||||
loadModConf->iAddtlFrameDelim = (int) pvals[i].val.d.n;
|
||||
} else if(!strcmp(modpblk.descr[i].name, "maxsessions")) {
|
||||
loadModConf->iTCPSessMax = (int) pvals[i].val.d.n;
|
||||
} else if(!strcmp(modpblk.descr[i].name, "maxlistners")) {
|
||||
loadModConf->iTCPLstnMax = (int) pvals[i].val.d.n;
|
||||
} else if(!strcmp(modpblk.descr[i].name, "keepalive")) {
|
||||
loadModConf->bKeepAlive = (int) pvals[i].val.d.n;
|
||||
} else if(!strcmp(modpblk.descr[i].name, "streamdriver.mode")) {
|
||||
loadModConf->iStrmDrvrMode = (int) pvals[i].val.d.n;
|
||||
} else if(!strcmp(modpblk.descr[i].name, "streamdriver.mode")) {
|
||||
loadModConf->pszStrmDrvrAuthMode = (uchar*)es_str2cstr(pvals[i].val.d.estr, NULL);
|
||||
} else {
|
||||
dbgprintf("imtcp: program error, non-handled "
|
||||
"param '%s' in beginCnfLoad\n", modpblk.descr[i].name);
|
||||
}
|
||||
}
|
||||
|
||||
/* remove all of our legacy handlers, as they can not used in addition
|
||||
* the the new-style config method.
|
||||
*/
|
||||
bLegacyCnfModGlobalsPermitted = 0;
|
||||
loadModConf->configSetViaV2Method = 1;
|
||||
|
||||
finalize_it:
|
||||
if(pvals != NULL)
|
||||
cnfparamvalsDestruct(pvals, &modpblk);
|
||||
ENDsetModCnf
|
||||
|
||||
|
||||
BEGINendCnfLoad
|
||||
CODESTARTendCnfLoad
|
||||
/* persist module-specific settings from legacy config system */
|
||||
pModConf->iTCPSessMax = cs.iTCPSessMax;
|
||||
pModConf->iTCPLstnMax = cs.iTCPLstnMax;
|
||||
pModConf->iStrmDrvrMode = cs.iStrmDrvrMode;
|
||||
pModConf->bEmitMsgOnClose = cs.bEmitMsgOnClose;
|
||||
pModConf->bSuppOctetFram = cs.bSuppOctetFram;
|
||||
pModConf->iAddtlFrameDelim = cs.iAddtlFrameDelim;
|
||||
pModConf->bDisableLFDelim = cs.bDisableLFDelim;
|
||||
pModConf->bUseFlowControl = cs.bUseFlowControl;
|
||||
pModConf->bKeepAlive = cs.bKeepAlive;
|
||||
if((cs.pszStrmDrvrAuthMode == NULL) || (cs.pszStrmDrvrAuthMode[0] == '\0')) {
|
||||
loadModConf->pszStrmDrvrAuthMode = NULL;
|
||||
free(cs.pszStrmDrvrAuthMode);
|
||||
} else {
|
||||
loadModConf->pszStrmDrvrAuthMode = cs.pszStrmDrvrAuthMode;
|
||||
if(!loadModConf->configSetViaV2Method) {
|
||||
/* persist module-specific settings from legacy config system */
|
||||
pModConf->iTCPSessMax = cs.iTCPSessMax;
|
||||
pModConf->iTCPLstnMax = cs.iTCPLstnMax;
|
||||
pModConf->iStrmDrvrMode = cs.iStrmDrvrMode;
|
||||
pModConf->bEmitMsgOnClose = cs.bEmitMsgOnClose;
|
||||
pModConf->bSuppOctetFram = cs.bSuppOctetFram;
|
||||
pModConf->iAddtlFrameDelim = cs.iAddtlFrameDelim;
|
||||
pModConf->bDisableLFDelim = cs.bDisableLFDelim;
|
||||
pModConf->bUseFlowControl = cs.bUseFlowControl;
|
||||
pModConf->bKeepAlive = cs.bKeepAlive;
|
||||
if((cs.pszStrmDrvrAuthMode == NULL) || (cs.pszStrmDrvrAuthMode[0] == '\0')) {
|
||||
loadModConf->pszStrmDrvrAuthMode = NULL;
|
||||
} else {
|
||||
loadModConf->pszStrmDrvrAuthMode = cs.pszStrmDrvrAuthMode;
|
||||
}
|
||||
}
|
||||
if((cs.pszStrmDrvrAuthMode == NULL) || (cs.pszStrmDrvrAuthMode[0] == '\0'))
|
||||
free(cs.pszStrmDrvrAuthMode);
|
||||
cs.pszStrmDrvrAuthMode = NULL;
|
||||
|
||||
loadModConf = NULL; /* done loading */
|
||||
@ -527,6 +620,7 @@ BEGINqueryEtryPt
|
||||
CODESTARTqueryEtryPt
|
||||
CODEqueryEtryPt_STD_IMOD_QUERIES
|
||||
CODEqueryEtryPt_STD_CONF2_QUERIES
|
||||
CODEqueryEtryPt_STD_CONF2_setModCnf_QUERIES
|
||||
CODEqueryEtryPt_STD_CONF2_PREPRIVDROP_QUERIES
|
||||
CODEqueryEtryPt_STD_CONF2_IMOD_QUERIES
|
||||
CODEqueryEtryPt_IsCompatibleWithFeature_IF_OMOD_QUERIES
|
||||
@ -549,36 +643,39 @@ CODEmodInit_QueryRegCFSLineHdlr
|
||||
/* register config file handlers */
|
||||
CHKiRet(omsdRegCFSLineHdlr(UCHAR_CONSTANT("inputtcpserverrun"), 0, eCmdHdlrGetWord,
|
||||
addInstance, NULL, STD_LOADABLE_MODULE_ID));
|
||||
CHKiRet(omsdRegCFSLineHdlr(UCHAR_CONSTANT("inputtcpserverkeepalive"), 0, eCmdHdlrBinary,
|
||||
NULL, &cs.bKeepAlive, STD_LOADABLE_MODULE_ID));
|
||||
CHKiRet(omsdRegCFSLineHdlr(UCHAR_CONSTANT("inputtcpserversupportoctetcountedframing"), 0, eCmdHdlrBinary,
|
||||
NULL, &cs.bSuppOctetFram, STD_LOADABLE_MODULE_ID));
|
||||
CHKiRet(omsdRegCFSLineHdlr(UCHAR_CONSTANT("inputtcpmaxsessions"), 0, eCmdHdlrInt,
|
||||
NULL, &cs.iTCPSessMax, STD_LOADABLE_MODULE_ID));
|
||||
CHKiRet(omsdRegCFSLineHdlr(UCHAR_CONSTANT("inputtcpmaxlisteners"), 0, eCmdHdlrInt,
|
||||
NULL, &cs.iTCPLstnMax, STD_LOADABLE_MODULE_ID));
|
||||
CHKiRet(omsdRegCFSLineHdlr(UCHAR_CONSTANT("inputtcpservernotifyonconnectionclose"), 0, eCmdHdlrBinary,
|
||||
NULL, &cs.bEmitMsgOnClose, STD_LOADABLE_MODULE_ID));
|
||||
CHKiRet(omsdRegCFSLineHdlr(UCHAR_CONSTANT("inputtcpserverstreamdrivermode"), 0, eCmdHdlrInt,
|
||||
NULL, &cs.iStrmDrvrMode, STD_LOADABLE_MODULE_ID));
|
||||
CHKiRet(omsdRegCFSLineHdlr(UCHAR_CONSTANT("inputtcpserverstreamdriverauthmode"), 0, eCmdHdlrGetWord,
|
||||
NULL, &cs.pszStrmDrvrAuthMode, STD_LOADABLE_MODULE_ID));
|
||||
CHKiRet(omsdRegCFSLineHdlr(UCHAR_CONSTANT("inputtcpserverstreamdriverpermittedpeer"), 0, eCmdHdlrGetWord,
|
||||
setPermittedPeer, NULL, STD_LOADABLE_MODULE_ID));
|
||||
CHKiRet(omsdRegCFSLineHdlr(UCHAR_CONSTANT("inputtcpserveraddtlframedelimiter"), 0, eCmdHdlrInt,
|
||||
NULL, &cs.iAddtlFrameDelim, STD_LOADABLE_MODULE_ID));
|
||||
CHKiRet(omsdRegCFSLineHdlr(UCHAR_CONSTANT("inputtcpserverdisablelfdelimiter"), 0, eCmdHdlrBinary,
|
||||
NULL, &cs.bDisableLFDelim, STD_LOADABLE_MODULE_ID));
|
||||
CHKiRet(omsdRegCFSLineHdlr(UCHAR_CONSTANT("inputtcpserverinputname"), 0, eCmdHdlrGetWord,
|
||||
NULL, &cs.pszInputName, STD_LOADABLE_MODULE_ID));
|
||||
CHKiRet(omsdRegCFSLineHdlr(UCHAR_CONSTANT("inputtcpserverbindruleset"), 0, eCmdHdlrGetWord,
|
||||
NULL, &cs.pszBindRuleset, STD_LOADABLE_MODULE_ID));
|
||||
CHKiRet(omsdRegCFSLineHdlr(UCHAR_CONSTANT("inputtcpflowcontrol"), 0, eCmdHdlrBinary,
|
||||
NULL, &cs.bUseFlowControl, STD_LOADABLE_MODULE_ID));
|
||||
/* module-global config params - will be disabled in configs that are loaded
|
||||
* via module(...).
|
||||
*/
|
||||
CHKiRet(regCfSysLineHdlr2(UCHAR_CONSTANT("inputtcpserverstreamdriverauthmode"), 0, eCmdHdlrGetWord,
|
||||
NULL, &cs.pszStrmDrvrAuthMode, STD_LOADABLE_MODULE_ID, &bLegacyCnfModGlobalsPermitted));
|
||||
CHKiRet(regCfSysLineHdlr2(UCHAR_CONSTANT("inputtcpserverkeepalive"), 0, eCmdHdlrBinary,
|
||||
NULL, &cs.bKeepAlive, STD_LOADABLE_MODULE_ID, &bLegacyCnfModGlobalsPermitted));
|
||||
CHKiRet(regCfSysLineHdlr2(UCHAR_CONSTANT("inputtcpflowcontrol"), 0, eCmdHdlrBinary,
|
||||
NULL, &cs.bUseFlowControl, STD_LOADABLE_MODULE_ID, &bLegacyCnfModGlobalsPermitted));
|
||||
CHKiRet(regCfSysLineHdlr2(UCHAR_CONSTANT("inputtcpserverdisablelfdelimiter"), 0, eCmdHdlrBinary,
|
||||
NULL, &cs.bDisableLFDelim, STD_LOADABLE_MODULE_ID, &bLegacyCnfModGlobalsPermitted));
|
||||
CHKiRet(regCfSysLineHdlr2(UCHAR_CONSTANT("inputtcpserveraddtlframedelimiter"), 0, eCmdHdlrInt,
|
||||
NULL, &cs.iAddtlFrameDelim, STD_LOADABLE_MODULE_ID, &bLegacyCnfModGlobalsPermitted));
|
||||
CHKiRet(regCfSysLineHdlr2(UCHAR_CONSTANT("inputtcpserversupportoctetcountedframing"), 0, eCmdHdlrBinary,
|
||||
NULL, &cs.bSuppOctetFram, STD_LOADABLE_MODULE_ID, &bLegacyCnfModGlobalsPermitted));
|
||||
CHKiRet(regCfSysLineHdlr2(UCHAR_CONSTANT("inputtcpmaxsessions"), 0, eCmdHdlrInt,
|
||||
NULL, &cs.iTCPSessMax, STD_LOADABLE_MODULE_ID, &bLegacyCnfModGlobalsPermitted));
|
||||
CHKiRet(regCfSysLineHdlr2(UCHAR_CONSTANT("inputtcpmaxlisteners"), 0, eCmdHdlrInt,
|
||||
NULL, &cs.iTCPLstnMax, STD_LOADABLE_MODULE_ID, &bLegacyCnfModGlobalsPermitted));
|
||||
CHKiRet(regCfSysLineHdlr2(UCHAR_CONSTANT("inputtcpservernotifyonconnectionclose"), 0, eCmdHdlrBinary,
|
||||
NULL, &cs.bEmitMsgOnClose, STD_LOADABLE_MODULE_ID, &bLegacyCnfModGlobalsPermitted));
|
||||
CHKiRet(regCfSysLineHdlr2(UCHAR_CONSTANT("inputtcpserverstreamdrivermode"), 0, eCmdHdlrInt,
|
||||
NULL, &cs.iStrmDrvrMode, STD_LOADABLE_MODULE_ID, &bLegacyCnfModGlobalsPermitted));
|
||||
|
||||
CHKiRet(omsdRegCFSLineHdlr(UCHAR_CONSTANT("resetconfigvariables"), 1, eCmdHdlrCustomHandler,
|
||||
resetConfigVariables, NULL, STD_LOADABLE_MODULE_ID));
|
||||
ENDmodInit
|
||||
|
||||
|
||||
/* vim:set ai:
|
||||
*/
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user