Adding IPv6 header for INT

I wish to use IPv6 as a header for inband-network telemetry, can I get some suggestion on how to proceed from scratch?


I think you should be a little more specific about IPv6. In principle, there is no difference on having IPv4 or IPv6 as a L3 protocol to carry INT. Would you mind explaining which parts do you need suggestions about? For instance:

  • Suggestions about the P4 code or implementations working?
  • Is it about how to indicate the presence of INT in IPv6 headers (compared to a new UDP header, a 64-bit marker, etc.)?
  • Is it about which prototyping tools to use? (like BMv2 and Mininet)
  • Is it about how to add IPv6 for the collector encapsulation? (i.e., deparsing a new header)


Hi Sir,
We wish to use P4 and implement the presence of INT in IPv6 headers as well as how to add IPv6 for collector encapsulation, we require your urgent guidance for our project.
Thank you.


Sorry for the late response, but I could not access the forum these weeks. Let me answer your questions.

We wish to use P4 and implement the presence of INT in IPv6 headers

If you take a look at this document, you will see the INT data plane specification. In the current release, there are multiple ways to include INT header in IPv6 packets. The one I always use is “IN T over TCP/UDP” (I hope that this is the type of traffic you also use) modifying IPv4 DSCP (normally value 0x17) to indicate the presence of INT. For IPv6, you can use a similar value in the Traffic Class field. See here:


If you don’t like this method, you can also use the new UDP header method (using the port as an indicator) or, alternatively, a probe marker (see page 15 and on).

how to add IPv6 for collector encapsulation

Well, this could be a very long answer, but I will try to be short. The way that I have done encapsulation for INT is by setting invalid the original packet’s headers (this is usually a cloned packet using clone(CloneType.I2E, REPORT_MIRROR_SESSION_ID)). Then I generate (i.e., setting valid) the report headers, which are normally Ethernet, IPv6 (in your case) and UDP. You might also want to set valid the INT report header that comes after UDP (if you want to be close to the specification for INT reports, check page 9 and on here).

Hope that helps, but ask anything else if you need to.