NUS-SNL / p4-traffictool

p4-traffictool helps in packet generation, parsing and dissection for popular backends
MIT License
40 stars 10 forks source link

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

Open rajkiranjoshi opened 4 years ago

rajkiranjoshi commented 4 years ago

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

rhl-bthr commented 4 years ago

Setup: TrafficTool at dedb485, python2.7.17, p4c installed via ppa.

Unable to reproduce 1. Reproduced 2. It works for pCap++ when we don't use the standard headers, so that's where the root cause could be. Looking into it