Skip to content

Tool doesn't handle default transitions in the parser #30

Description

@rajkiranjoshi

The tool runs into errors for PcapPlusPlus and Scapy backends when the defined parser in P4 program contains a default transition to the next parser state. The type of error varies depending on how the default transition is:

  1. Default transition via a transition select block: In this case the error is TypeError: 'NoneType' object has no attribute '__getitem__'

  2. Default transition which is directly specified like transition parse_next_state: In this case the error is KeyError: u'bos'. Here the p4c compiler would merge the parser states and the said transition actually doesn't exist. This is a right thing to do from P4 perspective, but it confuses the tool.

Attached zip contains:

  1. perc-tcp-options.p4: by default it is a working P4 file. Follow comments around "BUGGY Line #⁠1" and "BUGGY Line #⁠2" to reproduce the two error respectively. Reproduce only one error at a time.
  2. graphs/ParseGraph-works.pdf: a working parser graph
  3. graphs/ParseGraph-bug_line1.pdf: parser graph corresponding to the first error.
  4. graphs/ParseGraph-bug_line2.pdf: parser graph corresponding to the second error.

perc-tcp-options.zip

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Fields

No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions