]> git.ipfire.org Git - thirdparty/snort3.git/commitdiff
updated autotools generation of api_options.h; bumped build to 144
authorRuss Combs <rucombs@cisco.com>
Tue, 31 Mar 2015 13:03:36 +0000 (09:03 -0400)
committerRuss Combs <rucombs@cisco.com>
Tue, 31 Mar 2015 13:03:36 +0000 (09:03 -0400)
ChangeLog
configure.ac
doc/config_changes.txt
doc/default_snort_manual.html
doc/default_snort_manual.pdf
src/framework/Makefile.am
src/framework/api_options.h.in [new file with mode: 0644]
src/main/build.h

index f601ac2f8a0e453446d81675c5f8dbfae3ced75d..b2575dafee0356d95f26300317f7c3eb70ae5389 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,7 @@
-Pending - build 144
+15/03/31 - build 144
 
+-- reworked autotools generation of api_options.h
+-- updated default manuals
 -- ported dns inspector
 
 15/03/26 - build 143
index be9a2884c9be23856dd77fb47aaa5f393368ad2a..3c72cc6bea622a79eddd5a3b1abd57675e9085a8 100644 (file)
@@ -31,7 +31,7 @@ AC_PREREQ([2.69])
 
 AC_CONFIG_SRCDIR([src/main.h])
 AC_CONFIG_MACRO_DIR([m4])
-AC_CONFIG_HEADERS([config.h])
+AC_CONFIG_HEADERS([config.h src/framework/api_options.h])
 
 AM_INIT_AUTOMAKE
 
@@ -77,8 +77,7 @@ API_OPTIONS=""
 # API_OPTIONS="$API_OPTIONS option-name"
 
 # API_OPTIONS is #defined in config.h but that file is not exported so it
-# is also #defined in api_options.h which is installed by
-# src/framework/Makefile.am.
+# is also #defined in api_options.h.
 
 #--------------------------------------------------------------------------
 # host magic :(
index da36cf396e6a8efa9fb42365163b587ae4f14d34..45d1d500b188398ac61f0ce56f7c0d48ab4ad439 100644 (file)
@@ -66,6 +66,7 @@ change -> detection: 'max-pattern-len' ==> 'max_pattern_len'
 change -> detection: 'search-method' ==> 'search_method'
 change -> detection: 'search-optimize' ==> 'search_optimize'
 change -> detection: 'split-any-any' ==> 'split_any_any'
+change -> dns: 'ports' ==> 'bindings'
 change -> event_filter: 'gen_id' ==> 'gid'
 change -> event_filter: 'sig_id' ==> 'sid'
 change -> event_filter: 'threshold' ==> 'event_filter'
@@ -229,6 +230,9 @@ deleted -> csv: '<filename> can no longer be specific'
 deleted -> csv: 'default'
 deleted -> csv: 'trheader'
 deleted -> detection: 'mwm'
+deleted -> dns: 'enable_experimental_types'
+deleted -> dns: 'enable_obsolete_types'
+deleted -> dns: 'enable_rdata_overflow'
 deleted -> fast: '<filename> can no longer be specific'
 deleted -> frag3_engine: 'detect_anomalies'
 deleted -> frag3_global: 'disabled'
@@ -252,6 +256,7 @@ deleted -> rule_state: 'action'
 deleted -> sfportscan: 'detect_ack_scans'
 deleted -> sfportscan: 'disabled'
 deleted -> sfportscan: 'logfile'
+deleted -> ssh: 'autodetect'
 deleted -> ssh: 'enable_badmsgdir'
 deleted -> ssh: 'enable_paysize'
 deleted -> ssh: 'enable_protomismatch'
index a4ff8710ae871b7f9d35eaa17b5b7dd740a9dee3..5379d3e1dfc641ac3d8d82e89bf81812b0fabc58 100644 (file)
@@ -781,7 +781,7 @@ asciidoc.install(2);
 <div class="literalblock">\r
 <div class="content">\r
 <pre><code> ,,_     -*&gt; Snort++ &lt;*-\r
-o"  )~   Version 3.0.0-a1 (Build 140) from 2.9.6-9\r
+o"  )~   Version 3.0.0-a1 (Build 144) from 2.9.6-9\r
  ''''    By Martin Roesch &amp; The Snort Team\r
          http://snort.org/contact#team\r
          Copyright (C) 2014-2015 Cisco and/or its affiliates. All rights reserved.\r
@@ -1338,13 +1338,29 @@ ln -s $my_path/conf $my_path/etc</code></pre>
 </li>\r
 <li>\r
 <p>\r
-You can also specify a cmake project generator or use ccmake:\r
+You can also specify a cmake project generator:\r
 </p>\r
 <div class="literalblock">\r
 <div class="content">\r
 <pre><code>./configure_cmake.sh --generator=Xcode --prefix=$my_path</code></pre>\r
 </div></div>\r
 </li>\r
+<li>\r
+<p>\r
+Or use ccmake directly to configure and generate from an arbitrary build\r
+   directory like one of these:\r
+</p>\r
+<div class="literalblock">\r
+<div class="content">\r
+<pre><code>ccmake -G Xcode /path/to/Snort++/tree\r
+open snort.xcodeproj</code></pre>\r
+</div></div>\r
+<div class="literalblock">\r
+<div class="content">\r
+<pre><code>ccmake -G "Eclipse CDT4 - Unix Makefiles" /path/to/Snort++/tree\r
+run eclipse and do File &gt; Import &gt; Existing Eclipse Project</code></pre>\r
+</div></div>\r
+</li>\r
 </ol></div>\r
 </li>\r
 </ul></div>\r
@@ -1962,7 +1978,7 @@ bool <strong>daq.no_promisc</strong> = false: whether to put DAQ device into pro
 </li>\r
 <li>\r
 <p>\r
-string <strong>daq.type</strong> = pcap: select type of DAQ\r
+string <strong>daq.type</strong>: select type of DAQ\r
 </p>\r
 </li>\r
 <li>\r
@@ -2331,12 +2347,12 @@ addr <strong>hosts[].ip</strong> = 0.0.0.0/32: hosts address / cidr
 </li>\r
 <li>\r
 <p>\r
-enum <strong>hosts[].frag_policy</strong> = linux: defragmentation policy { unknown | first | linux | bsd | bsd_right |last | windows | solaris }\r
+enum <strong>hosts[].frag_policy</strong>: defragmentation policy { first | linux | bsd | bsd_right | last | windows | solaris }\r
 </p>\r
 </li>\r
 <li>\r
 <p>\r
-enum <strong>hosts[].tcp_policy</strong> = linux: tcp reassembly policy { unknown | first | last | bsd | linux | old-linux | windows | win-2003 | vista | solaris | hpux | hpux10 | irix | macos }\r
+enum <strong>hosts[].tcp_policy</strong>: tcp reassembly policy { first | last | linux | old_linux | bsd | macos | solaris | irix | hpux11 | hpux10 | windows | win_2003 | vista | proxy }\r
 </p>\r
 </li>\r
 <li>\r
@@ -2379,7 +2395,7 @@ string <strong>ips.include</strong>: legacy snort rules and includes
 </li>\r
 <li>\r
 <p>\r
-enum <strong>ips.mode</strong> = tap: set policy mode { tap | inline | inline-test }\r
+enum <strong>ips.mode</strong>: set policy mode { tap | inline | inline-test }\r
 </p>\r
 </li>\r
 <li>\r
@@ -2576,11 +2592,6 @@ enum <strong>ppm.pkt_log</strong> = none: log event if max_pkt_time is exceeded
 </li>\r
 <li>\r
 <p>\r
-bool <strong>ppm.debug_pkts</strong> = false: enable packet debug\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
 int <strong>ppm.max_rule_time</strong> = 0: enable rule latency thresholding (usec), 0 = off { 0: }\r
 </p>\r
 </li>\r
@@ -2604,11 +2615,6 @@ int <strong>ppm.suspend_timeout</strong> = 60: seconds to suspend rule, 0 = perm
 enum <strong>ppm.rule_log</strong> = none: enable event logging for suspended rules { none|log|alert|both }\r
 </p>\r
 </li>\r
-<li>\r
-<p>\r
-bool <strong>ppm.debug_rules</strong> = false: enable rule debug\r
-</p>\r
-</li>\r
 </ul></div>\r
 <div class="paragraph"><p>Rules:</p></div>\r
 <div class="ulist"><ul>\r
@@ -2695,7 +2701,7 @@ bool <strong>process.utc</strong> = false: use UTC instead of local time for tim
 <div class="ulist"><ul>\r
 <li>\r
 <p>\r
-int <strong>profile.rules.count</strong> = -1: print results to given level (-1 = all, 0 = off?) { -1: }\r
+int <strong>profile.rules.count</strong> = -1: print results to given level (-1 = all, 0 = off) { -1: }\r
 </p>\r
 </li>\r
 <li>\r
@@ -2705,7 +2711,7 @@ enum <strong>profile.rules.sort</strong> = avg_ticks: sort by given field { chec
 </li>\r
 <li>\r
 <p>\r
-int <strong>profile.modules.count</strong> = -1: print results to given level (-1 = all, 0 = off?) { -1: }\r
+int <strong>profile.modules.count</strong> = -1: print results to given level (-1 = all, 0 = off) { -1: }\r
 </p>\r
 </li>\r
 <li>\r
@@ -3035,7 +3041,7 @@ string <strong>snort.-S</strong>: &lt;n=v&gt; set rules file variable n equal to
 </li>\r
 <li>\r
 <p>\r
-int <strong>snort.-s</strong>: &lt;snap&gt; (same as --snaplen) { 68:65535 }\r
+int <strong>snort.-s</strong> = 1514: &lt;snap&gt; (same as --snaplen) { 68:65535 }\r
 </p>\r
 </li>\r
 <li>\r
@@ -3095,7 +3101,8 @@ implied <strong>snort.-y</strong>: include year in timestamp in the alert and lo
 </li>\r
 <li>\r
 <p>\r
-int <strong>snort.-z</strong>: &lt;count&gt; maximum number of packet threads (same as --max-packet-threads) { 1: }\r
+int <strong>snort.-z</strong> = 1: &lt;count&gt; maximum number of packet threads (same as --max-packet-threads)\r
+        0 gets the number of CPU cores reported by the system { 0: }\r
 </p>\r
 </li>\r
 <li>\r
@@ -3110,7 +3117,7 @@ string <strong>snort.--bpf</strong>: &lt;filter options&gt; are standard BPF opt
 </li>\r
 <li>\r
 <p>\r
-string <strong>snort.--c2x</strong>: output hex for given char\r
+string <strong>snort.--c2x</strong>: output hex for given char (see also --x2c)\r
 </p>\r
 </li>\r
 <li>\r
@@ -3270,7 +3277,8 @@ implied <strong>snort.--markup</strong>: output help in asciidoc compatible form
 </li>\r
 <li>\r
 <p>\r
-int <strong>snort.--max-packet-threads</strong>: &lt;count&gt; configure maximum number of packet threads (same as -z) { 0: }\r
+int <strong>snort.--max-packet-threads</strong> = 1: &lt;count&gt; configure maximum number of packet threads (same as -z)\r
+        0 gets the number of CPU cores reported by the system { 0: }\r
 </p>\r
 </li>\r
 <li>\r
@@ -3390,7 +3398,7 @@ int <strong>snort.--skip</strong>: &lt;n&gt; skip 1st n packets { 0: }
 </li>\r
 <li>\r
 <p>\r
-int <strong>snort.--snaplen</strong>: &lt;snap&gt; set snaplen of packet (same as -s) { 68:65535 }\r
+int <strong>snort.--snaplen</strong> = 1514: &lt;snap&gt; set snaplen of packet (same as -s) { 68:65535 }\r
 </p>\r
 </li>\r
 <li>\r
@@ -3420,17 +3428,47 @@ implied <strong>snort.--warn-all</strong>: enable all warnings
 </li>\r
 <li>\r
 <p>\r
+implied <strong>snort.--warn-conf</strong>: warn about configuration issues\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
+implied <strong>snort.--warn-daq</strong>: warn about DAQ issues, usually related to mode\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
 implied <strong>snort.--warn-flowbits</strong>: warn about flowbits that are checked but not set and vice-versa\r
 </p>\r
 </li>\r
 <li>\r
 <p>\r
-implied <strong>snort.--warn-unknown</strong>: warn about unknown symbols in your config\r
+implied <strong>snort.--warn-hosts</strong>: warn about host table issues\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
+implied <strong>snort.--warn-rules</strong>: warn about duplicate rules and rule parsing issues\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
+implied <strong>snort.--warn-scripts</strong>: warn about issues discovered while processing Lua scripts\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
+implied <strong>snort.--warn-symbols</strong>: warn about unknown symbols in your Lua config\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
+implied <strong>snort.--warn-vars</strong>: warn about variable definition and usage issues\r
 </p>\r
 </li>\r
 <li>\r
 <p>\r
-int <strong>snort.--x2c</strong>: output ASCII char for given hex\r
+int <strong>snort.--x2c</strong>: output ASCII char for given hex (see also --c2x)\r
 </p>\r
 </li>\r
 </ul></div>\r
@@ -5045,7 +5083,7 @@ mac <strong>arp_spoof.hosts[].mac</strong>: host mac address
 <div class="ulist"><ul>\r
 <li>\r
 <p>\r
-int <strong>binder[].when.policy_id</strong>: unique ID for selection of this config by external logic { 0: }\r
+int <strong>binder[].when.policy_id</strong> = 0: unique ID for selection of this config by external logic { 0: }\r
 </p>\r
 </li>\r
 <li>\r
@@ -5105,7 +5143,7 @@ string <strong>binder[].use.type</strong>: select module for binding
 </li>\r
 <li>\r
 <p>\r
-string <strong>binder[].use.name</strong> = defaults to type: symbol name\r
+string <strong>binder[].use.name</strong>: symbol name (defaults to type)\r
 </p>\r
 </li>\r
 </ul></div>\r
@@ -5134,6 +5172,37 @@ string <strong>binder[].use.name</strong> = defaults to type: symbol name
 </ul></div>\r
 </div>\r
 <div class="sect2">\r
+<h3 id="_dns">dns</h3>\r
+<div class="paragraph"><p>What: dns inspection</p></div>\r
+<div class="paragraph"><p>Type: inspector</p></div>\r
+<div class="paragraph"><p>Rules:</p></div>\r
+<div class="ulist"><ul>\r
+<li>\r
+<p>\r
+<strong>131:1</strong> (dns) Obsolete DNS RR Types\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
+<strong>131:2</strong> (dns) Experimental DNS RR Types\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
+<strong>131:3</strong> (dns) DNS Client rdata txt Overflow\r
+</p>\r
+</li>\r
+</ul></div>\r
+<div class="paragraph"><p>Peg counts:</p></div>\r
+<div class="ulist"><ul>\r
+<li>\r
+<p>\r
+<strong>dns.packets</strong>: total packets\r
+</p>\r
+</li>\r
+</ul></div>\r
+</div>\r
+<div class="sect2">\r
 <h3 id="_ftp_data">ftp_data</h3>\r
 <div class="paragraph"><p>What: FTP data channel handler</p></div>\r
 <div class="paragraph"><p>Type: inspector</p></div>\r
@@ -6672,6 +6741,70 @@ bool <strong>port_scan.logfile</strong> = false: write scan events to file
 </ul></div>\r
 </div>\r
 <div class="sect2">\r
+<h3 id="_ssh">ssh</h3>\r
+<div class="paragraph"><p>What: ssh inspection</p></div>\r
+<div class="paragraph"><p>Type: inspector</p></div>\r
+<div class="paragraph"><p>Configuration:</p></div>\r
+<div class="ulist"><ul>\r
+<li>\r
+<p>\r
+int <strong>ssh.max_encrypted_packets</strong> = 25: ignore session after this many encrypted packets { 0:65535 }\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
+int <strong>ssh.max_client_bytes</strong> = 19600: number of unanswered bytes before alerting on challenge-response overflow or CRC32 { 0:65535 }\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
+int <strong>ssh.max_server_version_len</strong> = 80: limit before alerting on secure CRT server version string overflow { 0:255 }\r
+</p>\r
+</li>\r
+</ul></div>\r
+<div class="paragraph"><p>Rules:</p></div>\r
+<div class="ulist"><ul>\r
+<li>\r
+<p>\r
+<strong>128:1</strong> (ssh) Challenge-Response Overflow exploit\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
+<strong>128:2</strong> (ssh) SSH1 CRC32 exploit\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
+<strong>128:3</strong> (ssh) Server version string overflow\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
+<strong>128:5</strong> (ssh) Bad message direction\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
+<strong>128:6</strong> (ssh) Payload size incorrect for the given payload\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
+<strong>128:7</strong> (ssh) Failed to detect SSH version string\r
+</p>\r
+</li>\r
+</ul></div>\r
+<div class="paragraph"><p>Peg counts:</p></div>\r
+<div class="ulist"><ul>\r
+<li>\r
+<p>\r
+<strong>ssh.packets</strong>: total packets\r
+</p>\r
+</li>\r
+</ul></div>\r
+</div>\r
+<div class="sect2">\r
 <h3 id="_stream">stream</h3>\r
 <div class="paragraph"><p>What: common flow tracking</p></div>\r
 <div class="paragraph"><p>Type: inspector</p></div>\r
@@ -6679,7 +6812,7 @@ bool <strong>port_scan.logfile</strong> = false: write scan events to file
 <div class="ulist"><ul>\r
 <li>\r
 <p>\r
-int <strong>stream.icmp_cache.memcap</strong>: maximum cache memory { 0: }\r
+int <strong>stream.icmp_cache.memcap</strong> = 0: maximum cache memory { 0: }\r
 </p>\r
 </li>\r
 <li>\r
@@ -6699,7 +6832,7 @@ int <strong>stream.icmp_cache.max_sessions</strong> = 262144: maximum simultaneo
 </li>\r
 <li>\r
 <p>\r
-int <strong>stream.ip_cache.memcap</strong>: maximum cache memory { 0: }\r
+int <strong>stream.ip_cache.memcap</strong> = 0: maximum cache memory { 0: }\r
 </p>\r
 </li>\r
 <li>\r
@@ -6719,7 +6852,7 @@ int <strong>stream.ip_cache.max_sessions</strong> = 262144: maximum simultaneous
 </li>\r
 <li>\r
 <p>\r
-int <strong>stream.tcp_cache.memcap</strong>: maximum cache memory { 0: }\r
+int <strong>stream.tcp_cache.memcap</strong> = 0: maximum cache memory { 0: }\r
 </p>\r
 </li>\r
 <li>\r
@@ -6739,7 +6872,7 @@ int <strong>stream.tcp_cache.max_sessions</strong> = 262144: maximum simultaneou
 </li>\r
 <li>\r
 <p>\r
-int <strong>stream.udp_cache.memcap</strong>: maximum cache memory { 0: }\r
+int <strong>stream.udp_cache.memcap</strong> = 0: maximum cache memory { 0: }\r
 </p>\r
 </li>\r
 <li>\r
@@ -7025,7 +7158,7 @@ int <strong>stream_tcp.max_pdu</strong> = 16384: maximum reassembled PDU size {
 </li>\r
 <li>\r
 <p>\r
-enum <strong>stream_tcp.policy</strong> = linux: determines operating system characteristics like reassembly { first | last | linux | old-linux | bsd | macos | solaris | irix | hpux | hpux10 | windows | win-2003 | vista | proxy }\r
+enum <strong>stream_tcp.policy</strong> = bsd: determines operating system characteristics like reassembly { first | last | linux | old_linux | bsd | macos | solaris | irix | hpux11 | hpux10 | windows | win_2003 | vista | proxy }\r
 </p>\r
 </li>\r
 <li>\r
@@ -7511,7 +7644,7 @@ parse.</p></div>
 <div class="ulist"><ul>\r
 <li>\r
 <p>\r
-bool <strong>react.msg</strong>:  use rule message in response page\r
+bool <strong>react.msg</strong> = false:  use rule msg in response page instead of default message\r
 </p>\r
 </li>\r
 <li>\r
@@ -7614,7 +7747,7 @@ int <strong>base64_decode.bytes</strong>: Number of base64 encoded bytes to deco
 </li>\r
 <li>\r
 <p>\r
-int <strong>base64_decode.offset</strong>: Bytes past start of buffer to start decoding. { 0: }\r
+int <strong>base64_decode.offset</strong> = 0: Bytes past start of buffer to start decoding. { 0: }\r
 </p>\r
 </li>\r
 <li>\r
@@ -7665,12 +7798,12 @@ implied <strong>byte_extract.relative</strong>: offset from cursor instead of st
 </li>\r
 <li>\r
 <p>\r
-int <strong>byte_extract.multiplier</strong>: scale extracted value by given amount { 1:65535 }\r
+int <strong>byte_extract.multiplier</strong> = 1: scale extracted value by given amount { 1:65535 }\r
 </p>\r
 </li>\r
 <li>\r
 <p>\r
-int <strong>byte_extract.align</strong>: round the number of converted bytes up to the next 2- or 4-byte boundary { 0:4 }\r
+int <strong>byte_extract.align</strong> = 0: round the number of converted bytes up to the next 2- or 4-byte boundary { 0:4 }\r
 </p>\r
 </li>\r
 <li>\r
@@ -7738,17 +7871,17 @@ implied <strong>byte_jump.from_beginning</strong>: jump from start of buffer ins
 </li>\r
 <li>\r
 <p>\r
-int <strong>byte_jump.multiplier</strong>: scale extracted value by given amount { 1:65535 }\r
+int <strong>byte_jump.multiplier</strong> = 1: scale extracted value by given amount { 1:65535 }\r
 </p>\r
 </li>\r
 <li>\r
 <p>\r
-int <strong>byte_jump.align</strong>: round the number of converted bytes up to the next 2- or 4-byte boundary { 0:4 }\r
+int <strong>byte_jump.align</strong> = 0: round the number of converted bytes up to the next 2- or 4-byte boundary { 0:4 }\r
 </p>\r
 </li>\r
 <li>\r
 <p>\r
-int <strong>byte_jump.post_offset</strong>: also skip forward or backwards (positive of negative value) this number of bytes { -65535:65535 }\r
+int <strong>byte_jump.post_offset</strong> = 0: also skip forward or backwards (positive of negative value) this number of bytes { -65535:65535 }\r
 </p>\r
 </li>\r
 <li>\r
@@ -7892,12 +8025,12 @@ implied <strong>content.fast_pattern</strong>: use this content in the fast patt
 </li>\r
 <li>\r
 <p>\r
-int <strong>content.fast_pattern_offset</strong>: number of leading characters of this content the fast pattern matcher should exclude\r
+int <strong>content.fast_pattern_offset</strong> = 0: number of leading characters of this content the fast pattern matcher should exclude { 0: }\r
 </p>\r
 </li>\r
 <li>\r
 <p>\r
-int <strong>content.fast_pattern_length</strong>: maximum number of characters from this content the fast pattern matcher should use\r
+int <strong>content.fast_pattern_length</strong>: maximum number of characters from this content the fast pattern matcher should use { 1: }\r
 </p>\r
 </li>\r
 <li>\r
@@ -8861,7 +8994,7 @@ bool <strong>alert_test.msg</strong> = false: include alert msg
 <div class="ulist"><ul>\r
 <li>\r
 <p>\r
-bool <strong>log_codecs.file</strong> = stdout: output to log_codecs.txt instead of stdout\r
+bool <strong>log_codecs.file</strong> = false: output to log_codecs.txt instead of stdout\r
 </p>\r
 </li>\r
 <li>\r
@@ -10026,622 +10159,498 @@ have a .lua or .rules extension appended to the original filename.</p></div>
 </ul></div>\r
 </div>\r
 <div class="sect2">\r
-<h3 id="_optional_features">Optional Features</h3>\r
-<div class="paragraph"><p>Listed below are the features that must be explicitly enabled so they are built\r
-into the Snort binary.  For a full list of build features, run ./configure\r
---help.</p></div>\r
-<div class="ulist"><ul>\r
-<li>\r
-<p>\r
-<strong>--enable-ppm</strong>: enable packet and rule performance monitoring and coarse\r
-   latency enforcement.\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>--enable-perf-profiling</strong>: enable module and rule performance profiling.\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>--enable-shell</strong>: enable local and remote command line shell support.\r
-</p>\r
-</li>\r
-</ul></div>\r
+<h3 id="_usage_2">Usage</h3>\r
+<div class="paragraph"><p>For the following examples "$my_path" is assumed to be the path to\r
+the Snort++ install directory. Additionally, it is assumed that\r
+"$my_path/bin" is in your PATH.</p></div>\r
+<div class="sect3">\r
+<h4 id="_environment">Environment</h4>\r
+<div class="paragraph"><p>LUA_PATH is used directly by Lua to load and run required libraries.\r
+SNORT_LUA_PATH is used by Snort to load supplemental configuration files.</p></div>\r
+<div class="literalblock">\r
+<div class="content">\r
+<pre><code>export LUA_PATH=$my_path/include/snort/lua/\?.lua\;\;\r
+export SNORT_LUA_PATH=$my_path/etc/snort</code></pre>\r
+</div></div>\r
 </div>\r
-<div class="sect2">\r
-<h3 id="_environment_variables">Environment Variables</h3>\r
-<div class="ulist"><ul>\r
-<li>\r
-<p>\r
-<strong>HOSTTYPE</strong>: optional string that is output with the version at end of\r
-  line.\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>LUA_PATH</strong>: you must export as follows so LuaJIT can find required\r
-  files.\r
-</p>\r
+<div class="sect3">\r
+<h4 id="_help_2">Help</h4>\r
+<div class="paragraph"><p>Print the help summary:</p></div>\r
 <div class="literalblock">\r
 <div class="content">\r
-<pre><code>LUA_PATH=$install_dir/include/snort/lua/\?.lua\;\;</code></pre>\r
+<pre><code>snort --help</code></pre>\r
 </div></div>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>SNORT_IGNORE</strong>: the list of symbols Snort should ignore when parsing the\r
-  Lua conf.  Unknown symbols not in SNORT_IGNORE will cause warnings with\r
-  --warn-unknown or fatals with --warn-unknown --pedantic.\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>SNORT_LUA_PATH</strong>: an optional path where Snort can find supplemental conf\r
-  files such as classification.lua.\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>SNORT_PROMPT</strong>: the character sequence that is printed at startup,\r
-  shutdown, and in the shell.  The default is the mini-pig: o")~ .\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>SNORT_PLUGIN_PATH</strong>: an optional path where Snort can find supplemental\r
-  shared libraries.  This is only used when Snort is building manuals.\r
-  Modules in supplemental shared libraries will be added to the manuals.\r
-</p>\r
-</li>\r
-</ul></div>\r
+<div class="paragraph"><p>Get help on a specific module ("stream", for example):</p></div>\r
+<div class="literalblock">\r
+<div class="content">\r
+<pre><code>snort --help-module stream</code></pre>\r
+</div></div>\r
+<div class="paragraph"><p>Get help on the "-A" command line option:</p></div>\r
+<div class="literalblock">\r
+<div class="content">\r
+<pre><code>snort --help-options A</code></pre>\r
+</div></div>\r
+<div class="paragraph"><p>Grep for help on threads:</p></div>\r
+<div class="literalblock">\r
+<div class="content">\r
+<pre><code>snort --help-config | grep thread</code></pre>\r
+</div></div>\r
+<div class="paragraph"><p>Output help on "rule" options in AsciiDoc format:</p></div>\r
+<div class="literalblock">\r
+<div class="content">\r
+<pre><code>snort --markup --help-options rule</code></pre>\r
+</div></div>\r
+<div class="admonitionblock">\r
+<table><tr>\r
+<td class="icon">\r
+<img src="./images/icons/note.png" alt="Note" />\r
+</td>\r
+<td class="content">Snort++ stops reading command-line options after the "--help-<strong>" and\r
+"--list-</strong>" options, so any other options should be placed before them.</td>\r
+</tr></table>\r
 </div>\r
-<div class="sect2">\r
-<h3 id="_command_line_options">Command Line Options</h3>\r
-<div class="ulist"><ul>\r
-<li>\r
-<p>\r
-<strong>--alert-before-pass</strong> process alert, drop, sdrop, or reject before pass; default is pass before alert, drop,&#8230;\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>--bpf</strong> &lt;filter options&gt; are standard BPF options, as seen in TCPDump\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>--c2x</strong> output hex for given char\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>--create-pidfile</strong> create PID file, even when not in Daemon mode\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>--daq</strong> &lt;type&gt; select packet acquisition module (default is pcap)\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>--daq-dir</strong> &lt;dir&gt; tell snort where to find desired DAQ\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>--daq-list</strong> list packet acquisition modules available in optional dir, default is static modules only\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>--daq-mode</strong> &lt;mode&gt; select the DAQ operating mode\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>--daq-var</strong> &lt;name=value&gt; specify extra DAQ configuration variable\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>--dirty-pig</strong> don&#8217;t flush packets on shutdown\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>--dump-builtin-rules</strong> [&lt;module prefix&gt;] output stub rules for selected modules\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>--dump-defaults</strong> [&lt;module prefix&gt;] output module defaults in Lua format\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>--dump-dynamic-rules</strong> output stub rules for all loaded rules libraries\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>--dump-version</strong> output the version, the whole version, and only the version\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>--enable-inline-test</strong> enable Inline-Test Mode Operation\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>--help</strong> list command line options\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>--help-commands</strong> [&lt;module prefix&gt;] output matching commands\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>--help-config</strong> [&lt;module prefix&gt;] output matching config options\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>--help-counts</strong> [&lt;module prefix&gt;] output matching peg counts\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>--help-module</strong> &lt;module&gt; output description of given module\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>--help-modules</strong> list all available modules with brief help\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>--help-options</strong> &lt;option prefix&gt; output matching command line option quick help (same as -?)\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>--help-plugins</strong> list all available plugins with brief help\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>--help-signals</strong> dump available control signals\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>--id-subdir</strong> create/use instance subdirectories in logdir instead of instance filename prefix\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>--id-zero</strong> use id prefix / subdirectory even with one packet thread\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>--list-buffers</strong> output available inspection buffers\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>--list-builtin</strong> &lt;module prefix&gt; output matching builtin rules\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>--list-gids</strong> [&lt;module prefix&gt;] output matching generators\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>--list-modules</strong> [&lt;module type&gt;] list all known modules of given type\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>--list-plugins</strong> list all known plugins\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>--logid</strong> &lt;0xid&gt; log Identifier to uniquely id events for multiple snorts (same as -G)\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>--lua</strong> &lt;chunk&gt; extend/override conf with chunk; may be repeated\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>--markup</strong> output help in asciidoc compatible format\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>--max-packet-threads</strong> &lt;count&gt; configure maximum number of packet threads (same as -z)\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>--nolock-pidfile</strong> do not try to lock Snort PID file\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>--nostamps</strong> don&#8217;t include timestamps in log file names\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>--pause</strong> wait for resume/quit command before processing packets/terminating\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>--pcap-dir</strong> &lt;dir&gt; a directory to recurse to look for pcaps - read mode is implied\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>--pcap-file</strong> &lt;file&gt; file that contains a list of pcaps to read - read mode is implied\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>--pcap-filter</strong> &lt;filter&gt; filter to apply when getting pcaps from file or directory\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>--pcap-list</strong> &lt;list&gt; a space separated list of pcaps to read - read mode is implied\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>--pcap-loop</strong> &lt;count&gt; read all pcaps &lt;count&gt; times;  0 will read until Snort is terminated\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>--pcap-no-filter</strong> reset to use no filter when getting pcaps from file or directory\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>--pcap-reload</strong> if reading multiple pcaps, reload snort config between pcaps\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>--pcap-reset</strong> ignored - for REG_TEST only\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>--pcap-show</strong> print a line saying what pcap is currently being read\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>--pedantic</strong> warnings are fatal\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>--plugin-path</strong> &lt;path&gt; where to find plugins\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>--process-all-events</strong> process all action groups\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>--rule</strong> &lt;rules&gt; to be added to configuration; may be repeated\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>--rule-to-hex</strong> output so rule header to stdout for text rule on stdin\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>--rule-to-text</strong> output plain so rule header to stdout for text rule on stdin\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>--run-prefix</strong> &lt;pfx&gt; prepend this to each output file\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>--script-path</strong> &lt;path&gt; where to find luajit scripts\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>--shell</strong> enable the interactive command line\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>--show-plugins</strong> list module and plugin versions\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>--skip</strong> &lt;n&gt; skip 1st n packets\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>--snaplen</strong> &lt;snap&gt; set snaplen of packet (same as -s)\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>--stdin-rules</strong> read rules from stdin until EOF or a line starting with END is read\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>--treat-drop-as-alert</strong> converts drop, sdrop, and reject rules into alert rules during startup\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>--treat-drop-as-ignore</strong> use drop, sdrop, and reject rules to ignore session traffic when not inline\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>--version</strong> show version number (same as -V)\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>--warn-all</strong> enable all warnings\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>--warn-flowbits</strong> warn about flowbits that are checked but not set and vice-versa\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>--warn-unknown</strong> warn about unknown symbols in your config\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>--x2c</strong> output ASCII char for given hex\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>-?</strong> &lt;option prefix&gt; output matching command line option quick help (same as --help-options)\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>-A</strong> &lt;mode&gt; set alert mode: none, cmg, or alert_*\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>-B</strong> &lt;mask&gt; obfuscated IP addresses in alerts and packet dumps using CIDR mask\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>-C</strong> print out payloads with character data only (no hex)\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>-D</strong> run Snort in background (daemon) mode\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>-E</strong> enable daemon restart\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>-G</strong> &lt;0xid&gt; (same as --logid)\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>-H</strong> make hash tables deterministic\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>-K</strong> &lt;mode&gt; logging mode\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>-M</strong> log messages to syslog (not alerts)\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>-N</strong> ignored - for REG_TEST only\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>-O</strong> obfuscate the logged IP addresses\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>-Q</strong> enable inline mode operation\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>-R</strong> &lt;rules&gt; include this rules file in the default policy\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>-S</strong> &lt;n=v&gt; set rules file variable n equal to value v\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>-T</strong> test and report on the current Snort configuration\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>-U</strong> use UTC for timestamps\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>-V</strong> (same as --version)\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>-W</strong> lists available interfaces\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>-X</strong> dump the raw packet data starting at the link layer\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>-c</strong> &lt;conf&gt; use this configuration\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>-d</strong> dump the Application Layer\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>-e</strong> display the second layer header info\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>-f</strong> turn off fflush() calls after binary log writes\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>-g</strong> &lt;gname&gt; run snort gid as &lt;gname&gt; group (or gid) after initialization\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>-i</strong> &lt;iface&gt;&#8230; list of interfaces\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>-j</strong> &lt;port&gt; to listen for telnet connections\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>-k</strong> &lt;mode&gt; checksum mode (all,noip,notcp,noudp,noicmp,none)\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>-l</strong> &lt;logdir&gt; log to this directory instead of current directory\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>-m</strong> &lt;umask&gt; set umask = &lt;umask&gt;\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>-n</strong> &lt;count&gt; stop after count packets\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-<strong>-q</strong> quiet mode - Don&#8217;t show banner and status report\r
-</p>\r
-</li>\r
+</div>\r
+<div class="sect3">\r
+<h4 id="_sniffing_and_logging">Sniffing and Logging</h4>\r
+<div class="paragraph"><p>Read a pcap:</p></div>\r
+<div class="literalblock">\r
+<div class="content">\r
+<pre><code>snort -r /path/to/my.pcap</code></pre>\r
+</div></div>\r
+<div class="paragraph"><p>Dump the packets to stdout:</p></div>\r
+<div class="literalblock">\r
+<div class="content">\r
+<pre><code>snort -r /path/to/my.pcap -K text</code></pre>\r
+</div></div>\r
+<div class="paragraph"><p>Dump packets with application data and layer 2 headers</p></div>\r
+<div class="literalblock">\r
+<div class="content">\r
+<pre><code>snort -r /path/to/my.pcap -K text -d -e</code></pre>\r
+</div></div>\r
+<div class="admonitionblock">\r
+<table><tr>\r
+<td class="icon">\r
+<img src="./images/icons/note.png" alt="Note" />\r
+</td>\r
+<td class="content">Command line options must be specified separately. "snort -de" won&#8217;t\r
+work.  You can still concatenate options and their arguments, however, so\r
+"snort -Ktext" will work.</td>\r
+</tr></table>\r
+</div>\r
+<div class="paragraph"><p>Dump packets from all pcaps in a directory:</p></div>\r
+<div class="literalblock">\r
+<div class="content">\r
+<pre><code>snort --pcap-dir /path/to/pcap/dir --pcap-filter '*.pcap' -K text -d -e</code></pre>\r
+</div></div>\r
+<div class="paragraph"><p>Log packets to a directory:</p></div>\r
+<div class="literalblock">\r
+<div class="content">\r
+<pre><code>snort --pcap-dir /path/to/pcap/dir --pcap-filter '*.pcap' -K pcap -l /path/to/log/dir</code></pre>\r
+</div></div>\r
+</div>\r
+<div class="sect3">\r
+<h4 id="_configuration_2">Configuration</h4>\r
+<div class="paragraph"><p>Validate a configuration file:</p></div>\r
+<div class="literalblock">\r
+<div class="content">\r
+<pre><code>snort -c $my_path/etc/snort/snort.lua</code></pre>\r
+</div></div>\r
+<div class="paragraph"><p>Validate a configuration file and a separate rules file:</p></div>\r
+<div class="literalblock">\r
+<div class="content">\r
+<pre><code>snort -c $my_path/etc/snort/snort.lua -R $my_path/etc/snort/sample.rules</code></pre>\r
+</div></div>\r
+<div class="paragraph"><p>Read rules from stdin and validate:</p></div>\r
+<div class="literalblock">\r
+<div class="content">\r
+<pre><code>snort -c $my_path/etc/snort/snort.lua --stdin-rules &lt; $my_path/etc/snort/sample.rules</code></pre>\r
+</div></div>\r
+<div class="paragraph"><p>Enable warnings for Lua configurations and make warnings fatal:</p></div>\r
+<div class="literalblock">\r
+<div class="content">\r
+<pre><code>snort -c $my_path/etc/snort/snort.lua --warn-all --pedantic</code></pre>\r
+</div></div>\r
+<div class="paragraph"><p>Tell Snort++ where to look for additional Lua scripts:</p></div>\r
+<div class="literalblock">\r
+<div class="content">\r
+<pre><code>snort --script-path /path/to/script/dir</code></pre>\r
+</div></div>\r
+</div>\r
+<div class="sect3">\r
+<h4 id="_ids_mode">IDS mode</h4>\r
+<div class="paragraph"><p>Run Snort++ in IDS mode, reading packets from a pcap:</p></div>\r
+<div class="literalblock">\r
+<div class="content">\r
+<pre><code>snort -c $my_path/etc/snort/snort.lua -r /path/to/my.pcap</code></pre>\r
+</div></div>\r
+<div class="paragraph"><p>Log any generated alerts to the console using the "-A" option:</p></div>\r
+<div class="literalblock">\r
+<div class="content">\r
+<pre><code>snort -c $my_path/etc/snort/snort.lua -r /path/to/my.pcap -A alert_full</code></pre>\r
+</div></div>\r
+<div class="paragraph"><p>Add or modify a configuration from the command line using the "--lua" option:</p></div>\r
+<div class="literalblock">\r
+<div class="content">\r
+<pre><code>snort -c $my_path/etc/snort/snort.lua -r /path/to/my.pcap -A cmg \\r
+    --lua 'ips = { enable_builtin_rules = true }'</code></pre>\r
+</div></div>\r
+<div class="admonitionblock">\r
+<table><tr>\r
+<td class="icon">\r
+<img src="./images/icons/note.png" alt="Note" />\r
+</td>\r
+<td class="content">The "--lua" option can be specified multiple times.</td>\r
+</tr></table>\r
+</div>\r
+<div class="paragraph"><p>Run Snort++ in IDS mode on an entire directory of pcaps, processing each\r
+input source on a separate thread:</p></div>\r
+<div class="literalblock">\r
+<div class="content">\r
+<pre><code>snort -c $my_path/etc/snort/snort.lua --pcap-dir /path/to/pcap/dir \\r
+    --pcap-filter '*.pcap' --max-packet-threads 8</code></pre>\r
+</div></div>\r
+</div>\r
+</div>\r
+<div class="sect2">\r
+<h3 id="_plugins">Plugins</h3>\r
+<div class="paragraph"><p>Load external plugins and use the "ex" alert:</p></div>\r
+<div class="literalblock">\r
+<div class="content">\r
+<pre><code>snort -c $my_path/etc/snort/snort.lua \\r
+    --plugin-path $my_path/lib/snort_extra \\r
+    -A alert_ex -r /path/to/my.pcap</code></pre>\r
+</div></div>\r
+<div class="paragraph"><p>Test the LuaJIT rule option <em>find</em> loaded from stdin:</p></div>\r
+<div class="literalblock">\r
+<div class="content">\r
+<pre><code>snort -c $my_path/etc/snort/snort.lua \\r
+    --script-path $my_path/lib/snort_extra \\r
+    --stdin-rules -A cmg -r /path/to/my.pcap &lt;&lt; END\r
+alert tcp any any -&gt; any 80 (\r
+    sid:3; msg:"found"; content:"GET";\r
+    find:"pat='HTTP/1%.%d'" ; )\r
+END</code></pre>\r
+</div></div>\r
+</div>\r
+<div class="sect2">\r
+<h3 id="_output_files">Output Files</h3>\r
+<div class="paragraph"><p>To make it simple to configure outputs when you run with multiple packet\r
+threads, output files are not explicitly configured. Instead, you can use\r
+the options below to format the paths:</p></div>\r
+<div class="literalblock">\r
+<div class="content">\r
+<pre><code>&lt;logdir&gt;/[&lt;run_prefix&gt;][&lt;id#&gt;][&lt;X&gt;]&lt;name&gt;</code></pre>\r
+</div></div>\r
+<div class="paragraph"><p>Log to unified in the current directory:</p></div>\r
+<div class="literalblock">\r
+<div class="content">\r
+<pre><code>snort -c $my_path/etc/snort/snort.lua -r /path/to/my.pcap -A unified2</code></pre>\r
+</div></div>\r
+<div class="paragraph"><p>Log to unified in the current directory with a different prefix:</p></div>\r
+<div class="literalblock">\r
+<div class="content">\r
+<pre><code>snort -c $my_path/etc/snort/snort.lua -r /path/to/my.pcap -A unified2 \\r
+    --run-prefix take2</code></pre>\r
+</div></div>\r
+<div class="paragraph"><p>Log to unified in /tmp:</p></div>\r
+<div class="literalblock">\r
+<div class="content">\r
+<pre><code>snort -c $my_path/etc/snort/snort.lua -r /path/to/my.pcap -A unified2 -l /tmp</code></pre>\r
+</div></div>\r
+<div class="paragraph"><p>Run 4 packet threads and log with thread number prefix (0-3):</p></div>\r
+<div class="literalblock">\r
+<div class="content">\r
+<pre><code>snort -c $my_path/etc/snort/snort.lua --pcap-dir /path/to/pcap/dir \\r
+    --pcap-filter '*.pcap' -z 4 -A unified2</code></pre>\r
+</div></div>\r
+<div class="paragraph"><p>Run 4 packet threads and log in thread number subdirs (0-3):</p></div>\r
+<div class="literalblock">\r
+<div class="content">\r
+<pre><code>snort -c $my_path/etc/snort/snort.lua --pcap-dir /path/to/pcap/dir \\r
+    --pcap-filter '*.pcap' -z 4 -A unified2 --id-subdir</code></pre>\r
+</div></div>\r
+<div class="admonitionblock">\r
+<table><tr>\r
+<td class="icon">\r
+<img src="./images/icons/note.png" alt="Note" />\r
+</td>\r
+<td class="content">subdirectories are created automatically if required.  Log filename\r
+is based on module name that writes the file.  All text mode outputs\r
+default to stdout.  These options can be combined.</td>\r
+</tr></table>\r
+</div>\r
+<div class="sect3">\r
+<h4 id="_shell">Shell</h4>\r
+<div class="paragraph"><p>You must build with --enable-shell to make the command line shell available.</p></div>\r
+<div class="paragraph"><p>Enable shell mode:</p></div>\r
+<div class="literalblock">\r
+<div class="content">\r
+<pre><code>snort --shell &lt;args&gt;</code></pre>\r
+</div></div>\r
+<div class="paragraph"><p>You will see the shell mode command prompt, which looks like this:</p></div>\r
+<div class="literalblock">\r
+<div class="content">\r
+<pre><code>o")~</code></pre>\r
+</div></div>\r
+<div class="paragraph"><p>(The prompt can be changed with the SNORT_PROMPT environment variable.)</p></div>\r
+<div class="paragraph"><p>You can pause immediately after loading the configuration and again before\r
+exiting with:</p></div>\r
+<div class="literalblock">\r
+<div class="content">\r
+<pre><code>snort --shell --pause &lt;args&gt;</code></pre>\r
+</div></div>\r
+<div class="paragraph"><p>In that case you must issue the resume() command to continue.  Enter quit()\r
+to terminate Snort or detach() to exit the shell.  You can list the\r
+available commands with help().</p></div>\r
+<div class="paragraph"><p>To enable local telnet access on port 12345:</p></div>\r
+<div class="literalblock">\r
+<div class="content">\r
+<pre><code>snort --shell -j 12345 &lt;args&gt;</code></pre>\r
+</div></div>\r
+<div class="paragraph"><p>The command line interface is still under development.  Suggestions are\r
+welcome.</p></div>\r
+</div>\r
+<div class="sect3">\r
+<h4 id="_signals">Signals</h4>\r
+<div class="admonitionblock">\r
+<table><tr>\r
+<td class="icon">\r
+<img src="./images/icons/note.png" alt="Note" />\r
+</td>\r
+<td class="content">The following examples assume that Snort++ is currently running and\r
+has a process ID of &lt;pid&gt;.</td>\r
+</tr></table>\r
+</div>\r
+<div class="paragraph"><p>Modify and Reload Configuration:</p></div>\r
+<div class="literalblock">\r
+<div class="content">\r
+<pre><code>echo 'suppress = { { gid = 1, sid = 2215 } }' &gt;&gt; $my_path/etc/snort/snort.lua\r
+kill -hup &lt;pid&gt;</code></pre>\r
+</div></div>\r
+<div class="paragraph"><p>Dump stats to stdout:</p></div>\r
+<div class="literalblock">\r
+<div class="content">\r
+<pre><code>kill -usr1 &lt;pid&gt;</code></pre>\r
+</div></div>\r
+<div class="paragraph"><p>Shutdown normally:</p></div>\r
+<div class="literalblock">\r
+<div class="content">\r
+<pre><code>kill -term &lt;pid&gt;</code></pre>\r
+</div></div>\r
+<div class="paragraph"><p>Exit without flushing packets:</p></div>\r
+<div class="literalblock">\r
+<div class="content">\r
+<pre><code>kill -quit &lt;pid&gt;</code></pre>\r
+</div></div>\r
+<div class="paragraph"><p>List available signals:</p></div>\r
+<div class="literalblock">\r
+<div class="content">\r
+<pre><code>snort --help-signals</code></pre>\r
+</div></div>\r
+<div class="admonitionblock">\r
+<table><tr>\r
+<td class="icon">\r
+<img src="./images/icons/note.png" alt="Note" />\r
+</td>\r
+<td class="content">The available signals may vary from platform to platform.</td>\r
+</tr></table>\r
+</div>\r
+</div>\r
+</div>\r
+<div class="sect2">\r
+<h3 id="_optional_features">Optional Features</h3>\r
+<div class="paragraph"><p>Listed below are the features that must be explicitly enabled so they are built\r
+into the Snort binary.  For a full list of build features, run ./configure\r
+--help.</p></div>\r
+<div class="ulist"><ul>\r
 <li>\r
 <p>\r
-<strong>-r</strong> &lt;pcap&gt;&#8230; (same as --pcap-list)\r
+<strong>--enable-ppm</strong>: enable packet and rule performance monitoring and coarse\r
+   latency enforcement.\r
 </p>\r
 </li>\r
 <li>\r
 <p>\r
-<strong>-s</strong> &lt;snap&gt; (same as --snaplen)\r
+<strong>--enable-perf-profiling</strong>: enable module and rule performance profiling.\r
 </p>\r
 </li>\r
 <li>\r
 <p>\r
-<strong>-t</strong> &lt;dir&gt; chroots process to &lt;dir&gt; after initialization\r
+<strong>--enable-shell</strong>: enable local and remote command line shell support.\r
 </p>\r
 </li>\r
+</ul></div>\r
+</div>\r
+<div class="sect2">\r
+<h3 id="_environment_variables">Environment Variables</h3>\r
+<div class="ulist"><ul>\r
 <li>\r
 <p>\r
-<strong>-u</strong> &lt;uname&gt; run snort as &lt;uname&gt; or &lt;uid&gt; after initialization\r
+<strong>HOSTTYPE</strong>: optional string that is output with the version at end of\r
+  line.\r
 </p>\r
 </li>\r
 <li>\r
 <p>\r
-<strong>-v</strong> be verbose\r
+<strong>LUA_PATH</strong>: you must export as follows so LuaJIT can find required\r
+  files.\r
 </p>\r
+<div class="literalblock">\r
+<div class="content">\r
+<pre><code>LUA_PATH=$install_dir/include/snort/lua/\?.lua\;\;</code></pre>\r
+</div></div>\r
 </li>\r
 <li>\r
 <p>\r
-<strong>-w</strong> dump 802.11 management and control frames\r
+<strong>SNORT_IGNORE</strong>: the list of symbols Snort should ignore when parsing the\r
+  Lua conf.  Unknown symbols not in SNORT_IGNORE will cause warnings with\r
+  --warn-unknown or fatals with --warn-unknown --pedantic.\r
 </p>\r
 </li>\r
 <li>\r
 <p>\r
-<strong>-x</strong> same as --pedantic\r
+<strong>SNORT_LUA_PATH</strong>: an optional path where Snort can find supplemental conf\r
+  files such as classification.lua.\r
 </p>\r
 </li>\r
 <li>\r
 <p>\r
-<strong>-y</strong> include year in timestamp in the alert and log files\r
+<strong>SNORT_PROMPT</strong>: the character sequence that is printed at startup,\r
+  shutdown, and in the shell.  The default is the mini-pig: o")~ .\r
 </p>\r
 </li>\r
 <li>\r
 <p>\r
-<strong>-z</strong> &lt;count&gt; maximum number of packet threads (same as --max-packet-threads)\r
+<strong>SNORT_PLUGIN_PATH</strong>: an optional path where Snort can find supplemental\r
+  shared libraries.  This is only used when Snort is building manuals.\r
+  Modules in supplemental shared libraries will be added to the manuals.\r
 </p>\r
 </li>\r
 </ul></div>\r
 </div>\r
 <div class="sect2">\r
+<h3 id="_command_line_options">Command Line Options</h3>\r
+<div class="literalblock">\r
+<div class="content">\r
+<pre><code>        0 gets the number of CPU cores reported by the system\r
+        0 gets the number of CPU cores reported by the system\r
+* *--alert-before-pass* process alert, drop, sdrop, or reject before pass; default is pass before alert, drop,...\r
+* *--bpf* &lt;filter options&gt; are standard BPF options, as seen in TCPDump\r
+* *--c2x* output hex for given char (see also --x2c)\r
+* *--create-pidfile* create PID file, even when not in Daemon mode\r
+* *--daq* &lt;type&gt; select packet acquisition module (default is pcap)\r
+* *--daq-dir* &lt;dir&gt; tell snort where to find desired DAQ\r
+* *--daq-list* list packet acquisition modules available in optional dir, default is static modules only\r
+* *--daq-mode* &lt;mode&gt; select the DAQ operating mode\r
+* *--daq-var* &lt;name=value&gt; specify extra DAQ configuration variable\r
+* *--dirty-pig* don't flush packets on shutdown\r
+* *--dump-builtin-rules* [&lt;module prefix&gt;] output stub rules for selected modules\r
+* *--dump-defaults* [&lt;module prefix&gt;] output module defaults in Lua format\r
+* *--dump-dynamic-rules* output stub rules for all loaded rules libraries\r
+* *--dump-version* output the version, the whole version, and only the version\r
+* *--enable-inline-test* enable Inline-Test Mode Operation\r
+* *--help* list command line options\r
+* *--help-commands* [&lt;module prefix&gt;] output matching commands\r
+* *--help-config* [&lt;module prefix&gt;] output matching config options\r
+* *--help-counts* [&lt;module prefix&gt;] output matching peg counts\r
+* *--help-module* &lt;module&gt; output description of given module\r
+* *--help-modules* list all available modules with brief help\r
+* *--help-options* &lt;option prefix&gt; output matching command line option quick help (same as -?)\r
+* *--help-plugins* list all available plugins with brief help\r
+* *--help-signals* dump available control signals\r
+* *--id-subdir* create/use instance subdirectories in logdir instead of instance filename prefix\r
+* *--id-zero* use id prefix / subdirectory even with one packet thread\r
+* *--list-buffers* output available inspection buffers\r
+* *--list-builtin* &lt;module prefix&gt; output matching builtin rules\r
+* *--list-gids* [&lt;module prefix&gt;] output matching generators\r
+* *--list-modules* [&lt;module type&gt;] list all known modules of given type\r
+* *--list-plugins* list all known plugins\r
+* *--logid* &lt;0xid&gt; log Identifier to uniquely id events for multiple snorts (same as -G)\r
+* *--lua* &lt;chunk&gt; extend/override conf with chunk; may be repeated\r
+* *--markup* output help in asciidoc compatible format\r
+* *--max-packet-threads* &lt;count&gt; configure maximum number of packet threads (same as -z)\r
+* *--nolock-pidfile* do not try to lock Snort PID file\r
+* *--nostamps* don't include timestamps in log file names\r
+* *--pause* wait for resume/quit command before processing packets/terminating\r
+* *--pcap-dir* &lt;dir&gt; a directory to recurse to look for pcaps - read mode is implied\r
+* *--pcap-file* &lt;file&gt; file that contains a list of pcaps to read - read mode is implied\r
+* *--pcap-filter* &lt;filter&gt; filter to apply when getting pcaps from file or directory\r
+* *--pcap-list* &lt;list&gt; a space separated list of pcaps to read - read mode is implied\r
+* *--pcap-loop* &lt;count&gt; read all pcaps &lt;count&gt; times;  0 will read until Snort is terminated\r
+* *--pcap-no-filter* reset to use no filter when getting pcaps from file or directory\r
+* *--pcap-reload* if reading multiple pcaps, reload snort config between pcaps\r
+* *--pcap-reset* ignored - for REG_TEST only\r
+* *--pcap-show* print a line saying what pcap is currently being read\r
+* *--pedantic* warnings are fatal\r
+* *--plugin-path* &lt;path&gt; where to find plugins\r
+* *--process-all-events* process all action groups\r
+* *--rule* &lt;rules&gt; to be added to configuration; may be repeated\r
+* *--rule-to-hex* output so rule header to stdout for text rule on stdin\r
+* *--rule-to-text* output plain so rule header to stdout for text rule on stdin\r
+* *--run-prefix* &lt;pfx&gt; prepend this to each output file\r
+* *--script-path* &lt;path&gt; where to find luajit scripts\r
+* *--shell* enable the interactive command line\r
+* *--show-plugins* list module and plugin versions\r
+* *--skip* &lt;n&gt; skip 1st n packets\r
+* *--snaplen* &lt;snap&gt; set snaplen of packet (same as -s)\r
+* *--stdin-rules* read rules from stdin until EOF or a line starting with END is read\r
+* *--treat-drop-as-alert* converts drop, sdrop, and reject rules into alert rules during startup\r
+* *--treat-drop-as-ignore* use drop, sdrop, and reject rules to ignore session traffic when not inline\r
+* *--version* show version number (same as -V)\r
+* *--warn-all* enable all warnings\r
+* *--warn-conf* warn about configuration issues\r
+* *--warn-daq* warn about DAQ issues, usually related to mode\r
+* *--warn-flowbits* warn about flowbits that are checked but not set and vice-versa\r
+* *--warn-hosts* warn about host table issues\r
+* *--warn-rules* warn about duplicate rules and rule parsing issues\r
+* *--warn-scripts* warn about issues discovered while processing Lua scripts\r
+* *--warn-symbols* warn about unknown symbols in your Lua config\r
+* *--warn-vars* warn about variable definition and usage issues\r
+* *--x2c* output ASCII char for given hex (see also --c2x)\r
+* *-?* &lt;option prefix&gt; output matching command line option quick help (same as --help-options)\r
+* *-A* &lt;mode&gt; set alert mode: none, cmg, or alert_*\r
+* *-B* &lt;mask&gt; obfuscated IP addresses in alerts and packet dumps using CIDR mask\r
+* *-C* print out payloads with character data only (no hex)\r
+* *-D* run Snort in background (daemon) mode\r
+* *-E* enable daemon restart\r
+* *-G* &lt;0xid&gt; (same as --logid)\r
+* *-H* make hash tables deterministic\r
+* *-K* &lt;mode&gt; logging mode\r
+* *-M* log messages to syslog (not alerts)\r
+* *-N* ignored - for REG_TEST only\r
+* *-O* obfuscate the logged IP addresses\r
+* *-Q* enable inline mode operation\r
+* *-R* &lt;rules&gt; include this rules file in the default policy\r
+* *-S* &lt;n=v&gt; set rules file variable n equal to value v\r
+* *-T* test and report on the current Snort configuration\r
+* *-U* use UTC for timestamps\r
+* *-V* (same as --version)\r
+* *-W* lists available interfaces\r
+* *-X* dump the raw packet data starting at the link layer\r
+* *-c* &lt;conf&gt; use this configuration\r
+* *-d* dump the Application Layer\r
+* *-e* display the second layer header info\r
+* *-f* turn off fflush() calls after binary log writes\r
+* *-g* &lt;gname&gt; run snort gid as &lt;gname&gt; group (or gid) after initialization\r
+* *-i* &lt;iface&gt;... list of interfaces\r
+* *-j* &lt;port&gt; to listen for telnet connections\r
+* *-k* &lt;mode&gt; checksum mode (all,noip,notcp,noudp,noicmp,none)\r
+* *-l* &lt;logdir&gt; log to this directory instead of current directory\r
+* *-m* &lt;umask&gt; set umask = &lt;umask&gt;\r
+* *-n* &lt;count&gt; stop after count packets\r
+* *-q* quiet mode - Don't show banner and status report\r
+* *-r* &lt;pcap&gt;... (same as --pcap-list)\r
+* *-s* &lt;snap&gt; (same as --snaplen)\r
+* *-t* &lt;dir&gt; chroots process to &lt;dir&gt; after initialization\r
+* *-u* &lt;uname&gt; run snort as &lt;uname&gt; or &lt;uid&gt; after initialization\r
+* *-v* be verbose\r
+* *-w* dump 802.11 management and control frames\r
+* *-x* same as --pedantic\r
+* *-y* include year in timestamp in the alert and log files\r
+* *-z* &lt;count&gt; maximum number of packet threads (same as --max-packet-threads)</code></pre>\r
+</div></div>\r
+</div>\r
+<div class="sect2">\r
 <h3 id="_parameters">Parameters</h3>\r
 <div class="paragraph"><p>Parameters are given with this format:</p></div>\r
 <div class="literalblock">\r
@@ -10778,7 +10787,7 @@ bit_list is typically used to store a set of byte, port, or VLAN ID
 </ul></div>\r
 </div>\r
 <div class="sect2">\r
-<h3 id="_configuration_2">Configuration</h3>\r
+<h3 id="_configuration_3">Configuration</h3>\r
 <div class="ulist"><ul>\r
 <li>\r
 <p>\r
@@ -11012,7 +11021,7 @@ int <strong>base64_decode.bytes</strong>: Number of base64 encoded bytes to deco
 </li>\r
 <li>\r
 <p>\r
-int <strong>base64_decode.offset</strong>: Bytes past start of buffer to start decoding. { 0: }\r
+int <strong>base64_decode.offset</strong> = 0: Bytes past start of buffer to start decoding. { 0: }\r
 </p>\r
 </li>\r
 <li>\r
@@ -11032,7 +11041,7 @@ string <strong>binder[].use.file</strong>: use configuration in given file
 </li>\r
 <li>\r
 <p>\r
-string <strong>binder[].use.name</strong> = defaults to type: symbol name\r
+string <strong>binder[].use.name</strong>: symbol name (defaults to type)\r
 </p>\r
 </li>\r
 <li>\r
@@ -11057,7 +11066,7 @@ addr_list <strong>binder[].when.nets</strong>: list of networks
 </li>\r
 <li>\r
 <p>\r
-int <strong>binder[].when.policy_id</strong>: unique ID for selection of this config by external logic { 0: }\r
+int <strong>binder[].when.policy_id</strong> = 0: unique ID for selection of this config by external logic { 0: }\r
 </p>\r
 </li>\r
 <li>\r
@@ -11092,7 +11101,7 @@ string <strong>bufferlen.~range</strong>: len | min&lt;&gt;max | &lt;max | &gt;m
 </li>\r
 <li>\r
 <p>\r
-int <strong>byte_extract.align</strong>: round the number of converted bytes up to the next 2- or 4-byte boundary { 0:4 }\r
+int <strong>byte_extract.align</strong> = 0: round the number of converted bytes up to the next 2- or 4-byte boundary { 0:4 }\r
 </p>\r
 </li>\r
 <li>\r
@@ -11122,7 +11131,7 @@ implied <strong>byte_extract.little</strong>: little endian
 </li>\r
 <li>\r
 <p>\r
-int <strong>byte_extract.multiplier</strong>: scale extracted value by given amount { 1:65535 }\r
+int <strong>byte_extract.multiplier</strong> = 1: scale extracted value by given amount { 1:65535 }\r
 </p>\r
 </li>\r
 <li>\r
@@ -11157,7 +11166,7 @@ int <strong>byte_extract.~offset</strong>: number of bytes into the buffer to st
 </li>\r
 <li>\r
 <p>\r
-int <strong>byte_jump.align</strong>: round the number of converted bytes up to the next 2- or 4-byte boundary { 0:4 }\r
+int <strong>byte_jump.align</strong> = 0: round the number of converted bytes up to the next 2- or 4-byte boundary { 0:4 }\r
 </p>\r
 </li>\r
 <li>\r
@@ -11192,7 +11201,7 @@ implied <strong>byte_jump.little</strong>: little endian
 </li>\r
 <li>\r
 <p>\r
-int <strong>byte_jump.multiplier</strong>: scale extracted value by given amount { 1:65535 }\r
+int <strong>byte_jump.multiplier</strong> = 1: scale extracted value by given amount { 1:65535 }\r
 </p>\r
 </li>\r
 <li>\r
@@ -11202,7 +11211,7 @@ implied <strong>byte_jump.oct</strong>: convert from octal string
 </li>\r
 <li>\r
 <p>\r
-int <strong>byte_jump.post_offset</strong>: also skip forward or backwards (positive of negative value) this number of bytes { -65535:65535 }\r
+int <strong>byte_jump.post_offset</strong> = 0: also skip forward or backwards (positive of negative value) this number of bytes { -65535:65535 }\r
 </p>\r
 </li>\r
 <li>\r
@@ -11322,12 +11331,12 @@ implied <strong>content.fast_pattern</strong>: use this content in the fast patt
 </li>\r
 <li>\r
 <p>\r
-int <strong>content.fast_pattern_length</strong>: maximum number of characters from this content the fast pattern matcher should use\r
+int <strong>content.fast_pattern_length</strong>: maximum number of characters from this content the fast pattern matcher should use { 1: }\r
 </p>\r
 </li>\r
 <li>\r
 <p>\r
-int <strong>content.fast_pattern_offset</strong>: number of leading characters of this content the fast pattern matcher should exclude\r
+int <strong>content.fast_pattern_offset</strong> = 0: number of leading characters of this content the fast pattern matcher should exclude { 0: }\r
 </p>\r
 </li>\r
 <li>\r
@@ -11382,7 +11391,7 @@ int <strong>daq.snaplen</strong> = deflt: set snap length (same as -P) { 0:65535
 </li>\r
 <li>\r
 <p>\r
-string <strong>daq.type</strong> = pcap: select type of DAQ\r
+string <strong>daq.type</strong>: select type of DAQ\r
 </p>\r
 </li>\r
 <li>\r
@@ -11762,7 +11771,7 @@ int <strong>gid.~</strong>: generator id { 1: }
 </li>\r
 <li>\r
 <p>\r
-enum <strong>hosts[].frag_policy</strong> = linux: defragmentation policy { unknown | first | linux | bsd | bsd_right |last | windows | solaris }\r
+enum <strong>hosts[].frag_policy</strong>: defragmentation policy { first | linux | bsd | bsd_right | last | windows | solaris }\r
 </p>\r
 </li>\r
 <li>\r
@@ -11787,7 +11796,7 @@ enum <strong>hosts[].services[].proto</strong> = tcp: ip protocol { tcp | udp }
 </li>\r
 <li>\r
 <p>\r
-enum <strong>hosts[].tcp_policy</strong> = linux: tcp reassembly policy { unknown | first | last | bsd | linux | old-linux | windows | win-2003 | vista | solaris | hpux | hpux10 | irix | macos }\r
+enum <strong>hosts[].tcp_policy</strong>: tcp reassembly policy { first | last | linux | old_linux | bsd | macos | solaris | irix | hpux11 | hpux10 | windows | win_2003 | vista | proxy }\r
 </p>\r
 </li>\r
 <li>\r
@@ -12152,7 +12161,7 @@ string <strong>ips.include</strong>: legacy snort rules and includes
 </li>\r
 <li>\r
 <p>\r
-enum <strong>ips.mode</strong> = tap: set policy mode { tap | inline | inline-test }\r
+enum <strong>ips.mode</strong>: set policy mode { tap | inline | inline-test }\r
 </p>\r
 </li>\r
 <li>\r
@@ -12177,7 +12186,7 @@ string <strong>itype.~range</strong>: check if icmp type is <em>type | min&lt;&g
 </li>\r
 <li>\r
 <p>\r
-bool <strong>log_codecs.file</strong> = stdout: output to log_codecs.txt instead of stdout\r
+bool <strong>log_codecs.file</strong> = false: output to log_codecs.txt instead of stdout\r
 </p>\r
 </li>\r
 <li>\r
@@ -12652,16 +12661,6 @@ int <strong>port_scan_global.memcap</strong> = 1048576: maximum tracker memory {
 </li>\r
 <li>\r
 <p>\r
-bool <strong>ppm.debug_pkts</strong> = false: enable packet debug\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
-bool <strong>ppm.debug_rules</strong> = false: enable rule debug\r
-</p>\r
-</li>\r
-<li>\r
-<p>\r
 bool <strong>ppm.fastpath_expensive_packets</strong> = false: stop inspection if the max_pkt_time is exceeded\r
 </p>\r
 </li>\r
@@ -12757,7 +12756,7 @@ bool <strong>process.utc</strong> = false: use UTC instead of local time for tim
 </li>\r
 <li>\r
 <p>\r
-int <strong>profile.modules.count</strong> = -1: print results to given level (-1 = all, 0 = off?) { -1: }\r
+int <strong>profile.modules.count</strong> = -1: print results to given level (-1 = all, 0 = off) { -1: }\r
 </p>\r
 </li>\r
 <li>\r
@@ -12767,7 +12766,7 @@ enum <strong>profile.modules.sort</strong> = avg_ticks: sort by given field { ch
 </li>\r
 <li>\r
 <p>\r
-int <strong>profile.rules.count</strong> = -1: print results to given level (-1 = all, 0 = off?) { -1: }\r
+int <strong>profile.rules.count</strong> = -1: print results to given level (-1 = all, 0 = off) { -1: }\r
 </p>\r
 </li>\r
 <li>\r
@@ -12817,7 +12816,7 @@ enum <strong>rate_filter[].track</strong> = by_src: filter only matching source
 </li>\r
 <li>\r
 <p>\r
-bool <strong>react.msg</strong>:  use rule message in response page\r
+bool <strong>react.msg</strong> = false:  use rule msg in response page instead of default message\r
 </p>\r
 </li>\r
 <li>\r
@@ -13042,7 +13041,7 @@ string <strong>snort.--bpf</strong>: &lt;filter options&gt; are standard BPF opt
 </li>\r
 <li>\r
 <p>\r
-string <strong>snort.--c2x</strong>: output hex for given char\r
+string <strong>snort.--c2x</strong>: output hex for given char (see also --x2c)\r
 </p>\r
 </li>\r
 <li>\r
@@ -13202,7 +13201,7 @@ implied <strong>snort.--markup</strong>: output help in asciidoc compatible form
 </li>\r
 <li>\r
 <p>\r
-int <strong>snort.--max-packet-threads</strong>: &lt;count&gt; configure maximum number of packet threads (same as -z) { 0: }\r
+int <strong>snort.--max-packet-threads</strong> = 1: &lt;count&gt; configure maximum number of packet threads (same as -z)\r
 </p>\r
 </li>\r
 <li>\r
@@ -13322,7 +13321,7 @@ int <strong>snort.--skip</strong>: &lt;n&gt; skip 1st n packets { 0: }
 </li>\r
 <li>\r
 <p>\r
-int <strong>snort.--snaplen</strong>: &lt;snap&gt; set snaplen of packet (same as -s) { 68:65535 }\r
+int <strong>snort.--snaplen</strong> = 1514: &lt;snap&gt; set snaplen of packet (same as -s) { 68:65535 }\r
 </p>\r
 </li>\r
 <li>\r
@@ -13352,17 +13351,47 @@ implied <strong>snort.--warn-all</strong>: enable all warnings
 </li>\r
 <li>\r
 <p>\r
+implied <strong>snort.--warn-conf</strong>: warn about configuration issues\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
+implied <strong>snort.--warn-daq</strong>: warn about DAQ issues, usually related to mode\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
 implied <strong>snort.--warn-flowbits</strong>: warn about flowbits that are checked but not set and vice-versa\r
 </p>\r
 </li>\r
 <li>\r
 <p>\r
-implied <strong>snort.--warn-unknown</strong>: warn about unknown symbols in your config\r
+implied <strong>snort.--warn-hosts</strong>: warn about host table issues\r
 </p>\r
 </li>\r
 <li>\r
 <p>\r
-int <strong>snort.--x2c</strong>: output ASCII char for given hex\r
+implied <strong>snort.--warn-rules</strong>: warn about duplicate rules and rule parsing issues\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
+implied <strong>snort.--warn-scripts</strong>: warn about issues discovered while processing Lua scripts\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
+implied <strong>snort.--warn-symbols</strong>: warn about unknown symbols in your Lua config\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
+implied <strong>snort.--warn-vars</strong>: warn about variable definition and usage issues\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
+int <strong>snort.--x2c</strong>: output ASCII char for given hex (see also --c2x)\r
 </p>\r
 </li>\r
 <li>\r
@@ -13532,7 +13561,7 @@ string <strong>snort.-r</strong>: &lt;pcap&gt;&#8230; (same as --pcap-list)
 </li>\r
 <li>\r
 <p>\r
-int <strong>snort.-s</strong>: &lt;snap&gt; (same as --snaplen) { 68:65535 }\r
+int <strong>snort.-s</strong> = 1514: &lt;snap&gt; (same as --snaplen) { 68:65535 }\r
 </p>\r
 </li>\r
 <li>\r
@@ -13567,7 +13596,7 @@ implied <strong>snort.-y</strong>: include year in timestamp in the alert and lo
 </li>\r
 <li>\r
 <p>\r
-int <strong>snort.-z</strong>: &lt;count&gt; maximum number of packet threads (same as --max-packet-threads) { 1: }\r
+int <strong>snort.-z</strong> = 1: &lt;count&gt; maximum number of packet threads (same as --max-packet-threads)\r
 </p>\r
 </li>\r
 <li>\r
@@ -13582,6 +13611,21 @@ string <strong>soid.~</strong>: SO rule ID has &lt;gid&gt;|&lt;sid&gt; format, l
 </li>\r
 <li>\r
 <p>\r
+int <strong>ssh.max_client_bytes</strong> = 19600: number of unanswered bytes before alerting on challenge-response overflow or CRC32 { 0:65535 }\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
+int <strong>ssh.max_encrypted_packets</strong> = 25: ignore session after this many encrypted packets { 0:65535 }\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
+int <strong>ssh.max_server_version_len</strong> = 80: limit before alerting on secure CRT server version string overflow { 0:255 }\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
 int <strong>stream.icmp_cache.idle_timeout</strong> = 60: maximum inactive time before retiring session tracker { 1: }\r
 </p>\r
 </li>\r
@@ -13592,7 +13636,7 @@ int <strong>stream.icmp_cache.max_sessions</strong> = 262144: maximum simultaneo
 </li>\r
 <li>\r
 <p>\r
-int <strong>stream.icmp_cache.memcap</strong>: maximum cache memory { 0: }\r
+int <strong>stream.icmp_cache.memcap</strong> = 0: maximum cache memory { 0: }\r
 </p>\r
 </li>\r
 <li>\r
@@ -13612,7 +13656,7 @@ int <strong>stream.ip_cache.max_sessions</strong> = 262144: maximum simultaneous
 </li>\r
 <li>\r
 <p>\r
-int <strong>stream.ip_cache.memcap</strong>: maximum cache memory { 0: }\r
+int <strong>stream.ip_cache.memcap</strong> = 0: maximum cache memory { 0: }\r
 </p>\r
 </li>\r
 <li>\r
@@ -13632,7 +13676,7 @@ int <strong>stream.tcp_cache.max_sessions</strong> = 262144: maximum simultaneou
 </li>\r
 <li>\r
 <p>\r
-int <strong>stream.tcp_cache.memcap</strong>: maximum cache memory { 0: }\r
+int <strong>stream.tcp_cache.memcap</strong> = 0: maximum cache memory { 0: }\r
 </p>\r
 </li>\r
 <li>\r
@@ -13652,7 +13696,7 @@ int <strong>stream.udp_cache.max_sessions</strong> = 262144: maximum simultaneou
 </li>\r
 <li>\r
 <p>\r
-int <strong>stream.udp_cache.memcap</strong>: maximum cache memory { 0: }\r
+int <strong>stream.udp_cache.memcap</strong> = 0: maximum cache memory { 0: }\r
 </p>\r
 </li>\r
 <li>\r
@@ -13757,7 +13801,7 @@ int <strong>stream_tcp.overlap_limit</strong> = 0: maximum number of allowed ove
 </li>\r
 <li>\r
 <p>\r
-enum <strong>stream_tcp.policy</strong> = linux: determines operating system characteristics like reassembly { first | last | linux | old-linux | bsd | macos | solaris | irix | hpux | hpux10 | windows | win-2003 | vista | proxy }\r
+enum <strong>stream_tcp.policy</strong> = bsd: determines operating system characteristics like reassembly { first | last | linux | old_linux | bsd | macos | solaris | irix | hpux11 | hpux10 | windows | win_2003 | vista | proxy }\r
 </p>\r
 </li>\r
 <li>\r
@@ -13978,6 +14022,8 @@ string <strong>wizard.spells[].to_client[].spell</strong>: sequence of data with
 <li>\r
 <p>\r
 string <strong>wizard.spells[].to_server[].spell</strong>: sequence of data with wild cards (*)\r
+        0 gets the number of CPU cores reported by the system { 0: }\r
+        0 gets the number of CPU cores reported by the system { 0: }\r
 </p>\r
 </li>\r
 </ul></div>\r
@@ -14157,6 +14203,11 @@ string <strong>wizard.spells[].to_server[].spell</strong>: sequence of data with
 </li>\r
 <li>\r
 <p>\r
+<strong>dns.packets</strong>: total packets\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
 <strong>ftp_data.packets</strong>: total packets\r
 </p>\r
 </li>\r
@@ -14607,6 +14658,11 @@ string <strong>wizard.spells[].to_server[].spell</strong>: sequence of data with
 </li>\r
 <li>\r
 <p>\r
+<strong>ssh.packets</strong>: total packets\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
 <strong>stream.icmp flows</strong>: total icmp sessions\r
 </p>\r
 </li>\r
@@ -15082,11 +15138,21 @@ string <strong>wizard.spells[].to_server[].spell</strong>: sequence of data with
 </li>\r
 <li>\r
 <p>\r
+<strong>128</strong>: ssh\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
 <strong>129</strong>: stream_tcp\r
 </p>\r
 </li>\r
 <li>\r
 <p>\r
+<strong>131</strong>: dns\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
 <strong>134</strong>: ppm\r
 </p>\r
 </li>\r
@@ -16417,6 +16483,36 @@ string <strong>wizard.spells[].to_server[].spell</strong>: sequence of data with
 </li>\r
 <li>\r
 <p>\r
+<strong>128:1</strong> (ssh) Challenge-Response Overflow exploit\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
+<strong>128:2</strong> (ssh) SSH1 CRC32 exploit\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
+<strong>128:3</strong> (ssh) Server version string overflow\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
+<strong>128:5</strong> (ssh) Bad message direction\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
+<strong>128:6</strong> (ssh) Payload size incorrect for the given payload\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
+<strong>128:7</strong> (ssh) Failed to detect SSH version string\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
 <strong>129:1</strong> (stream_tcp) SYN on established session\r
 </p>\r
 </li>\r
@@ -16517,6 +16613,21 @@ string <strong>wizard.spells[].to_server[].spell</strong>: sequence of data with
 </li>\r
 <li>\r
 <p>\r
+<strong>131:1</strong> (dns) Obsolete DNS RR Types\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
+<strong>131:2</strong> (dns) Experimental DNS RR Types\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
+<strong>131:3</strong> (dns) DNS Client rdata txt Overflow\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
 <strong>134:1</strong> (ppm) rule options disabled by rule latency\r
 </p>\r
 </li>\r
@@ -16838,7 +16949,7 @@ string <strong>wizard.spells[].to_server[].spell</strong>: sequence of data with
 </ul></div>\r
 </div>\r
 <div class="sect2">\r
-<h3 id="_signals">Signals</h3>\r
+<h3 id="_signals_2">Signals</h3>\r
 <div class="admonitionblock">\r
 <table><tr>\r
 <td class="icon">\r
@@ -16958,6 +17069,7 @@ change -&gt; detection: 'max-pattern-len' ==&gt; 'max_pattern_len'
 change -&gt; detection: 'search-method' ==&gt; 'search_method'\r
 change -&gt; detection: 'search-optimize' ==&gt; 'search_optimize'\r
 change -&gt; detection: 'split-any-any' ==&gt; 'split_any_any'\r
+change -&gt; dns: 'ports' ==&gt; 'bindings'\r
 change -&gt; event_filter: 'gen_id' ==&gt; 'gid'\r
 change -&gt; event_filter: 'sig_id' ==&gt; 'sid'\r
 change -&gt; event_filter: 'threshold' ==&gt; 'event_filter'\r
@@ -17010,7 +17122,6 @@ change -&gt; perfmonitor: 'pktcnt' ==&gt; 'packets'
 change -&gt; perfmonitor: 'snortfile' ==&gt; 'file = true'\r
 change -&gt; perfmonitor: 'time' ==&gt; 'seconds'\r
 change -&gt; policy_mode: 'inline_test' ==&gt; 'inline-test'\r
-change -&gt; ppm: 'debug-pkts' ==&gt; 'debug_pkts'\r
 change -&gt; ppm: 'max-pkt-time' ==&gt; 'max_pkt_time'\r
 change -&gt; ppm: 'max-rule-time' ==&gt; 'max_rule_time'\r
 change -&gt; ppm: 'pkt-log' ==&gt; 'pkt_log'\r
@@ -17026,6 +17137,7 @@ change -&gt; rule_state: 'disabled' ==&gt; 'enable'
 change -&gt; rule_state: 'enabled' ==&gt; 'enable'\r
 change -&gt; sfportscan: 'proto' ==&gt; 'protos'\r
 change -&gt; sfportscan: 'scan_type' ==&gt; 'scan_types'\r
+change -&gt; ssh: 'server_ports' ==&gt; 'bindings'\r
 change -&gt; stream5_global: 'max_active_responses' ==&gt; 'max_responses'\r
 change -&gt; stream5_global: 'max_icmp' ==&gt; 'max_sessions'\r
 change -&gt; stream5_global: 'max_ip' ==&gt; 'max_sessions'\r
@@ -17042,8 +17154,7 @@ change -&gt; stream5_tcp: 'bind_to' ==&gt; 'bindings'
 change -&gt; stream5_tcp: 'dont_reassemble_async' ==&gt; 'reassemble_async'\r
 change -&gt; stream5_tcp: 'max_queued_bytes' ==&gt; 'queue_limit.max_bytes'\r
 change -&gt; stream5_tcp: 'max_queued_segs' ==&gt; 'queue_limit.max_segments'\r
-change -&gt; stream5_tcp: 'policy hpux11' ==&gt; 'stream_tcp.policy = hpux'\r
-change -&gt; stream5_tcp: 'policy win2k3' ==&gt; 'stream_tcp.policy = win-2003'\r
+change -&gt; stream5_tcp: 'policy hpux' ==&gt; 'stream_tcp.policy = hpux11'\r
 change -&gt; stream5_tcp: 'timeout' ==&gt; 'session_timeout'\r
 change -&gt; stream5_tcp: 'use_static_footprint_sizes' ==&gt; 'footprint'\r
 change -&gt; stream5_udp: 'timeout' ==&gt; 'session_timeout'\r
@@ -17122,6 +17233,9 @@ deleted -&gt; csv: '&lt;filename&gt; can no longer be specific'
 deleted -&gt; csv: 'default'\r
 deleted -&gt; csv: 'trheader'\r
 deleted -&gt; detection: 'mwm'\r
+deleted -&gt; dns: 'enable_experimental_types'\r
+deleted -&gt; dns: 'enable_obsolete_types'\r
+deleted -&gt; dns: 'enable_rdata_overflow'\r
 deleted -&gt; fast: '&lt;filename&gt; can no longer be specific'\r
 deleted -&gt; frag3_engine: 'detect_anomalies'\r
 deleted -&gt; frag3_global: 'disabled'\r
@@ -17134,6 +17248,7 @@ deleted -&gt; perfmonitor: 'atexitonly: base-stats'
 deleted -&gt; perfmonitor: 'atexitonly: events-stats'\r
 deleted -&gt; perfmonitor: 'atexitonly: flow-ip-stats'\r
 deleted -&gt; perfmonitor: 'atexitonly: flow-stats'\r
+deleted -&gt; ppm: 'debug-pkts'\r
 deleted -&gt; react: 'block'\r
 deleted -&gt; react: 'warn'\r
 deleted -&gt; rpc_decode: 'alert_fragments'\r
@@ -17144,6 +17259,14 @@ deleted -&gt; rule_state: 'action'
 deleted -&gt; sfportscan: 'detect_ack_scans'\r
 deleted -&gt; sfportscan: 'disabled'\r
 deleted -&gt; sfportscan: 'logfile'\r
+deleted -&gt; ssh: 'autodetect'\r
+deleted -&gt; ssh: 'enable_badmsgdir'\r
+deleted -&gt; ssh: 'enable_paysize'\r
+deleted -&gt; ssh: 'enable_protomismatch'\r
+deleted -&gt; ssh: 'enable_recognition'\r
+deleted -&gt; ssh: 'enable_respoverflow'\r
+deleted -&gt; ssh: 'enable_srvoverflow'\r
+deleted -&gt; ssh: 'enable_ssh1crc32'\r
 deleted -&gt; stream5_global: 'disabled'\r
 deleted -&gt; stream5_global: 'flush_on_alert'\r
 deleted -&gt; stream5_global: 'no_midstream_drop_alerts'\r
@@ -17308,6 +17431,11 @@ deleted -&gt; unified2: 'filename'</code></pre>
 </li>\r
 <li>\r
 <p>\r
+<strong>dns</strong> (inspector): dns inspection\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
 <strong>dsize</strong> (ips_option): rule option to test payload size\r
 </p>\r
 </li>\r
@@ -17773,6 +17901,11 @@ deleted -&gt; unified2: 'filename'</code></pre>
 </li>\r
 <li>\r
 <p>\r
+<strong>ssh</strong> (inspector): ssh inspection\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
 <strong>stream</strong> (inspector): common flow tracking\r
 </p>\r
 </li>\r
@@ -18123,6 +18256,11 @@ deleted -&gt; unified2: 'filename'</code></pre>
 </li>\r
 <li>\r
 <p>\r
+<strong>inspector::dns</strong>: dns inspection\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
 <strong>inspector::ftp_data</strong>: FTP data channel handler\r
 </p>\r
 </li>\r
@@ -18163,6 +18301,11 @@ deleted -&gt; unified2: 'filename'</code></pre>
 </li>\r
 <li>\r
 <p>\r
+<strong>inspector::ssh</strong>: ssh inspection\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
 <strong>inspector::stream</strong>: common flow tracking\r
 </p>\r
 </li>\r
@@ -18622,7 +18765,7 @@ deleted -&gt; unified2: 'filename'</code></pre>
 <div class="sect2">\r
 <h3 id="_extending_snort">Extending Snort++</h3>\r
 <div class="sect3">\r
-<h4 id="_plugins">Plugins</h4>\r
+<h4 id="_plugins_2">Plugins</h4>\r
 <div class="paragraph"><p>Snort++ uses a variety of plugins to accomplish much of its processing\r
 objectives, including:</p></div>\r
 <div class="ulist"><ul>\r
@@ -19273,7 +19416,7 @@ Put conditional code on the line following the if so it is easy to break
 <li>\r
 <p>\r
 Don&#8217;t hesitate to create a new header if it is needed.  Don&#8217;t lump\r
-  unrelated stuff into a header because it is convenient.\r
+  unrelated stuff into an header because it is convenient.\r
 </p>\r
 </li>\r
 <li>\r
@@ -19293,7 +19436,7 @@ Write header guards like this (leading underscores are reserved for
 <p>\r
 Includes from a different directory should specify parent directory.\r
   This makes it clear exactly what is included and avoids the primordial\r
-  soup that results from using -I this -I that -I the-other-thing &#8230; .\r
+  soup that results from using -I this -I that -I the_other_thing &#8230; .\r
 </p>\r
 <div class="literalblock">\r
 <div class="content">\r
@@ -19389,7 +19532,7 @@ Prefer <em>and</em> over &amp;&amp; and <em>or</em> over || for new source files
 <div class="paragraph"><p>Currently using uncrustify from at <a href="https://github.com/bengardner/uncrustify">https://github.com/bengardner/uncrustify</a>\r
 to reformat legacy code and anything that happens to need a makeover at\r
 some point.</p></div>\r
-<div class="paragraph"><p>The working config is crusty.cfg in the top level directory.  It does well,\r
+<div class="paragraph"><p>The working config is crusty.cfg in the top level directory.  It does well\r
 but will munge some things.  Specially formatted INDENT-OFF comments were\r
 added in 2 places to avoid a real mess.</p></div>\r
 </div>\r
@@ -19401,7 +19544,7 @@ added in 2 places to avoid a real mess.</p></div>
 <div id="footnotes"><hr /></div>\r
 <div id="footer">\r
 <div id="footer-text">\r
-Last updated 2015-02-27 09:57:19 EST\r
+Last updated 2015-03-30 16:54:22 EDT\r
 </div>\r
 </div>\r
 </body>\r
index af1fb18af5ad674bf6722b5108f662e6ec8b340c..3deb6a52a69c91467e2fd5ef121bdc73d0c619f9 100644 (file)
Binary files a/doc/default_snort_manual.pdf and b/doc/default_snort_manual.pdf differ
index 0752fcf77286d07e286c82f9f02b71eeaac82f8f..fe97db0d62fedcafa9ed64f18a9daefe3c85febb 100644 (file)
@@ -5,6 +5,7 @@ x_includedir = $(pkgincludedir)/framework
 noinst_LIBRARIES = libframework.a
 
 x_include_HEADERS = \
+api_options.h \
 base_api.h \
 bits.h \
 codec.h \
@@ -36,10 +37,3 @@ value.cc
 
 AM_CXXFLAGS = @AM_CXXFLAGS@
 
-# install this to enable plugin build compatibility check
-install-data-hook: $(top_builddir)/config.h
-       grep "API_OPTIONS" $< > $(x_includedir)/api_options.h
-
-uninstall-hook:
-       rm -f $(x_includedir)/api_options.h
-
diff --git a/src/framework/api_options.h.in b/src/framework/api_options.h.in
new file mode 100644 (file)
index 0000000..ab46889
--- /dev/null
@@ -0,0 +1,46 @@
+// this file defines API_OPTIONS.
+
+// API_OPTIONS is also defined in config.h for building Snort++ but that
+// file is not installed.  api_options.h will be included automatically by
+// base_api.h when building external plugins from the installed headers.
+
+// the purpose of this define is to detect incompatibility between Snort
+// and dynamic plugins that may have been built with different features.
+
+// this applies to conditionally defined member data in shared structs.  it
+// does not apply to conditionally defined functions since those prevent
+// loading (that should be true for virtuals as well).
+
+// for example, suppose we had this:
+// 
+// struct SnortConfig
+// {
+//     // some member data
+// #ifdef FOO
+//     // optional member data
+// #endif
+//     // more member data
+// };
+
+// and then we did this:
+// 
+// 1.  build and install snort with build option set A.
+// 2.  build and install external plugins.  These use A and are compatible.
+// 3.  build and install snort with build option set B (changing FOO).
+// 4.  run snort with B options and load external plugins with A options.
+
+// these are incompatible and will be caught upon loading instead of trying
+// to run with mismatched structs and crashing in possibly mysterious ways.
+// note that the api version of snort and plugins must match exactly.  api
+// version is orthogonal to build.
+
+// features like FOO require special handling in configure.ac and
+// config.cmake.h.in to make this work.  see those files for details.
+
+// finally, features like FOO should be avoided and have so far been
+// eliminated from Snort++.  however, they have plagued Snort 2.X so this
+// facility is provided just in case.
+
+/* plugin api related build options */
+#undef API_OPTIONS
+
index 7376f98aa7a3600733163f99a89953f9c42d5fdb..d4c04bbf1e65fe6e260a8862a356ffa48ff6cd1c 100644 (file)
@@ -7,5 +7,5 @@
 //                                               //
 //-----------------------------------------------//
 
-#define BUILD "143"
+#define BUILD "144"