<div dir="ltr">Hello Ganesh,<div><br></div><div>I do not think that the proposed solutions are "a hack". You need to consider how exactly this "separate ingress logic per port" is implemented in these routers. Obviously, if the data plane is done in the software then anything is possible, but if you closely examine a modern high-speed dataplane, you will find out that the algorithm is more-or-less the same as was proposed by Hardik. Instead, it is the control plane (e.g. your NOS command line) that creates *an illusion* of these separate tables. </div><div><br></div><div>There are certainly other methods to achieve that in pure P4 (in this case P4_14, but P4_16 can be used too) and, again, the control plane will create an allusion of this binding. </div><div>For example:</div><div><br></div><div><font face="monospace, monospace">action do_table_1() {}</font></div><div><font face="monospace, monospace">action do_table_2() {}</font></div><div><font face="monospace, monospace">. . . </font></div><div><font face="monospace, monospace">action do_table_n() {}</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">table my_mux {</font></div><div><font face="monospace, monospace">    reads {</font></div><div><font face="monospace, monospace">        standard_metadata.ingress_port : exact;</font></div><div><font face="monospace, monospace">    }</font></div><div><font face="monospace, monospace">    actions {</font></div><div><font face="monospace, monospace">        do_table_1; do_table_2; . . . do_table_N;</font></div><div><font face="monospace, monospace">    }</font></div><div><font face="monospace, monospace">}</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">control table_mux {</font></div><div><font face="monospace, monospace">    apply(my_mux) {</font></div><div><font face="monospace, monospace">        do_table_1 { apply(table_1); }</font></div><div><font face="monospace, monospace">        do_table_2 { apply(table_2); }</font></div><div><font face="monospace, monospace">        . . . </font></div><div><font face="monospace, monospace">        do_table_N { apply(table_N); }</font></div><div><font face="monospace, monospace">    }</font></div><div><font face="monospace, monospace">}</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="arial, helvetica, sans-serif">This particular method still requires 1 stage and provides flexible binding that can be changed at run-time. </font></div><div><font face="arial, helvetica, sans-serif"><br></font></div><div>Happy Hacking<br></div><div>Vladimir</div><div><br></div></div><div class="gmail_extra"><br clear="all"><div><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><font size="4"><b>Vladimir Gurevich</b></font></div><div><font size="4"><b><br></b></font></div><div><font size="4"><b>Barefoot Networks</b></font></div><div><b><font size="2">Technical Lead, Customer Engineering</font></b></div><div><font size="2">Email: <a href="mailto:vag@barefootnetworks.com" target="_blank">vag@barefootnetworks.com</a></font></div><div><font size="2">Phone: (408) 833-4505</font></div><div><br></div></div></div></div></div></div>
<br><div class="gmail_quote">On Mon, Jan 15, 2018 at 10:32 PM, Ganesh C S <span dir="ltr"><<a href="mailto:ch.sa.ganesh@gmail.com" target="_blank">ch.sa.ganesh@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>Having a global table with interface identifier looks to be a hack. <br><br>Some routers have separate ingress that can be populated with locally relevant logic. I am looking for p4 equivalent of this.<br><br></div>regs<span class="HOEnZb"><font color="#888888"><br></font></span></div><span class="HOEnZb"><font color="#888888">Ganesh <br></font></span></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><div class="gmail_quote">On Sun, Jan 14, 2018 at 5:21 AM, Hardik Soni <span dir="ltr"><<a href="mailto:hardik.soni@inria.fr" target="_blank">hardik.soni@inria.fr</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div style="font-family:georgia,serif;font-size:12pt;color:#000000"><div>put <span style="font-size:12pt">InControl.inputPort as a match field for the tables.</span></div><div><span style="font-size:12pt"><br></span></div><div><span name="x"></span><div><span style="font-family:georgia,serif">-Hardik</span></div><span name="x"></span><br></div><hr id="m_4652078763104620743m_3290089277378536229zwchr"><blockquote style="border-left:2px solid #1010ff;margin-left:5px;padding-left:5px;color:#000;font-weight:normal;font-style:normal;text-decoration:none;font-family:Helvetica,Arial,sans-serif;font-size:12pt"><b>From: </b>"Ganesh C S" <<a href="mailto:ch.sa.ganesh@gmail.com" target="_blank">ch.sa.ganesh@gmail.com</a>><br><b>To: </b><a href="mailto:p4-dev@lists.p4.org" target="_blank">p4-dev@lists.p4.org</a><br><b>Sent: </b>Sunday, 14 January, 2018 12:16:06 PM<br><b>Subject: </b>[P4-dev] Binding a table to an interface<div><div class="m_4652078763104620743h5"><br><div><br></div><div dir="ltr"><div dir="ltr"><div><div><div>Hi,<br></div><div><br></div>I am new to <span class="m_4652078763104620743m_3290089277378536229gmail-il">P4</span> and am trying to bind specific match-action tables to interfaces. In my case, a packet received on ingress interface A, it should look at table A. Similarly, ingress interface B should look at table B and so on.<br><div><br></div></div>Any way of binding the tables to the interfaces ?<br><div><br></div></div>regs<div class="m_4652078763104620743m_3290089277378536229gmail-m_-6862218484120099254gmail-yj6qo m_4652078763104620743m_3290089277378536229gmail-m_-6862218484120099254gmail-ajU"><div id="m_4652078763104620743m_3290089277378536229gmail-m_-6862218484120099254gmail-:om" class="m_4652078763104620743m_3290089277378536229gmail-m_-6862218484120099254gmail-ajR"><img class="m_4652078763104620743m_3290089277378536229gmail-m_-6862218484120099254gmail-ajT m_4652078763104620743m_3290089277378536229gmail-CToWUd" src="https://ssl.gstatic.com/ui/v1/icons/mail/images/cleardot.gif">Ganesh</div></div></div></div><br></div></div>______________________________<wbr>_________________<br>P4-dev mailing list<br><a href="mailto:P4-dev@lists.p4.org" target="_blank">P4-dev@lists.p4.org</a><br><a href="http://lists.p4.org/mailman/listinfo/p4-dev_lists.p4.org" target="_blank">http://lists.p4.org/mailman/li<wbr>stinfo/p4-dev_lists.p4.org</a></blockquote><div><br></div></div></div></blockquote></div><br></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>