<p dir="ltr">Thanks Antonin!</p>
<p dir="ltr">Ch</p>
<div class="gmail_quote">On Jun 20, 2016 6:38 PM, "Antonin Bas" <<a href="mailto:antonin@barefootnetworks.com">antonin@barefootnetworks.com</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Cool, thanks for letting me know<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Jun 20, 2016 at 2:37 PM, Javier <span dir="ltr"><<a href="mailto:richardqa@gmail.com" target="_blank">richardqa@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div><div>It works now,<br><br></div>Thank you so much Antonin<br><br></div>regards<span><font color="#888888"><br></font></span></div><span><font color="#888888">Javier<br></font></span></div><div><div><div class="gmail_extra"><br><div class="gmail_quote">2016-06-20 17:26 GMT-03:00 Javier <span dir="ltr"><<a href="mailto:richardqa@gmail.com" target="_blank">richardqa@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div><div>It is "9a2d5aa38" march 24:(  <br><br></div>Please let me try to do it again with the new commit. I write then<br><br></div>Thank you so much<span><font color="#888888"><br></font></span></div><span><font color="#888888">Javier<br></font></span></div><div><div><div class="gmail_extra"><br><div class="gmail_quote">2016-06-20 17:17 GMT-03:00 Antonin Bas <span dir="ltr"><<a href="mailto:antonin@barefootnetworks.com" target="_blank">antonin@barefootnetworks.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">What is the latest commit in your behavioral-model clone? Because I added modulo support this morning...<br></div><div class="gmail_extra"><div><div><br><div class="gmail_quote">On Mon, Jun 20, 2016 at 1:12 PM, Javier <span dir="ltr"><<a href="mailto:richardqa@gmail.com" target="_blank">richardqa@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div><div><div><div>Hi Antonin,<br><br></div>Thank you so much for the reply,<br><br></div>I tried to replicate the code simple_router.p4 with p4v1.1 using the ideas that you comment: "<a href="http://pastebin.com/hukUDq4e" target="_blank">http://pastebin.com/hukUDq4e</a>"<br><br></div>As you see, I added one new action "myaction" and one new table "c". <br><br></div>From command.txt, I just add one entry: <br><br>table_add c myaction 0 => 5 3 0<br><br></div>Now, in the action ""set_nhop", I changed this line:<br><br>+    ipv4.ttl = ipv4.ttl - 1;<br>-     ipv4.ttl = ipv4.ttl - routing_metadata.f1;<br><div><div><div><br></div><div>Now, I execute run_demo.sh and all ok, but when I do ping between h1 and h2  I should get this value 62? (64 - 5mod3), However i didn't get to ping between them (no reply). <br></div><div>If I change the operator '%' to '*' operator It works  64 - 3*5=49 when ping h1,h2. <br><br></div><div>Could you tell me whether am I doing something bad please?<br><br><br></div><div>Thank you in advance,<br></div><div>Javier<br></div><div><br><br> </div></div></div></div><div class="gmail_extra"><div><div><br><div class="gmail_quote">2016-06-20 15:39 GMT-03:00 Antonin Bas <span dir="ltr"><<a href="mailto:antonin@barefootnetworks.com" target="_blank">antonin@barefootnetworks.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>Hi,<br><br><br></div><div>I just noticed that modulo and divide where not supported by the P4 frontend, so I made the change. In P4v1.1, using modulo would look like this:<br></div><div>action my_action(in int<32> a, in int<32> b) {<br></div><div>    modify_field(<i>h1.f1</i>, a % b);  // a >= 0, b > 0<br></div><div>    // or <i>h1.f1</i> = a % b;<br></div><div>}<br></div><div>The second syntax is supported by the p4-hlir compiler, but I don't think it is described in the official spec.<br></div><div>This action can then be referenced by a table.<br></div><div>Really now that I have made the change in the frontend, using "modulo" is no different from using "add" or "substract". See <a href="https://github.com/p4lang/tutorials/blob/master/p4v1_1/simple_router/p4src/simple_router.p4#L129" target="_blank">https://github.com/p4lang/tutorials/blob/master/p4v1_1/simple_router/p4src/simple_router.p4#L129</a> for a P4v1.1 program.<br><br></div><div>Thanks,<br><br></div><div>Antonin<br></div></div><div class="gmail_extra"><div><div><br><div class="gmail_quote">On Mon, Jun 20, 2016 at 4:53 AM, Christian Esteve Rothenberg <span dir="ltr"><<a href="mailto:chesteve@dca.fee.unicamp.br" target="_blank">chesteve@dca.fee.unicamp.br</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Thanks Antonin for your comprehensive reply!<br>
<br>
Are you aware of any publicly available P4 code example using the<br>
modulo operation?<br>
<br>
Just a code snippet would suffice...<br>
<br>
thanks,<br>
Christian<br>
<div><div><br>
On Fri, Jun 17, 2016 at 5:05 PM, Antonin Bas<br>
<<a href="mailto:antonin@barefootnetworks.com" target="_blank">antonin@barefootnetworks.com</a>> wrote:<br>
> Hi Javier,<br>
><br>
> In P4v1.1, the only variables you have are fields (packet fields and<br>
> metadata fields), and they have global scope. These variables all have a<br>
> type which includes their bitwidth (with the exception of the very specific<br>
> variable-length field case). For example, the ethernet header can be<br>
> declared as follows:<br>
><br>
> header_type ethernet_t {<br>
>     fields {<br>
>         bit<48> dstAddr;<br>
>         bit<48> srcAddr;<br>
>         bit<16> etherType;<br>
>     }<br>
> }<br>
><br>
><br>
> Notice that all three fields are bitstrings. One can also declare fields has<br>
> signed integers (int<w>), usually this is more useful for some metadata<br>
> fields.<br>
> As mentioned in the spec, you cannot declare fields a "int" (without a<br>
> width). This is reserved for evaluation of compile-time constants. The "int"<br>
> type is used by the compiler but is hidden from the P4 programmer. For<br>
> example, let's look at the following code:<br>
> ethernet.etherType = (bit<16>) (11111111 - 1);<br>
> The compiler will use the internal "int" type to represent compile-time<br>
> constants 11111111 and 1. It will also compute the difference, 11111110,<br>
> which is also of type "int". This is what we call "arbitrary-precision<br>
> arithmetic" since the compiler can handle arbitrarily large compile time<br>
> constants. Finally the compiler should give you a warning because 11111110<br>
> cannot be represented using 16 bits and the most significant bits will be<br>
> lost.<br>
><br>
> Best,<br>
><br>
> Antonin<br>
><br>
><br>
> On Thu, Jun 16, 2016 at 4:13 PM, Javier <<a href="mailto:richardqa@gmail.com" target="_blank">richardqa@gmail.com</a>> wrote:<br>
>><br>
>> Hi everyone,<br>
>><br>
>> I am trying to use the operations on "arbitrary-precison constant<br>
>> integers", however I dont get to know how to declare these constant<br>
>> integers. In the P4 spec for v1.1 tell that "the only values that can have<br>
>> the type int are compile-time constants" but it doesn't show how to use it.<br>
>> For example, i want to use the operator modulo to get the modulo of two<br>
>> variables, where and how should I declare these variables?.<br>
>><br>
>> Thank in advance,<br>
>> Javier<br>
>><br>
>><br>
>> --<br>
>> Saludos Cordiales<br>
>> Javier<br>
>> Fingerprint: 7AF8 4E03 66C2 2663 3A77  7067 6B5A D8F9 EE91 47BE<br>
>><br>
>> _______________________________________________<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/listinfo/p4-dev_lists.p4.org</a><br>
><br>
><br>
><br>
><br>
> --<br>
> Antonin<br>
><br>
> _______________________________________________<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/listinfo/p4-dev_lists.p4.org</a><br>
</div></div></blockquote></div><br><br clear="all"><br></div></div><span><font color="#888888">-- <br><div data-smartmail="gmail_signature"><div dir="ltr">Antonin<br></div></div>
</font></span></div>
</blockquote></div><br><br clear="all"><br></div></div><span><font color="#888888">-- <br></font></span><div data-smartmail="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><span><font color="#888888"><div>Saludos Cordiales<br>Javier<br>PhD Student (UNICAMP)<br><a href="http://www.linkedin.com/in/richardqa" target="_blank">http://www.linkedin.com/in/richardqa</a><br></div></font></span><span>Fingerprint: 7AF8 4E03 66C2 2663 3A77  7067 6B5A D8F9 EE91 47BE<br></span></div></div></div></div></div></div></div></div></div></div></div></div></div></div>
</div>
</blockquote></div><br><br clear="all"><br></div></div><span><font color="#888888">-- <br><div data-smartmail="gmail_signature"><div dir="ltr">Antonin<br></div></div>
</font></span></div>
</blockquote></div><br><br clear="all"><br>-- <br><div data-smartmail="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div>Saludos Cordiales<br>Javier<br>PhD Student (UNICAMP)<br><a href="http://www.linkedin.com/in/richardqa" target="_blank">http://www.linkedin.com/in/richardqa</a><br></div>Fingerprint: 7AF8 4E03 66C2 2663 3A77  7067 6B5A D8F9 EE91 47BE<br></div></div></div></div></div></div></div></div></div></div></div></div></div></div>
</div>
</div></div></blockquote></div><br><br clear="all"><br>-- <br><div data-smartmail="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div>Saludos Cordiales<br>Javier<br>PhD Student (UNICAMP)<br><a href="http://www.linkedin.com/in/richardqa" target="_blank">http://www.linkedin.com/in/richardqa</a><br></div>Fingerprint: 7AF8 4E03 66C2 2663 3A77  7067 6B5A D8F9 EE91 47BE<br></div></div></div></div></div></div></div></div></div></div></div></div></div></div>
</div>
</div></div></blockquote></div><br><br clear="all"><br>-- <br><div data-smartmail="gmail_signature"><div dir="ltr">Antonin<br></div></div>
</div>
</blockquote></div>