[P4-dev] Parsing TLV options for ICMPv6 ND (header stack?)
antonin at barefootnetworks.com
Thu Jun 30 13:31:50 EDT 2016
What you are trying to do is not very easy in P4. I encourage you to look
at my TLV_parsing example on p4lang (
which parse IPv4 options. In a nutshell, I use different header stacks, one
for each option type. The size of each stack has to be known at compile
time, which means you have to provide a upper bound on the number of
options for each type. When parsing, you extract to the correct stack based
on the option type.
On Thu, Jun 30, 2016 at 8:55 AM, Baptiste Jonglez <
baptiste at bitsofnetworks.org> wrote:
> I haven't found a way to parse a stack of headers in P4, because the
> number of elements in the stack (i.e. the number of "extract" operations
> that needs to be run) is unknown at compile time.
> I was attempting to do this to parse ICMPv6 ND options, but maybe this is
> the wrong approach to this problem.
> Conceptually, ICMPv6 looks like this (on top of IPv6):
> type: 8;
> code: 8;
> checksum: 16;
> Then, depending on the type, the format is different. For NS (type 135),
> which is what I am interested to parse, the format is:
> reserved: 32;
> targetAddr: 128;
> options: *;
> So far so good. The difficult part is "options", which is a list of one
> or more options. Each option is TLV-formatted, see
> https://tools.ietf.org/html/rfc4861#section-4.6 for details.
> I think the only way to parse options is to first look at the IPv6 packet
> length (to see if there actually are options), and then walk the option
> list using the "length" field of each TLV. Now that I think about it, the
> "header stack" idea will not work here, because not all options have the
> same length.
> Is parsing this even possible in P4? If so, what would be the best
> PS: I also have trouble implementing the checksum, since it encompasses
> the whole ICMPv6 packet, but that will be for another email.
> P4-dev mailing list
> P4-dev at lists.p4.org
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the P4-dev