<div dir="ltr"><div>Hello Chang,<br></div><div><br></div><div>In terms of regular arithmetic, most implementations do support more primitives than just add() and add_to_field(), mandated by the spec. For example, subtraction is also supported as well as a normal set of bitwise logical operations, such as bit_and(), bit_or() , etc. The current specification draft (v.1.1) also allows using expressions in modify_field(). The freely available compiler (p4c-bm) also supports expressions.</div><div><br></div><div>In terms of more complex/specialized functions (such as string compare you mentioned in your email), you have to be more careful. I'll start by reminding you that P4 is not a general-purpose programming language. It was specifically designed for describing packet processing in high-speed pipelines and thus has a fairly limited number of primitives that we know can be efficiently implemented (particularly in hardware). For that same reason, interfacing with C is not a goal of the language -- in the majority of real-world situations, P4 programs are not going to be run on general-purpose CPU to begin with and thus there will be no C libraries to link to.</div><div><br></div><div>Having said that, there are software implementations (such as the BMv2-simple_switch behavioral model) that can be relatively easily extended by adding new P4 primitives, implemented as C functions. Note, though, that programs using them will not be portable to other systems unless they somehow implement these primitives. Ideally, you should create a separate target (i.e. my_switch instead of simple_switch) to avoid confusion and incompatibilities, though it is not strictly required.</div><div><br></div><div>If you search this list, you'll see a couple of threads that explain how this can be done. </div><div><br></div><div>Happy hacking,</div><div>Vladimir</div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Aug 22, 2016 at 10:36 PM, Chang Liu <span dir="ltr"><<a href="mailto:gaustin909@gmail.com" target="_blank">gaustin909@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Hi, everybody,<div><br></div><div>I am a P4 newbie and I have a simple question about P4: It seems to me that doing arbitrary arithmetic operations or string comparisons is not well supported in P4 (correct me if I am wrong). So is it possible in P4 to call external C library functions? </div><div><br></div><div>Thanks for your help in advance.</div><div><br></div><div>Best</div><span><font color="#888888"><div>Chang<br><div><br></div><div><br></div></div></font></span></div>
<br>______________________________<wbr>_________________<br>
P4-dev mailing list<br>
<a href="mailto:P4-dev@lists.p4.org" target="_blank">P4-dev@lists.p4.org</a><br>
<a href="http://lists.p4.org/mailman/listinfo/p4-dev_lists.p4.org" rel="noreferrer" target="_blank">http://lists.p4.org/mailman/li<wbr>stinfo/p4-dev_lists.p4.org</a><br></blockquote></div><br><br clear="all"><div><br></div>-- <br><div data-smartmail="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><font size="4"><b>Vladimir Gurevich</b></font></div><div><font size="4"><b><br></b></font></div><div><font size="4"><b>Barefoot Networks</b></font></div><div><b><font size="2">Technical Lead, Customer Engineering</font></b></div><div><font size="2">Email: <a href="mailto:vag@barefootnetworks.com" target="_blank">vag@barefootnetworks.com</a></font></div><div><font size="2">Phone: <a href="tel:%28408%29%20833-4505" value="+14088334505" target="_blank">(408) 833-4505</a></font></div><div><br></div></div></div></div></div>
</div></div>