<html>
  <head>
    <meta content="text/html; charset=windows-1252"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    Hi Yuliang,<br>
    <br>
    you can use field list calculation (see sec. 4 "Checksums and
    Hash-value generators" of the language specification). For instance,
    you define a field list which is a structure containing all the
    header fields you want to concat, like follows:<br>
    <br>
    field_list tuple_fl {<br>
      headerX.a;<br>
      headerX.b;<br>
      headerX.c;<br>
      headerY.a;<br>
      headerY.b;<br>
    }<br>
    <br>
    then you define a field list calculation which maps the result of a
    function computed over a field list to an integer value, like
    follows:<br>
    <br>
    field_list_calculation tuple_xor {<br>
        input {<br>
            tuple_fl;<br>
        }<br>
        algorithm : xor16; // a list of the supported algorithms is
    provided within the aforementioned sec. of the specification<br>
        output_width : 16;<br>
    }<br>
    <br>
    <br>
    Then, you need to copy the tuple_xor value first in a metadata and
    later in a register by calling an action that could be defined like
    follows:<br>
    <br>
    action set_xor_value(base, count) {<br>
        modify_field_with_hash_based_offset(your_metadata.tuple_xor,
    base, tuple_xor, ecmp_count); <br>
        register_write(register_name, index, your_metadata.tuple_xor)<br>
    }<br>
    <br>
    While back, the operation above could not be performed in one step,
    because the "modify_field_with_hash_based_offset" didn't accept a
    register as 1st argument. Today, I'm not sure that this is still the
    case.<br>
    <br>
    Of course, finally, you also need a table that triggers the action
    above.<br>
    <br>
    There should be the flowlet switching example that performs a
    similar operation at<br>
<a class="moz-txt-link-freetext" href="https://github.com/p4lang/tutorials/tree/master/SIGCOMM_2015/flowlet_switching">https://github.com/p4lang/tutorials/tree/master/SIGCOMM_2015/flowlet_switching</a><br>
    <br>
    Hope that this helps,<br>
    Salvatore<br>
    <br>
    <div class="moz-cite-prefix">On 04/01/2016 02:58 AM, Yuliang Li
      wrote:<br>
    </div>
    <blockquote
cite="mid:CAHHgZANreB=22uk8PrTDKysoQEUPsc7LExoikHaOUPcPc0RcHQ@mail.gmail.com"
      type="cite">
      <meta http-equiv="Content-Type" content="text/html;
        charset=windows-1252">
      <div dir="ltr"><span style="font-size:12.8px">Hi,</span>
        <div style="font-size:12.8px"><br>
        </div>
        <div style="font-size:12.8px">I need to xor the 5-tuple of each
          packet into a register. So I need something like concat(srcip,
          dstip, srcport, dstport, protocol), and xor it to my register.
          Does anyone know how to do it in p4 data plane?</div>
        <div style="font-size:12.8px"><br>
        </div>
        <div style="font-size:12.8px">Thanks,</div>
        <div style="font-size:12.8px">Yuliang</div>
      </div>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">_______________________________________________
P4-dev mailing list
<a class="moz-txt-link-abbreviated" href="mailto:P4-dev@lists.p4.org">P4-dev@lists.p4.org</a>
<a class="moz-txt-link-freetext" href="http://lists.p4.org/mailman/listinfo/p4-dev_lists.p4.org">http://lists.p4.org/mailman/listinfo/p4-dev_lists.p4.org</a></pre>
    </blockquote>
    <br>
    <pre class="moz-signature" cols="72">-- 
Salvatore Signorello
PhD student of the SEDAN research group at SnT

Interdisciplinary Centre for Security, Reliability and Trust
University of Luxembourg
<a class="moz-txt-link-freetext" href="http://wwwen.uni.lu/snt/people/salvatore_signorello">http://wwwen.uni.lu/snt/people/salvatore_signorello</a></pre>
  </body>
</html>