[Spice-devel] [PATCH v3 16/51] Allows to specify some new attributes for wireshark
Christophe Fergeau
cfergeau at redhat.com
Thu Jul 23 07:03:42 PDT 2015
On Tue, Jul 21, 2015 at 05:45:46PM +0100, Frediano Ziglio wrote:
> To make output more useful fields from the protocol should have
> additional information like description, name, type and so on.
>
> List of attributes added:
> - ws_desc, just a simple description
> - ws_name name of the field. See below
This attribute does not seem to be used
> - ws allow to specify a description and a name. Useful as easy to
> type. If you have a name there is no sense to have no description
> - ws_type allows to override type detected, for instance to
> specify is a boolean instead of an int
> - ws_base like ws_type but for base (hexadecimal instead of decimal)
I guess you could give a list of the valid bases here
> - ws_txt and ws_txt_n allows to specify formatting. The difference
> between formatting and description is that description is static
> while these new attributes contain a formatting string as first
> argument followed by arguments representing fields or INDEX for
or the special value 'INDEX' would probably be a bit more clear
> the index if we are dumping a structure contained in an array.
> The distinction between ws_txt and ws_txt_n is the item contained
> in an array or not
'is whether the item is contained in an array or not'
> - ws_inline, this is tricky attribute. It allow to embed structure
'a tricky attribute. It allows to embed..'
> dissecting in the same function. This allow format string and other
> field (for instance switch or array sizes) to be seen by current
> generated function
'This allows... other fields ... by the function currently being
generated' ?
> - ws_as, dissect this structure as another type. Useful to avoid
> changing the protocol but show a slightly modified version.
> This is used for instance to show two fields like x and y as a
> single point. Could also be used to dump a binary data with
> more detail but avoid to change marshalling/demarshalling
"This is also used to dump binary data in wireshark with more details
without changing the current marshalling/demarshalling code (eg agent
messages or QUIC image data)"
>
> These attributes required some changes in the parser as previously
> arguments could be only integers and identifiers while they require
> string and multiple identifiers (like "this.that").
>
> In wireshark names are important as they can be used to do
> queries about packet with specific features.
>
> Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
> ---
> python_modules/ptypes.py | 29 +++++++++++++++++++++++++++--
> python_modules/spice_parser.py | 13 +++++++++++--
> 2 files changed, 38 insertions(+), 4 deletions(-)
>
> diff --git a/python_modules/ptypes.py b/python_modules/ptypes.py
> index cc6960f..bbf158e 100644
> --- a/python_modules/ptypes.py
> +++ b/python_modules/ptypes.py
> @@ -108,6 +108,26 @@ valid_attributes={
> # for a switch this indicates that on network
> # will occupy always same size (maximum size required for all members)
> 'fixedsize',
> +
> + # description
> + 'ws_desc',
> + # field name
> + 'ws_name',
> + # combine description + name
> + # name will be used for filtering
> + 'ws',
> + # type (BOOLEAN, STRINGZ)
> + 'ws_type',
> + # force wireshark base
> + 'ws_base',
> + # text to use for format, you can specify parameters
> + 'ws_txt',
> + 'ws_txt_n',
> + # put structure not in a separate function
> + # used to be able to retrieve fields from parent
> + 'ws_inline',
> + # handle this container as another type
> + 'ws_as',
> }
>
> attributes_with_arguments={
> @@ -119,6 +139,13 @@ attributes_with_arguments={
> 'minor',
> 'bytes_count',
> 'virtual',
> + 'ws',
> + 'ws_desc',
> + 'ws_type',
> + 'ws_base',
> + 'ws_txt',
> + 'ws_txt_n',
> + 'ws_as',
> }
>
> def fix_attributes(attribute_list):
> @@ -131,8 +158,6 @@ def fix_attributes(attribute_list):
> if not name in attributes_with_arguments:
> if len(lst) > 0:
> raise Exception("Attribute %s specified with options" % name)
> - elif len(lst) > 1:
> - raise Exception("Attribute %s has more than 1 argument" % name)
> attrs[name] = lst
> return attrs
>
> diff --git a/python_modules/spice_parser.py b/python_modules/spice_parser.py
> index 97af8b2..a0f969a 100644
> --- a/python_modules/spice_parser.py
> +++ b/python_modules/spice_parser.py
> @@ -3,7 +3,7 @@ import six
> try:
> from pyparsing import Literal, CaselessLiteral, Word, OneOrMore, ZeroOrMore, \
> Forward, delimitedList, Group, Optional, Combine, alphas, nums, restOfLine, cStyleComment, \
> - alphanums, ParseException, ParseResults, Keyword, StringEnd, replaceWith
> + alphanums, ParseException, ParseResults, Keyword, StringEnd, replaceWith, QuotedString
> except ImportError:
> six.print_("Module pyparsing not found.")
> exit(1)
> @@ -77,20 +77,29 @@ def SPICE_BNF():
> switch_ = Keyword("switch")
> default_ = Keyword("default")
> case_ = Keyword("case")
> + ws_ = Keyword("@ws")
> + ws_txt_ = Keyword("@ws_txt") | Keyword("@ws_txt_n")
> + ws_desc_ = Keyword("@ws_desc")
>
> identifier = Word( alphas, alphanums + "_" )
> + multi_identifier = Word( alphas, alphanums + "_." )
> enumname = Word( alphanums + "_" )
>
> integer = ( Combine( CaselessLiteral("0x") + Word( nums+"abcdefABCDEF" ) ) |
> Word( nums+"+-", nums ) ).setName("int").setParseAction(cvtInt)
>
> + string = QuotedString(quoteChar='"', escChar='\\')
> +
> typename = identifier.copy().setParseAction(lambda toks : ptypes.TypeRef(str(toks[0])))
>
> # This is just normal "types", i.e. not channels or messages
> typeSpec = Forward()
>
> attributeValue = integer ^ identifier
> - attribute = Group(Combine ("@" + identifier) + Optional(lparen + delimitedList(attributeValue) + rparen))
> + ws = ws_ + lparen + string + comma + multi_identifier + rparen
> + ws_desc = ws_desc_ + lparen + string + rparen
> + ws_txt = ws_txt_ + lparen + string + ZeroOrMore(comma + multi_identifier) + rparen
> + attribute = Group(ws | ws_desc | ws_txt | (Combine ("@" + identifier) + Optional(lparen + delimitedList(attributeValue) + rparen)))
> attributes = Group(ZeroOrMore(attribute))
> arraySizeSpecImage = Group(image_size_ + lparen + integer + comma + identifier + comma + identifier + rparen)
> arraySizeSpecBytes = Group(bytes_ + lparen + identifier + comma + identifier + rparen)
> --
> 2.1.0
>
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/spice-devel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/spice-devel/attachments/20150723/8d0db15d/attachment.sig>
More information about the Spice-devel
mailing list