aboutsummaryrefslogtreecommitdiffstats
path: root/test
AgeCommit message (Collapse)AuthorFilesLines
2023-03-04Sharkd: show RTP ssrc as hex and improve errorsZach Chadwick2-1/+69
The token format used by rtp-analyse and rtp-download expect the SSRC field to be a hex string parsable by `ws_hexstrtou32()` as seen in sharkd_session.c:760. The output from tap:rtp-streams was displaying it as an unsigned integer. For consistency, this field is now displayed as a hex string in the output. If the call to download an RTP stream did not match any payloads, Sharkd would not return any information at all. This now returns an error message indicating that there is no RTP data available. Adds three new selftests and sample pcap.
2023-03-01Sharkd: Return error message on load if err!=0Zach Chadwick2-0/+9
Fixes a bug when the return value from load_cap_file() is nonzero. No response is currently returned causing the client to hang. A non-zero error code can happen for a variety of reasons, one of which is when the PCAP is truncated. An error message from cfile_read_failure_message() is displayed on the console, but no data was returned to the RPC client. This adds a call to wtap_strerrror() to look up a human consumable error message for the specific error code returned during wtap_read(). Adds new self-test to suite_sharkd.py
2023-02-19Sharkd: Add column header labels to the "status" outputZach Chadwick1-2/+3
2023-02-07Move ui/exit_codes.h to include/João Valverde1-2/+2
2023-01-16MSYS2: Add Lua 5.1 support and fix test suite failuresJoão Valverde3-0/+6
2023-01-11Set unique exit codes for processesMartin Mathieson3-5/+15
2023-01-07dfilter: Add a testJoão Valverde1-0/+5
2023-01-07tests: Reorganize dfilter groupJoão Valverde11-95/+57
2023-01-07dfilter: Optimize some scanner patternsJoão Valverde1-1/+16
Cleanup flex code. Optimize some patterns to avoid lookups for field matches for values that are not legal field names. Improve warning and add some comments.
2023-01-05dftest: More CLI options and improve output formatJoão Valverde1-1/+1
2023-01-04WSLUA: allow 64 bits bitmask for ProtoField objectsNardi Ivan2-1/+92
Mask might be specified using a (Lua) number, a string or a UInt64 object. It is useful to handle 64 bit bitfields.
2023-01-03tests: Get tests working with Python 3.11 (except with pytest)John Thacker1-1/+8
We use a common idiom ( https://stackoverflow.com/a/39606065 https://gist.github.com/hynekcer/1b0a260ef72dae05fe9611904d7b9675 ) for getting the results of our unittest.TestCases in the tearDown method. This method accesses a private property, and that private property was removed in Python 3.11 The StackOverflow answer has been updated with a new approach for Python 3.11, which also uses a private property. This fixes things for CTest (and the test target when building), but it still doesn't work when using pytest's unittest support. Ping #18740
2023-01-03dfilter: Remove semcheck arithmetic commute argumentJoão Valverde1-3/+3
No one is using this so I'd like to explore other options first to handle constants in arithmetic expressions that lack type information. Reverts 3ddb017a88797f520cda45961819c7084a0a5b29.
2023-01-02dfilter: Tweak representation for length-1 byte arrayJoão Valverde1-0/+5
Make dfilter byte representation always use ':' for consistency. Make 1 byte be represented as "XX:" with the colon suffix to make it nonambiguous that is is a byte and not other type, like a protocol. The difference is can be seen in the following programs. In the before representation it is not obvious at all that the second "fc" value is a literal bytes value and not the value of the protocol "fc", although it can be inferred from the lack of a READ_TREE instruction. In the After we know that "fc:" must be bytes and not a protocol. Note that a leading colon is a syntactical expedient to say "this value with any type is a literal value and not a protocol field." A terminating colon is just a part of the dfilter literal bytes syntax. Before: Filter: fc == :fc Syntax tree: 0 TEST_ANY_EQ: 1 FIELD(fc <FT_PROTOCOL>) 1 FVALUE(fc <FT_PROTOCOL>) Instructions: 00000 READ_TREE fc <FT_PROTOCOL> -> reg#0 00001 IF_FALSE_GOTO 3 00002 ANY_EQ reg#0 == fc <FT_PROTOCOL> After: Filter: fc == :fc Syntax tree: 0 TEST_ANY_EQ: 1 FIELD(fc <FT_PROTOCOL>) 1 FVALUE(fc: <FT_PROTOCOL>) Instructions: 00000 READ_TREE fc <FT_PROTOCOL> -> reg#0 00001 IF_FALSE_GOTO 3 00002 ANY_EQ reg#0 == fc: <FT_PROTOCOL>
2022-12-30dfilter: Remove commute argument from semantic checkJoão Valverde2-6/+9
Take a more conservative, less flexible, maybe more elegant, approach to type inference for now.
2022-12-30dftest: Fix command-line argument parsingJoão Valverde1-2/+2
Expressions that start with hyphen clash with command-line options. In that case we need to pass "--" to dftest to stop processing options. Fix the test suite to do this. Fixes failures with dftest and expressions like: -2 == tcp.port Replace the GLib option parser with getopt while at it. The GLib API is nice but isn't a good fit for this utility and the code appears to be inconsistent on whether "--" is left in the argv or not.
2022-12-29dfilter: Replace unparsed lexical type and simplify grammarJoão Valverde1-0/+6
Remove unparsed lexical type and replace it with identifier and constant. This separation is still necessary to differentiate names (fields and function) from literals that look like names but it has some advantages to do it at the lexical level. The main advantage is a much cleaner and simplified grammar, because we only have a single token type for field names, without any loss of generality (the same name is valid for fields and function names for example). The CONSTANT token type is necessary to be different from literal to provide errors for function rules.
2022-12-29tests: Rename test groupJoão Valverde1-1/+1
2022-12-28add mongo zstd test to suite_dissection.pyKevin Albertson2-0/+12
2022-12-27dfilter: Allow constants as the first or only argument to min/maxJoão Valverde1-4/+7
The strategy here is to delay resolving literals to values until we have looked at the entire argument list. Also we will try to commute the relation in a comparison if we do not have a type for the return value of the function, like any other constant. Before: Filter: max(1,_ws.ftypes.int8) == 1 dftest: Argument '1' is not valid for max() max(1,_ws.ftypes.int8) == 1 ^ After: Filter: max(1,_ws.ftypes.int8) == 1 Syntax tree: 0 TEST_ANY_EQ: 1 FUNCTION(max#2): 2 FVALUE(1 <FT_INT8>) 2 FIELD(_ws.ftypes.int8 <FT_INT8>) 1 FVALUE(1 <FT_INT8>) Instructions: 00000 STACK_PUSH 1 <FT_INT8> 00001 READ_TREE _ws.ftypes.int8 <FT_INT8> -> reg#1 00002 IF_FALSE_GOTO 3 00003 STACK_PUSH reg#1 00004 CALL_FUNCTION max(reg#1, 1 <FT_INT8>) -> reg#0 00005 STACK_POP 2 00006 IF_FALSE_GOTO 8 00007 ANY_EQ reg#0 == 1 <FT_INT8> 00008 RETURN
2022-12-27dfilter: Fix crash with min/max literal argumentJoão Valverde1-0/+5
Filter: max(1,_ws.ftypes.int8) == 1 ** (dftest:64938) 01:43:25.950180 [DFilter ERROR] epan/dfilter/sttype-field.c:117 -- sttype_field_ftenum(): Magic num is 0x5cf30031, but should be 0xfc2002cf
2022-12-26dfilter: Fix crash with a constant arithmetic expressionJoão Valverde1-0/+5
2022-12-26dfilter: Allow arithmetic expression to commuteJoão Valverde1-6/+9
Allow an arithmetic expression like 1 + some.field. If we cannot assign a type to the LHS commute the terms and try again. Before: Filter: _ws.ftypes.int32 + 1 == 10 Syntax tree: 0 TEST_ANY_EQ: 1 OP_ADD: 2 FIELD(_ws.ftypes.int32 <FT_INT32>) 2 FVALUE(1 <FT_INT32>) 1 FVALUE(10 <FT_INT32>) Instructions: 00000 READ_TREE _ws.ftypes.int32 <FT_INT32> -> reg#0 00001 IF_FALSE_GOTO 4 00002 ADD reg#0 + 1 <FT_INT32> -> reg#1 00003 ANY_EQ reg#1 == 10 <FT_INT32> 00004 RETURN Filter: 1 + _ws.ftypes.int32 == 10 dftest: Constant arithmetic expression on the LHS is invalid. 1 + _ws.ftypes.int32 == 10 ^ After: Filter: _ws.ftypes.int32 + 1 == 10 Syntax tree: 0 TEST_ANY_EQ: 1 OP_ADD: 2 FIELD(_ws.ftypes.int32 <FT_INT32>) 2 FVALUE(1 <FT_INT32>) 1 FVALUE(10 <FT_INT32>) Instructions: 00000 READ_TREE _ws.ftypes.int32 <FT_INT32> -> reg#0 00001 IF_FALSE_GOTO 4 00002 ADD reg#0 + 1 <FT_INT32> -> reg#1 00003 ANY_EQ reg#1 == 10 <FT_INT32> 00004 RETURN Filter: 1 + _ws.ftypes.int32 == 10 Syntax tree: 0 TEST_ANY_EQ: 1 OP_ADD: 2 FVALUE(1 <FT_INT32>) 2 FIELD(_ws.ftypes.int32 <FT_INT32>) 1 FVALUE(10 <FT_INT32>) Instructions: 00000 READ_TREE _ws.ftypes.int32 <FT_INT32> -> reg#0 00001 IF_FALSE_GOTO 4 00002 ADD 1 <FT_INT32> + reg#0 -> reg#1 00003 ANY_EQ reg#1 == 10 <FT_INT32> 00004 RETURN
2022-12-26dfilter: Allow comparison relation to commuteJoão Valverde1-2/+6
Comparison relations should be allowed to commute but they can not because we need type information to resolve literals to fvalues. For that reason an expression like "1 == some.field" is invalid. Solve that by commuting the relation if the first try did not succeed in assigning a type to the LHS. After the second try give up, that means we have a relation with constants on both sides and that is not semantically valid. Other relations like "matches" and "contains" are not symmetric and should not commute anyway. Before: Filter: _ws.ftypes.int32 == 10 Syntax tree: 0 TEST_ANY_EQ: 1 FIELD(_ws.ftypes.int32 <FT_INT32>) 1 FVALUE(10 <FT_INT32>) Instructions: 00000 READ_TREE _ws.ftypes.int32 <FT_INT32> -> reg#0 00001 IF_FALSE_GOTO 3 00002 ANY_EQ reg#0 == 10 <FT_INT32> 00003 RETURN Filter: 10 == _ws.ftypes.int32 dftest: Left side of "==" expression must be a field or function, not 10. 10 == _ws.ftypes.int32 ^~ After: Filter: _ws.ftypes.int32 == 10 Syntax tree: 0 TEST_ANY_EQ: 1 FIELD(_ws.ftypes.int32 <FT_INT32>) 1 FVALUE(10 <FT_INT32>) Instructions: 00000 READ_TREE _ws.ftypes.int32 <FT_INT32> -> reg#0 00001 IF_FALSE_GOTO 3 00002 ANY_EQ reg#0 == 10 <FT_INT32> 00003 RETURN Filter: 10 == _ws.ftypes.int32 Syntax tree: 0 TEST_ANY_EQ: 1 FVALUE(10 <FT_INT32>) 1 FIELD(_ws.ftypes.int32 <FT_INT32>) Instructions: 00000 READ_TREE _ws.ftypes.int32 <FT_INT32> -> reg#0 00001 IF_FALSE_GOTO 3 00002 ANY_EQ 10 <FT_INT32> == reg#0 00003 RETURN
2022-12-22dfilter: Add support for negation of arithmetic expressionsJoão Valverde1-0/+4
2022-12-15tshark: fix duplicate fields issue in ek output.Dario Lombardo2-8/+8
Fix: #18036.
2022-12-06test: Skip Follow HTTP2 test without Nghttp2John Thacker1-2/+6
The expected test output is with the headers decompressed, which we can't do without Nghttp2. (It outputs the compressed headers if we don't have it, so we could test for that instead.) Fix #18707
2022-11-07dfilter: treat carriage returns as whitespacePeter Wu1-0/+4
Fixes #18595
2022-10-31dfilter: Add suport for raw addressing with referencesJoão Valverde1-0/+5
Extends raw adressing syntax to wok with references. The syntax is @field1 == ${@field2} This requires replicating the logic to load field references, but using raw values instead. We use separate hash tables for that, namely "references" vs "raw_references".
2022-10-31dfilter: Add support for raw (bytes) addressing modeJoão Valverde2-0/+16
This adds new syntax to read a field from the tree as bytes, instead of the actual type. This is a useful extension for example to match matformed strings that contain unicode replacement characters. In this case it is not possible to match the raw value of the malformed string field. This extension fills this need and is generic enough that it should be useful in many other situations. The syntax used is to prefix the field name with "@". The following artificial example tests if the HTTP user agent contains a particular invalid UTF-8 sequence: @http.user_agent == "Mozill\xAA" Where simply using "http.user_agent" won't work because the invalid byte sequence will have been replaced with U+FFFD. Considering the following programs: $ dftest '_ws.ftypes.string == "ABC"' Filter: _ws.ftypes.string == "ABC" Syntax tree: 0 TEST_ANY_EQ: 1 FIELD(_ws.ftypes.string <FT_STRING>) 1 FVALUE("ABC" <FT_STRING>) Instructions: 00000 READ_TREE _ws.ftypes.string <FT_STRING> -> reg#0 00001 IF_FALSE_GOTO 3 00002 ANY_EQ reg#0 == "ABC" <FT_STRING> 00003 RETURN $ dftest '@_ws.ftypes.string == "ABC"' Filter: @_ws.ftypes.string == "ABC" Syntax tree: 0 TEST_ANY_EQ: 1 FIELD(_ws.ftypes.string <RAW>) 1 FVALUE(41:42:43 <FT_BYTES>) Instructions: 00000 READ_TREE @_ws.ftypes.string <FT_BYTES> -> reg#0 00001 IF_FALSE_GOTO 3 00002 ANY_EQ reg#0 == 41:42:43 <FT_BYTES> 00003 RETURN In the second case the field has a "raw" type, that equates directly to FT_BYTES, and the field value is read from the protocol raw data.
2022-10-31NTP: Improve handling of poll and precision fieldsMiroslav Lichvar1-12/+12
The poll and precision fields in timing NTP messages are signed integers. Different NTP implementations have different minimum and maximum polling intervals. Some can be configured even with negative values for sub-second intervals (e.g. down to -7 for 1/128th of a second). NTP clocks on modern systems and hardware typically have a sub-microsecond precision. Print all poll values. Add the raw precision and change the resolution of the printed value to nanoseconds.
2022-10-20epan/proto: Replace format text()João Valverde1-0/+6
The proto.h APIs expect valid UTF-8 so replace uses of format_text() with a label copy function that just does formatting and does not check for encoding errors. Avoid multiple levels of temporary string allocations. Make sure the copy does not truncate a multibyte character and produce invalid strings. Add debug checks for UTF-8 encoding errors instead. We escape C0 and C1 control codes (because control codes) and ASCII whitespace (and bell). Overall the goal is to be more efficient and optimized and help detect misuse of APIs by passing invalid UTF-8. Add a unit test for ws_label_strcat.
2022-10-11Windows: Store "gui.console_open" in the Windows registryJoão Valverde1-9/+8
This removes the last dependency of the logging subsystem on the preferences module. The latter is started much later than the former and this is an issue. The Windows-only preference "gui.console_open" is stored in the registry as HKEY_LOCAL_USER\Software\Wireshark\ConsoleOpen. The semantics are exactly the same. The preference is read by the logging subsystem for initialization and then again by the preferences (read/write) so the user can configure it as before. The code to store the preference also in the preferences file was kept, for backward compatibility and because it is not incompatible with using the Registry concurrently. The elimination of the prefs dependency also allows moving the Windows console logic to wsutil and add the functionality to wslog directly, thereby eliminating the superfluous Wireshark/Logray custom log handler. To be able to read the ws_log_console_open global variable from libwireshark it becomes necessary to add a new export macro symbol called WSUTIL_EXPORT.
2022-10-08dfilter: Amend a numeric pattern in the scannerJoão Valverde1-4/+0
We amend the :<numeric> pattern to not eat the leading colon. Because the colon can be part of the value (with IPv6 addresses for example) we want to avoid doing that. IPv6 addresses are covered by their own rules but this removes the requirement in the future to handle any special cases and avoids surprises. For this reason the colon-prefix syntax is already explicitly defined to work only for byte arrays and there is currently no universal syntax for all literal values or even all numbers. Other numbers can keep using the lexical type "unparsed". ``` run/dftest "_ws.ftypes.uint8 == :fd" Filter: _ws.ftypes.uint8 == :fd dftest: ":fd" is not a valid number. _ws.ftypes.uint8 == :fd ^~~ run/dftest "_ws.ftypes.uint8 == fd" Filter: _ws.ftypes.uint8 == fd dftest: "fd" is not a valid number. _ws.ftypes.uint8 == fd ^~ run/dftest "_ws.ftypes.uint8 == 0xfd" Filter: _ws.ftypes.uint8 == 0xfd Syntax tree: 0 TEST_ANY_EQ: 1 FIELD(_ws.ftypes.uint8 <FT_UINT8>) 1 FVALUE(253 <FT_UINT8>) Instructions: 00000 READ_TREE _ws.ftypes.uint8 <FT_UINT8> -> reg#0 00001 IF_FALSE_GOTO 3 00002 ANY_EQ reg#0 == 253 <FT_UINT8> 00003 RETURN run/dftest "_ws.ftypes.bytes == fd" Filter: _ws.ftypes.bytes == fd Syntax tree: 0 TEST_ANY_EQ: 1 FIELD(_ws.ftypes.bytes <FT_BYTES>) 1 FVALUE(fd <FT_BYTES>) Instructions: 00000 READ_TREE _ws.ftypes.bytes <FT_BYTES> -> reg#0 00001 IF_FALSE_GOTO 3 00002 ANY_EQ reg#0 == fd <FT_BYTES> 00003 RETURN run/dftest "_ws.ftypes.bytes == :fd" Filter: _ws.ftypes.bytes == :fd Syntax tree: 0 TEST_ANY_EQ: 1 FIELD(_ws.ftypes.bytes <FT_BYTES>) 1 FVALUE(fd <FT_BYTES>) Instructions: 00000 READ_TREE _ws.ftypes.bytes <FT_BYTES> -> reg#0 00001 IF_FALSE_GOTO 3 00002 ANY_EQ reg#0 == fd <FT_BYTES> 00003 RETURN ```
2022-10-08dfilter: Remove problematic <...> literal syntaxJoão Valverde1-9/+5
The <...> syntax for literals, intended to be as generic as possible, unintentionally introduced an ambiguity with the relational expression "a < b or a > c". Literals are values like numbers, bytes, IPv6 addresses or, one could imagine, UNC paths for example, if an FT_UNC type were to be added in the future. We could use a new unique symbol like @...@ but the <...> syntax is very recent and may not be necessary with ":xxx" so just remove it. A byte array can be explicitly declared by prefixing with a colon. It is not as generic but the main ambiguity that this new syntax attempted to solve is bytes vs protocol names. We don't want to introduce a new reserved symbol for now, until other requirements if any are more clear. Fixes #18418.
2022-08-30tcp: Fix handling of retransmission for reassemblyJohn Thacker1-4/+6
When reassemble_ooo is set, we can do a better job determining if a segment is retransmitted or not from the reassembler perspective, which is different than what TCP sequence analysis determines, which is retransmission from the sender's perspective. This also allows us to have a good way of dealing with retransmission but with additional data. This only works when reassembling out of order is set. Without it, we fall back to the old method of detecting retransmissions, which has a harder time with the edge cases. Fix #17406, fix #15993, fix #13388, fix #13523.
2022-08-22spelling: "two pass" -> two-passChuck Craft1-1/+1
2022-08-17TCP: Use RFC 6994 for experimental optionsMichael Tuexen1-0/+0
Modernize the handling of experimental TCP options based on RFC 6994. In particular use ExID instead of magic (which in the context of RFC 6994 are the last two bytes of a 32-bit ExID) and add a desciption of ExID based on the current state of the IANA registry.
2022-08-08HTTP2: Send headers to the follow tap after decompressionJohn Thacker2-3/+11
Field blocks (carried in HEADERS, PUSH_PROMISE, and CONTINUATION frames) are compressed by HPACK. Send them to the follow tap only after decompression. Update the tests to match the new output. Ping #18239 (There's still the case of gzip and brotli compressed DATA frames to handle).
2022-07-26test: Add dfilter 'double' testsStig Bjørlykke1-0/+24
Add test cases for scientific notation and not equal.
2022-07-24quic: Handle out-of-order CRYPTO frames, aka "Chaos Protection"John Thacker2-0/+36
Implement out of order buffering and desegmentation for QUIC CRYPTO frames. Particularly useful for Chrome's "Chaos Protection" that intentionally introduces them, but handles out of order CRYPTO frames in different UDP payloads as well. (Buffering packets at a higher encryption level until the out of order lower level frames have arrived is a different issue.) Adds a preference, which defaults to on since if there is out of order, it's not very useful to turn it off. Fix #17732. Fix #18215.
2022-07-04dfilter: Allow existence check for slicesJoão Valverde1-0/+16
Allow checking if a slice exists. The result is true if the slice has length greater than zero. The len() function is implemented as a DFVM instruction instead. The semantics are the same.
2022-07-02dfilter: Remove unparsed syntax type and RHS literal biasJoão Valverde1-4/+7
This removes unparsed name resolution during the semantic check because it feels like a hack to work around limitations in the language syntax, that should be solved at the lexical level instead. We were interpreting unparsed differently on the LHS and RHS. Now an unparsed value is always a field if it matches a registered field name (this matches the implementation in 3.6 and before). This requires tightening a bit the allowed filter names for protocols to avoid some common and potentially weird conflicting cases. Incidentally this extends set grammar to accept all entities. That is experimental and may be reverted in the future.
2022-06-25dfilter: Add layer support for referencesJoão Valverde1-3/+8
This adds support for using the layers filter with field references. Before: $ dftest 'ip.src != ${ip.src#2}' dftest: invalid character in macro name After: $ dftest 'ip.src != ${ip.src#2}' Filter: ip.src != ${ip.src#2} Syntax tree: 0 TEST_ALL_NE: 1 FIELD(ip.src <FT_IPv4>) 1 REFERENCE(ip.src#[2:1] <FT_IPv4>) Instructions: 00000 READ_TREE ip.src <FT_IPv4> -> reg#0 00001 IF_FALSE_GOTO 5 00002 READ_REFERENCE_R ${ip.src <FT_IPv4>} #[2:1] -> reg#1 00003 IF_FALSE_GOTO 5 00004 ALL_NE reg#0 != reg#1 00005 RETURN This requires adding another level of complexity to references. When loading references we need to copy the 'proto_layer_num' and add the logic to filter on that. The "layer" sttype is removed and replace by a new field sttype with support for a range. This is a nice cleanup for the semantic check and general simplification. The grammar is better too with this design. Range sttype is renamed to slice for clarity.
2022-06-25dfilter: Change boolean string representationJoão Valverde1-1/+5
Use "True" or "TRUE" instead of "true" and remove case insensivity. Same for false. This should serve to differentiate booleans a bit more from protocol names, which should be using lower-case.
2022-06-21dfilter: Add support for literal strings with null bytesJoão Valverde1-1/+1
Before: Filter: frame matches "abc\x00def" dftest: \x00 (NUL byte) cannot be used with a regular string. frame matches "abc\x00def" ^~~~ Filter: _ws.ftypes.string == "a string with a \0 byte" dftest: \0 (NUL byte) cannot be used with a regular string. _ws.ftypes.string == "a string with a \0 byte" ^~ After: Filter: frame matches "abc\x00def" Syntax tree: 0 TEST_MATCHES: 1 FIELD(frame) 1 PCRE(abc\0def) Instructions: 00000 READ_TREE frame -> reg#0 00001 IF_FALSE_GOTO 3 00002 ANY_MATCHES reg#0 matches abc\0def 00003 RETURN Filter: _ws.ftypes.string == "a string with a \0 byte" Syntax tree: 0 TEST_ANY_EQ: 1 FIELD(_ws.ftypes.string) 1 FVALUE("a string with a \0 byte" <FT_STRING>) Instructions: 00000 READ_TREE _ws.ftypes.string -> reg#0 00001 IF_FALSE_GOTO 3 00002 ANY_EQ reg#0 == "a string with a \0 byte" <FT_STRING> 00003 RETURN Fixes issue #16156.
2022-06-16editcap/mergecap: swap 'v'|'V' options to match other CLI utilitiesChuck Craft1-17/+17
Closes #18134
2022-06-14ip: ip.flags field are 3 high bits not full byteChuck Craft2-12/+12
See https://ask.wireshark.org/question/27546/0x01-flag-on-last-of-fragmented-packets/
2022-06-08dfilter: Make regex matches case insensitive by defaultJoão Valverde1-0/+5
2022-06-05Version info: Do not show plugin countJoão Valverde1-1/+1
Plugin count is dependant on initialization order and showing zero plugins loaded can be misleading.