<div dir="ltr"><div>In the open source compiler, and perhaps some other P4_16 implementations, if statements may have little or no support (there is some support for them in the open source compiler, I believe only if it can turn them into equialent assignment statements using the ternary operator (cond) ? (true_value) : (false_value)).<br></div><div><br></div><div>A general way to handle doing conditional things in actions is not to do them in the actions, but assign values to metadata or header fields inside of actions, and then soon after applying the table in the control, use 'if' statements there on those metadata or header fields.</div><div><br></div><div>Andy<br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Nov 29, 2017 at 9:04 PM, aditya dogra <span dir="ltr"><<a href="mailto:dogra.aditya@gmail.com" target="_blank">dogra.aditya@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>Hi ,<br></div>     Is there a way in the p4-16 program we can jump out of the ingress block based on an ACL or a table entry ? <br><br></div>We have a table which specifies whether we need to encap the packet or not . If the table specifies that encap rule is specified , we should encap the packet in new format , else we should exit out of the ingress block and let it egress normally (we dont want packet to get drop). We tried "exit" statement , however "exit" in condition gives an error <span style="background-color:rgb(255,217,102)">. <b>Is there any specific way we need to do exit or jump from the control block ? </b></span><br><br><br><span style="font-family:monospace,monospace">p4c-bm2-ss --p4v 16 "insert_new_hdr.p4" -o "insert_new_hdr.p4.json"<br><b>insert_new_hdr.p4(377): error: exit: Conditional execution in actions is not supported on this target</b><br>          exit;</span><br></div><div>          ^^^^</div><div><br></div><div>Table entry is : <i>table_set_default node_source node_sourcing 3</i><br> <br></div><div><u><b>Pseudocode </b></u><br></div><div><br></div><span style="color:rgb(0,0,255)"><span style="font-family:monospace,monospace">const bit<8>  NO_OP_NODE = 0x03;</span><br></span><div><span style="color:rgb(0,0,255)"><span style="font-family:monospace,monospace"><br>ingress block {<br>    <br>    <br>    action node_sourcing(nodeType_t node_type) {<br><br>       if (NO_OP_NODE == node_type){<br>          /* COME OUT OF THE INGRESS .. DONT DO ANYTHING AT ALL */<br>          exit;<br>       }<br><br>    }<br>    <br>       <br>        table node_source {<br>            actions        = { node_sourcing; NoAction; }<br>            default_action =  NoAction();<br>    }<br>    <br>    <br>        apply {<br>            if (condition1) {<br>                <br>                <br>                node_source.apply();   ==> If the ACL ot table entry doesnt match , we should be to exit out of the ingress block and continue with the egress block .<br>    <br>    <br>                if (condition2)<br>                {<br>                     add_some_extra_header();<br>                     new_hdr.apply();<br>                } else if (condition3)<br>    <br>                {<br>                    if(new_condition)<br>                    {<br>                       add_new_hdr2_option();<br>                    }<br>                    new_hdr.apply();<br>                }<br>    <br>            }<br>        }<br>    }<br>    <br><br>}</span></span><br><br><br><div><br clear="all"><div><div><div><div class="m_6374545052259641706gmail_signature"><div dir="ltr"><font face="courier new, monospace"><font size="2"><span lang="hi"><span title="Click for alternate translations">Regards,<br>Aditya Dogra</span></span></font></font><br></div></div></div>
</div></div></div></div></div>
<br>______________________________<wbr>_________________<br>
P4-dev mailing list<br>
<a href="mailto:P4-dev@lists.p4.org">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/<wbr>listinfo/p4-dev_lists.p4.org</a><br></blockquote></div><br></div>