aboutsummaryrefslogtreecommitdiffstats
path: root/test/suite_dfilter
diff options
context:
space:
mode:
authorJoão Valverde <j@v6e.pt>2023-01-02 01:42:55 +0000
committerJoão Valverde <j@v6e.pt>2023-01-02 02:54:38 +0000
commitf37c7c4062db513bd4dc6fffa36a0c90c74a4339 (patch)
treeed985dcb6337e44dcb7d8d7cc275fc6af629d852 /test/suite_dfilter
parentc762d8492bea567241268d5bcbff64b8ded7596a (diff)
dfilter: Tweak representation for length-1 byte array
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>
Diffstat (limited to 'test/suite_dfilter')
-rw-r--r--test/suite_dfilter/group_syntax.py5
1 files changed, 5 insertions, 0 deletions
diff --git a/test/suite_dfilter/group_syntax.py b/test/suite_dfilter/group_syntax.py
index 89e442e539..86e351928a 100644
--- a/test/suite_dfilter/group_syntax.py
+++ b/test/suite_dfilter/group_syntax.py
@@ -188,6 +188,11 @@ class case_equality(unittest.TestCase):
dfilter = 'frame[37] == :fc'
checkDFilterCount(dfilter, 1)
+ def test_rhs_bias_3(self, checkDFilterCount):
+ # Byte 0xFC on the RHS
+ dfilter = 'frame[37] == fc:'
+ checkDFilterCount(dfilter, 1)
+
def test_rhs_literal_bias_4(self, checkDFilterCount):
# Protocol "Fibre Channel" on the RHS
dfilter = 'frame[37] == .fc'