<div dir="ltr"><div><div><div><div><div><div>Hi all,<br><br></div>modify_field_with_hash_based_offset is indeed the correct primitive to use (the name is an old name, and has not been updated since v1.0.0 of the spec...). Some people use it to implement ECMP as you mentioned, although we can also use an action profile with a selector. We will actually be using this primitive to implement TCP flowlet switching at the SIGCOMM P4 tutorial on Friday. The material for the tutorial will be uploaded online next week.<br><br></div>2 things:<br></div>1) we could have modify_field accept a field_list_calculation as an input parameter. However people are usually interested in adding the hash to a base and doing a modulo operation. This primitive is therefore more general. You are actually the first person asking for this :)<br><br></div>2) if we are using the P4 software switch, I am pretty confident that using a size of 0 will crash / won't compile. I think I missed that specific behavior when I implemented the primitive. Therefore, if your output is, for example, 16 bit wide and if you use a zero base, I would set the size to 16,536.<br><br></div>Best,<br><br></div>Antonin<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Aug 19, 2015 at 11:52 AM, Salvatore Signorello <span dir="ltr"><<a href="mailto:salvatore.signorello@uni.lu" target="_blank">salvatore.signorello@uni.lu</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
  
    
  
  <div bgcolor="#FFFFFF" text="#000000">
    Hi Swaroop,<br>
    <br>
    your suggestion should do the job, I just need to set the 'size'
    argument (the 4th one) to zero, so that (base+hash_value) equals 0
    (see action description on page 38 of the spec.)<br>
    <br>
    <i>modify_field_with_hash_based_offset(salvatores_metadata.hashfield,
      0, output_value, 0);<br>
      <br>
    </i>Btw, I think that the action above has been introduced with a
    different aim in mind, that is, to generate random indexes for
    actions selection in ECMP-like cases (I'm having a déjà-vu, because
    someone else has probably pointed out such thing in a previous
    discussion).<br>
    <i><br>
    </i>That's solved, I still don't understand why the
    field_list_calculation was omitted from the accepted type for the
    modify_field option. I'm sure that the dev-fellows will shed some
    light on this soon.  <br>
    <br>
    Thanks,<br>
    Salvatore<div><div class="h5"><br>
    <br>
    <div>On 08/19/2015 07:11 PM, Swaroop Thool
      wrote:<br>
    </div>
    <blockquote type="cite">
      
      
      <div dir="ltr"><br>
        Hi Salvatore,<br>
        <br>
        Referred to given field_list_calculation. Will this work for
        you? I am not yet sure<br>
        <br>
        <i>modify_field_with_hash_based_offset(salvatores_metadata.hashfield,
          0, output_value, 1000);</i>  //where 1000 is range of hash
        value<br>
        <br>
        <br>
        Best,<br>
        Swaroop<br>
        <div>
          <hr>Date: Wed, 19 Aug 2015 15:14:07 +0200<br>
          From: <a href="mailto:salvatore.signorello@uni.lu" target="_blank">salvatore.signorello@uni.lu</a><br>
          To: <a href="mailto:ljw@barefootnetworks.com" target="_blank">ljw@barefootnetworks.com</a>; <a href="mailto:p4-dev@p4.org" target="_blank">p4-dev@p4.org</a><br>
          Subject: Re: [P4-dev] storing field_list_calculation into a
          metadata field<br>
          <br>
          Hi lj,<br>
          <br>
          thanks, more inline<br>
          <br>
          Best,<br>
          Salvo<br>
          <br>
          <div>On 08/19/2015 01:26 PM, LJ
            Wobker wrote:<br>
          </div>
          <blockquote>
            
            <div>
              <p>Per section 2.4 & 3 of the
                spec, you should be able to use</p>
              <p> </p>
              <p> <b>field_list_calculation</b>
                <b><i>output_value</i></b></p>
              <p><b><i> </i></b></p>
              <p><b><i> </i></b> to obtain a
                hash value from your set of fields.  The output of this
                (output_value) can then be referenced in action
                primitives…</p>
              <p> </p>
              <p> </p>
              <p>field_list <i>something</i> {
              </p>
              <p>    ipv4.source;</p>
              <p>    ipv4.dest;</p>
              <p>    tcp.source;</p>
              <p>    tcp.dest;</p>
              <p>}</p>
              <p> </p>
              <p>field_list_calculation <b>output_value</b>
                {</p>
              <p>    input {</p>
              <p>       <i>something</i>;</p>
              <p>    }</p>
              <p>    algorithm : crc32;</p>
              <p>    output_width : 32;</p>
              <p>}</p>
              <p> </p>
              <p>modify_field
                (salvatores_metadata.hashfield, <b>output_value</b>)</p>
              <p>//
                “salvatores_metadata.hashfield” is a 32b field defined
                in the metadata header somewhere…</p>
              <p>                                                   

              </p>
              <p>Have you tried this and found
                it not to be working?  I didn’t pull this from working
                code, but it should be pretty close… </p>
            </div>
          </blockquote>
          that's exactly what I've tried and it hasn't worked. This
          produces a semantic error for a type mismatch, that is,<br>
          <br>
          Semantic error: Error when calling primitive modify_field
          (countComp -> countComponents -> modify_field) in file
          myfile.p4 at line 40: argument 1 has type field list
          calculation, but formal src has type field, integer value<br>
          <br>
          I guess that you may have a look at the primitives.json file
          to see which are the types accepted by this primitive action.
          Field_list is not included.<br>
          <br>
          <br>
          <blockquote>
            <div>
              <p> </p>
              <p> </p>
              <p>--lj        </p>
              <p> </p>
              <p> </p>
              <p> </p>
              <p> </p>
              <p> </p>
              <p>-----Original Message-----<br>
                From: P4-dev [mailto:<a href="mailto:p4-dev-bounces@p4.org" target="_blank">p4-dev-bounces@p4.org</a>]
                On Behalf Of Salvatore Signorello<br>
                Sent: Wednesday, August 19, 2015 12:07 PM<br>
                To: <a href="mailto:p4-dev@p4.org" target="_blank">p4-dev@p4.org</a><br>
                Subject: [P4-dev] storing field_list_calculation into a
                metadata field</p>
              <p> </p>
              <p>Hi all,</p>
              <p> </p>
              <p>is there any way to store the
                hash of a fields list (so a field list </p>
              <p>calculation) into a metadata
                field for further matching into a table?</p>
              <p> </p>
              <p>The signature of the primitive
                action "modify_field" does not accept a </p>
              <p>field list as src parameter.
                Could please someone point out if there was </p>
              <p>any specific rationale for not
                allowing such thing?</p>
              <p> </p>
              <p>Note: I still refer to the old
                specification (ver 1.0.2).</p>
              <p> </p>
              <p>Best,</p>
              <p>Salvatore</p>
              <p> </p>
              <p>-- </p>
              <p>Salvatore Signorello</p>
              <p>PhD student @ SecanLab</p>
              <p> </p>
              <p>Interdisciplinary Centre for
                Security, Reliability and Trust</p>
              <p>SnT, University of Luxembourg</p>
              <p><a href="http://wwwen.uni.lu/snt/people/salvatore_signorello" target="_blank"><span style="color:windowtext;text-decoration:none">http://wwwen.uni.lu/snt/people/salvatore_signorello</span></a></p>
              <p> </p>
              <p> </p>
              <p>_______________________________________________</p>
              <p>P4-dev mailing list</p>
              <p><a href="mailto:P4-dev@p4.org" target="_blank"><span style="color:windowtext;text-decoration:none">P4-dev@p4.org</span></a></p>
              <p>Listinfo - <a href="http://mail.p4.org/mailman/listinfo/p4-dev_p4.org" target="_blank"><span style="color:windowtext;text-decoration:none">http://mail.p4.org/mailman/listinfo/p4-dev_p4.org</span></a></p>
              <p>Archives - <a href="http://mail.p4.org/pipermail/p4-dev_p4.org/" target="_blank"><span style="color:windowtext;text-decoration:none">http://mail.p4.org/pipermail/p4-dev_p4.org/</span></a></p>
            </div>
          </blockquote>
          <br>
          <pre>-- 
Salvatore Signorello
PhD student @ SecanLab

Interdisciplinary Centre for Security, Reliability and Trust
SnT, University of Luxembourg
<a href="http://wwwen.uni.lu/snt/people/salvatore_signorello" target="_blank">http://wwwen.uni.lu/snt/people/salvatore_signorello</a></pre>
          <br>
          _______________________________________________
          P4-dev mailing list
          <a href="mailto:P4-dev@p4.org" target="_blank">P4-dev@p4.org</a>
          Listinfo - <a href="http://mail.p4.org/mailman/listinfo/p4-dev_p4.org" target="_blank">http://mail.p4.org/mailman/listinfo/p4-dev_p4.org</a>
          Archives - <a href="http://mail.p4.org/pipermail/p4-dev_p4.org/" target="_blank">http://mail.p4.org/pipermail/p4-dev_p4.org/</a></div>
      </div>
    </blockquote>
    <br>
    <pre cols="72">-- 
Salvatore Signorello
PhD student @ SecanLab

Interdisciplinary Centre for Security, Reliability and Trust
SnT, University of Luxembourg
<a href="http://wwwen.uni.lu/snt/people/salvatore_signorello" target="_blank">http://wwwen.uni.lu/snt/people/salvatore_signorello</a></pre>
  </div></div></div>

<br>_______________________________________________<br>
P4-dev mailing list<br>
<a href="mailto:P4-dev@p4.org">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 class="gmail_signature"><div dir="ltr">Antonin<br></div></div>
</div>