<div dir="ltr"><div><div><div>Peter,<br><br></div>Thanks for the quote. This paragraph is not very clear to me. We should consider rewriting it. We also need to consider updating the frontend to allow multiple invocations of the same table in the control flow. The target specific backends can then choose to enforce their own restrictions, and guide the P4 programmer accordingly. However it is not as simple a change as fixing boolean expression parsing :)<br><br></div>Best,<br><br></div>Antonin<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Aug 13, 2015 at 12:13 PM, Peter Newman <span dir="ltr"><<a href="mailto:petenewm@cisco.com" target="_blank">petenewm@cisco.com</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">
    <div>Antonin,<br>
      <br>
      Glad to hear it is not simply my own ignorance.<br>
      <br>
      Top of page 55, section 12 in the spec:<br>
      "If the same table is invoked in multiple places from the control<br>
      flow, those invocations all refer to the same table instance; that
      is, there is only one set<br>
      of statistics, counters, meters, and match+action entries for the
      table. Targets may impose<br>
      limitations on these table invocations such as disallowing
      recursion, only allowing<br>
      tables to be referenced once, or only allowing control flow
      functions to be referenced<br>
      once."<br>
      <br>
      I was attempting a very simple control flow for a trivial test
      program of the form:<br>
      <br>
      if you can route, do ip routing followed by layer 2 forwarding<br>
      else just do layer 2 forwarding<span class="HOEnZb"><font color="#888888"><br>
      <br>
      --Peter</font></span><div><div class="h5"><br>
      <br>
      On 8/13/2015 12:04 PM, Antonin Bas wrote:<br>
    </div></div></div><div><div class="h5">
    <blockquote type="cite">
      
      <div dir="ltr">
        <div>
          <div>
            <div>
              <div>
                <div>
                  <div>
                    <div>Hi,<br>
                      <br>
                    </div>
                    I don't think the spec allows this. Could you share
                    the page number with me?<br>
                  </div>
                  <div><br>
                    Our compiler only allows applying a given table
                    once.<br>
                  </div>
                  So doing this:<br>
                </div>
                apply(table1);<br>
              </div>
              apply(table2);<br>
            </div>
            apply(table1);<br>
          </div>
          in a control flow is forbidden by the p4lang frontend (for
          now).<br>
          <br>
        </div>
        <div>Some cases which should be ok are handled incorrectly by
          the compiler. For example:<br>
        </div>
        <div>if(<i>some_condition</i>) {<br>
        </div>
        <div>  apply(table1);<br>
        </div>
        <div>  apply(table2);<br>
        </div>
        <div>}<br>
        </div>
        <div>else {<br>
        </div>
        <div>  apply(table1);<br>
        </div>
        <div>  apply(table3);<br>
        </div>
        <div>}<br>
          <br>
        </div>
        <div>However most of the times, these cases can easily be
          rewritten in a form that will be accepted by the compiler. In
          our example:<br>
          apply(table1);<br>
          if(<i>some_condition</i>) {<br>
          <div>  apply(table2);<br>
          </div>
          <div>}<br>
          </div>
          <div>else {<br>
          </div>
          <div>  apply(table3);<br>
          </div>
          }<br>
        </div>
      </div>
      <div class="gmail_extra"><br>
        <div class="gmail_quote">On Thu, Aug 13, 2015 at 11:59 AM, Peter
          Newman <span dir="ltr"><<a href="mailto:petenewm@cisco.com" target="_blank">petenewm@cisco.com</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">
              <div>Antonin,<br>
                <br>
                Thanks. I guess it is time to update my tool set.<br>
                <br>
                At the risk of sharing my ignorance with the entire
                community I also get the following compiler error:<br>
                <br>
                ERROR: Table 'layer2_forwarding' is invoked multiple
                times.<br>
                <br>
                The spec specifically states that I can invoke the same
                table multiple times as long as it is the same identical
                table. Is this another old compiler version problem? I'm
                invoking the compiler with the command: 'p4-validate'.<span><font color="#888888"><br>
                    <br>
                    --Peter</font></span>
                <div>
                  <div><br>
                  </div>
                </div>
              </div>
            </div>
          </blockquote>
        </div>
      </div>
    </blockquote>
  </div></div></div>

</blockquote></div><br><br clear="all"><br>-- <br><div class="gmail_signature"><div dir="ltr">Antonin<br></div></div>
</div>