  P4 is an emergent packet-processing language with which the user can describe
how the packets are to be processed in a switching element. This paper presents
a way to implement complex operations that are not natively supported in P4. In
this work, we explored two different methods to add extensions to P4: i) using
new native primitives and ii) using extern instances. As a case study, an ROHC
entity was implemented and invoked in a P4 program. The tests showed similar
relative performance in both methods in terms of normalized packet latency.
  However, extern instances appear to be more suitable for target-specific
switching applications, where the manufacturer/vendor can specify its own
specific operations without changes in the P4 syntax and semantics. Extern
instances only require changes in the target-specific backend compiler while
keeping the P4 frontend compiler unchanged. The use of externs also results in
a more elegant code solution since they are implemented outside the
switch-core, thus reducing side effects risks that can be caused by a
modification in a switch pipeline implementation.
