<div dir="ltr"><div><div><div><div><div><div>Hi Swaroop,<br><br></div>Sorry I sent you the wrong link, here is the correct one: <a href="https://github.com/p4lang/p4-hlir/blob/master/p4_hlir/frontend/primitives.json#L61">https://github.com/p4lang/p4-hlir/blob/master/p4_hlir/frontend/primitives.json#L61</a><br><br></div>As for your questions:<br><br></div>1) <i>myfield</i> is independent of the register, it should be a (any) header field / metadata field. Using the register name here will result in an error.<br><br></div>2) Please submit an issue here: <a href="https://github.com/p4lang/p4c-behavioral/issues">https://github.com/p4lang/p4c-behavioral/issues</a> for the Python error you are seeing. You can just avoid using 'static' in your P4 program for now. I am pretty sure this attribute is ignored by the behavioral-model anyway.<br><br></div>Thanks,<br><br></div>Antonin<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Aug 10, 2015 at 8:07 AM, Swaroop Thool <span dir="ltr"><<a href="mailto:swaroopthool1991@outlook.com" target="_blank">swaroopthool1991@outlook.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">


<div><div dir="ltr">Hi Antonin,<br><br>Thanks for the reply. <br>When I used the lines mentioned by you:<br><br><div>register_read(<i>myfield</i>, r, runTimeValueofOtherMetadata); <i><br></i></div><div>add_to_field(<i>myfield</i>, 0x01);<br></div>register_write(r, runTimeValueofOtherMetadata, <i>myfield</i>); <br><br>Which <i>"</i><i><i>myfield</i>" actually here related to register r ? Can I use different field reference(e.g. some metadata field ref) instead of it?<br><br></i><br>I was not getting compile error at start.It compiled for few lines however, later I got error stated as follows:<br><br><i>/home/swaroop/p4-other/p4factory/submodules/p4c-behavioral/p4c_bm/shell.py p4src/sample.p4 --gen-dir=/home/swaroop/p4-other/p4factory/targets/sample/build//bm/ --thrift --public-inc-path=/home/swaroop/p4-other/p4factory/targets/sample/build//inc/p4_sim --p4-prefix=sample<br>WARNING: No error rule is defined for exclusive state 'pragma'<br>WARNING: Token 'DIVIDE' defined, but not used<br>WARNING: Token 'PPHASH' defined, but not used<br>WARNING: Token 'MOD' defined, but not used<br>WARNING: There are 3 unused tokens<br>parsing successful<br>Semantic warning: action 'no_op' is not reachable and will be removed<br>semantic checking successful<br>Header type standard_metadata_t not byte-aligned, adding padding<br>validating:  True<br>validating:  True<br>validating:  True<br>validating:  True<br>Generating files in directory /home/swaroop/p4-other/p4factory/targets/sample/build/bm<br>total phv length (in bytes): 124<br>Traceback (most recent call last):<br>  File "/home/swaroop/p4-other/p4factory/submodules/p4c-behavioral/p4c_bm/shell.py", line 130, in <module><br>    main()<br>  File "/home/swaroop/p4-other/p4factory/submodules/p4c-behavioral/p4c_bm/shell.py", line 124, in main<br>    dump_yaml = args.dump_yaml)<br>  File "/home/swaroop/p4-other/p4factory/submodules/p4c-behavioral/p4c_bm/smart.py", line 1141, in render_dict_create<br>    render_dict_populate_registers(render_dict, hlir)<br>  File "/home/swaroop/p4-other/p4factory/submodules/p4c-behavioral/p4c_bm/smart.py", line 1076, in render_dict_populate_registers<br>    r_info["binding"] = ("static", table)<br>UnboundLocalError: local variable 'table' referenced before assignment<br>make: *** [/home/swaroop/p4-other/p4factory/targets/sample/build//inc/p4_sim/rmt.h] Error 1<br><br><br>P.S: Repository by the Link is not accessible </i><br><a href="https://github.com/barefootnetworks/p4-hlir/blob/master/p4_hlir/frontend/primitives.json#L61" target="_blank"></a><a href="https://github.com/barefootnetworks/p4-hlir/blob/master/p4_hlir/frontend/primitives.json#L61" target="_blank">https://github.com/barefootnetworks/p4-hlir/blob/master/p4_hlir/frontend/primitives.json#L61</a><br><br><br>Thanks,<br>Swaroop <br><br><div><hr>Date: Wed, 5 Aug 2015 14:29:07 -0700<br>Subject: Re: [P4-dev] Doubts Regarding use of Register<br>From: <a href="mailto:antonin@barefootnetworks.com" target="_blank">antonin@barefootnetworks.com</a><br>To: <a href="mailto:swaroopthool1991@outlook.com" target="_blank">swaroopthool1991@outlook.com</a><br>CC: <a href="mailto:p4-dev@p4.org" target="_blank">p4-dev@p4.org</a><div><div class="h5"><br><br><div dir="ltr"><div>Hi Swaroop,<br><br></div>Thanks for your interest. I will give more details inline. However the basic answer to all your questions is that P4 registers are almost not supported at all (yet) in the behavioral model software switch. Some stateful operations are supported, but differe from what is in the spec.<br><div><br><div>On Wed, Aug 5, 2015 at 12:08 PM, Swaroop Thool <span dir="ltr"><<a href="mailto:swaroopthool1991@outlook.com" target="_blank">swaroopthool1991@outlook.com</a>></span> wrote:<br><blockquote style="border-left:1px #ccc solid;padding-left:1ex">


<div><div dir="ltr">


<div dir="ltr"><font style="font-size:12pt" face="Calibri" size="3"><span style="font-size:12pt"><span dir="ltr">Hi all ,<br>

<br>

Thanks for the answers. Few more questions:<br>

If I write-<br>

       register r {<br>

            width : 9;<br>

            static : table_which_invokes_register;<br>

            instance_count : 500;<br>

            attributes : saturating; }<br>

<br>

1) If I create register array of 500(cells) as above, is it like 1-D array whose location can be read/write? How to access that because I am getting syntax error when I used modify_field(). What is the proper syntax if I want to put some value at run-time generated location of array, say 50?<br></span></span></font></div></div></div></blockquote><div><br></div><div>You can do this, just not with modify_field(). You need to use register_read() and register_write(), which are described here: <a href="https://github.com/barefootnetworks/p4-hlir/blob/master/p4_hlir/frontend/primitives.json#L61" target="_blank">https://github.com/barefootnetworks/p4-hlir/blob/master/p4_hlir/frontend/primitives.json#L61</a><br></div><div>Something like this should work in an action:<br></div><div>register_read(<i>my_field</i>, r, 50);<br></div><div>add_to_field(<i>my_field</i>, 0xaba);<br></div><div>register_write(r, 50, <i>my_field</i>);<br></div><div>As you can see you can read / write a register, and once the value is in a field, you can do arithmetic on it. However you cannot operate directly on the register (for now).<br></div><div> </div><blockquote style="border-left:1px #ccc solid;padding-left:1ex"><div><div dir="ltr"><div dir="ltr"><font style="font-size:12pt" face="Calibri" size="3"><span style="font-size:12pt"><span dir="ltr"></span></span></font><br><font style="font-size:12pt" face="Calibri" size="3"><span style="font-size:12pt"><span dir="ltr"><font style="font-size:12pt" face="Calibri" size="3"><span style="font-size:12pt"><span dir="ltr">2) Further extension to above,How can I store value 1 at location say, 50 in register array of 500
 created above and later increment value 1 to 2 when same location is 
encountered and maintain those values?<br></span></span></font></span></span></font></div></div></div></blockquote><div><br></div><div>I guess the above answers your question?<br></div><div> </div><blockquote style="border-left:1px #ccc solid;padding-left:1ex"><div><div dir="ltr"><div dir="ltr"><font style="font-size:12pt" face="Calibri" size="3"><span style="font-size:12pt"><span dir="ltr"><font style="font-size:12pt" face="Calibri" size="3"><span style="font-size:12pt"><span dir="ltr"><br></span></span></font>

3)What is layout declaration(instead of width declaration) means which require header_type_name?<br></span></span></font></div></div></div></blockquote><div><br></div><div>It is a convenient way of accessing register values using field names, no more. Let's say I have the following code:<br><br></div><div>header_type my_header_type {<br></div><div>  fields {<br></div><div>    fA: 16;<br></div><div>    fB: 32;<br></div><div>    fC: 16;<br>  }<br>}<br><br></div><div>register r2 {<br></div><div>  layout: my_header_type;<br></div><div>  instance_count: 100;<br></div><div>}<br><br></div><div>Then each cell in your register would be 64-bit wide. You would be able to write things like this: r2[50].fB<br></div><div>So it is just a way to give "meaning" to the bits in a register cell.<br></div><div>However this is NOT supported in the p4lang software switch.<br></div><div> </div><blockquote style="border-left:1px #ccc solid;padding-left:1ex"><div><div dir="ltr"><div dir="ltr"><font style="font-size:12pt" face="Calibri" size="3"><span style="font-size:12pt"><span dir="ltr"><br>

4) If I create metadata for a packet to copy some value into its field, 
will value get updated with new one for another packet when same 
metadata is used for example : modify_field (metadata, somevalue) ?</span></span></font><font style="font-size:12pt" face="Calibri" size="3"><span style="font-size:12pt"><span dir="ltr"><font style="font-size:12pt" face="Calibri" size="3"><span style="font-size:12pt"><span dir="ltr">If yes, 
then how to maintain value of individual packets as I dont want to loose that values ? <br></span></span></font></span></span></font></div></div></div></blockquote><div><br></div><div>registers will let you maintain state, the value of metadata will be overwritten with each new packet<br></div><div> </div><blockquote style="border-left:1px #ccc solid;padding-left:1ex"><div><div dir="ltr"><div dir="ltr"><font style="font-size:12pt" face="Calibri" size="3"><span style="font-size:12pt"><span dir="ltr"><font style="font-size:12pt" face="Calibri" size="3"><span style="font-size:12pt"><span dir="ltr"><br>5)OR </span></span></font>should I use add_field() in above. What is the difference between both? <br></span></span></font></div></div></div></blockquote><div><br></div><div>I don't see how this relates to 4)<br><br><br></div><div>Also since you are using it in your code, I need to point out that attributes (e.g. saturating) are not supported in the switch yet.<br><br></div><div>Best,<br><br></div><div>Antonin<br></div><div> </div><blockquote style="border-left:1px #ccc solid;padding-left:1ex"><div><div dir="ltr"><div dir="ltr"><font style="font-size:12pt" face="Calibri" size="3"><span style="font-size:12pt"><span dir="ltr"><br>

<br>

Thanks,<br>

Swaroop</span></span></font></div>
                                          </div></div>
<br>_______________________________________________<br>
P4-dev mailing list<br>
<a href="mailto:P4-dev@p4.org" target="_blank">P4-dev@p4.org</a><br>
Listinfo - <a href="http://mail.p4.org/mailman/listinfo/p4-dev_p4.org" rel="noreferrer" target="_blank">http://mail.p4.org/mailman/listinfo/p4-dev_p4.org</a><br>
Archives - <a href="http://mail.p4.org/pipermail/p4-dev_p4.org/" rel="noreferrer" target="_blank">http://mail.p4.org/pipermail/p4-dev_p4.org/</a><br></blockquote></div><br><br clear="all"><br>-- <br><div><div dir="ltr">Antonin<br></div></div>
</div></div></div></div></div>                                      </div></div>
</blockquote></div><br><br clear="all"><br>-- <br><div class="gmail_signature"><div dir="ltr">Antonin<br></div></div>
</div>