<div dir="ltr"><div><div><div><div>[First of all, thanks to Antonin for the inputs.]</div><div><br></div><div>Hi Vladimir/Hardik,</div><div><br></div><div></div>Do we really have a single pipeline high-speed data plane switch/router hardware ?<br></div><div><br></div><div>A quick search points me to Sl. 15 of the below presentation showing multiple ingress/egress pipelines. <br></div><div><a href="https://open-nfp.org/s/pdfs/Sponsor-Lecture-Vladimir-Data-Plane-Acceleration-at-Terabit-Speeds.pdf">https://open-nfp.org/s/pdfs/Sponsor-Lecture-Vladimir-Data-Plane-Acceleration-at-Terabit-Speeds.pdf</a> </div></div><div><br></div><div>Is this outdated ?</div><div><br></div>regs<br></div>Ganesh<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Jan 17, 2018 at 5:25 PM, 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>Hi Vladimir/Ganesh,</div><div><br></div><div>Following are two possible scenarios.</div><div><br></div><div></div><div>if the hardware router has multiple physical pipeline equivalent, then it may not be required to have a mux table in the p4 program.</div><div>Because, with this, incoming packets on two interfaces can be "programmed" to follow the first table (which implements relevant logic to the interface) of required pipeline, provided hardware supports it. </div><div>According to my understanding, this is architecture specific thing and not P4 language.</div><div>Where the hardware router facilitates the interface to pipeline table binding and P4 can allow it to program it using arch.p4. </div><div>3rd option proposed by Antonin (in the other email) can do this.</div><div>In this case, there is no need of a global table.</div><div><br></div><div>But, if there is a single physical pipeline or equivalent processing unit in the router, then all the packets from all the interfaces will go through the same first table.</div><div>Here, there is no option, but to separate ingress logic per interface using Vladimir's code.</div><div><br></div><div>If it is the first scenario, the mux will be in hardware.</div><div><br></div><div><span name="x"></span><div><span id="m_2402702872161692414_mce_caret"><span style="font-family:georgia,serif">-Hardik</span></span></div><span name="x"></span><br></div><hr id="m_2402702872161692414zwchr"><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>"Vladimir Gurevich" <<a href="mailto:vladimir.gurevich@barefootnetworks.com" target="_blank">vladimir.gurevich@<wbr>barefootnetworks.com</a>><span class=""><br><b>To: </b>"Ganesh C S" <<a href="mailto:ch.sa.ganesh@gmail.com" target="_blank">ch.sa.ganesh@gmail.com</a>><br><b>Cc: </b>"Hardik Soni" <<a href="mailto:hardik.soni@inria.fr" target="_blank">hardik.soni@inria.fr</a>>, "p4-dev" <<a href="mailto:p4-dev@lists.p4.org" target="_blank">p4-dev@lists.p4.org</a>><br></span><b>Sent: </b>Wednesday, 17 January, 2018 3:17:48 AM<br><b>Subject: </b>Re: [P4-dev] Binding a table to an interface<div><div class="h5"><br><div><br></div><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><span face="monospace, monospace" style="font-family:monospace,monospace">action do_table_1() {}</span></div><div><span face="monospace, monospace" style="font-family:monospace,monospace">action do_table_2() {}</span></div><div><span face="monospace, monospace" style="font-family:monospace,monospace">. . . </span></div><div><span face="monospace, monospace" style="font-family:monospace,monospace">action do_table_n() {}</span></div><div><span face="monospace, monospace" style="font-family:monospace,monospace"><br></span></div><div><span face="monospace, monospace" style="font-family:monospace,monospace">table my_mux {</span></div><div><span face="monospace, monospace" style="font-family:monospace,monospace">    reads {</span></div><div><span face="monospace, monospace" style="font-family:monospace,monospace">        standard_metadata.ingress_port : exact;</span></div><div><span face="monospace, monospace" style="font-family:monospace,monospace">    }</span></div><div><span face="monospace, monospace" style="font-family:monospace,monospace">    actions {</span></div><div><span face="monospace, monospace" style="font-family:monospace,monospace">        do_table_1; do_table_2; . . . do_table_N;</span></div><div><span face="monospace, monospace" style="font-family:monospace,monospace">    }</span></div><div><span face="monospace, monospace" style="font-family:monospace,monospace">}</span></div><div><span face="monospace, monospace" style="font-family:monospace,monospace"><br></span></div><div><span face="monospace, monospace" style="font-family:monospace,monospace">control table_mux {</span></div><div><span face="monospace, monospace" style="font-family:monospace,monospace">    apply(my_mux) {</span></div><div><span face="monospace, monospace" style="font-family:monospace,monospace">        do_table_1 { apply(table_1); }</span></div><div><span face="monospace, monospace" style="font-family:monospace,monospace">        do_table_2 { apply(table_2); }</span></div><div><span face="monospace, monospace" style="font-family:monospace,monospace">        . . . </span></div><div><span face="monospace, monospace" style="font-family:monospace,monospace">        do_table_N { apply(table_N); }</span></div><div><span face="monospace, monospace" style="font-family:monospace,monospace">    }</span></div><div><span face="monospace, monospace" style="font-family:monospace,monospace">}</span></div><div><span face="monospace, monospace" style="font-family:monospace,monospace"><br></span></div><div><span face="arial, helvetica, sans-serif" style="font-family:arial,helvetica,sans-serif">This particular method still requires 1 stage and provides flexible binding that can be changed at run-time. </span></div><div><span face="arial, helvetica, sans-serif" style="font-family:arial,helvetica,sans-serif"><br></span></div><div>Happy Hacking<br></div><div>Vladimir</div><div><br></div></div><div class="gmail_extra"><br clear="all"><div><div class="m_2402702872161692414gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><span size="4" style="font-size:large"><b>Vladimir Gurevich</b></span></div><div><span size="4" style="font-size:large"><b><br></b></span></div><div><span size="4" style="font-size:large"><b>Barefoot Networks</b></span></div><div><b><span size="2" style="font-size:small">Technical Lead, Customer Engineering</span></b></div><div><span size="2" style="font-size:small">Email: <a href="mailto:vag@barefootnetworks.com" target="_blank">vag@barefootnetworks.com</a></span></div><div><span size="2" style="font-size:small">Phone: (408) 833-4505</span></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><div><br></div>Some routers have separate ingress that can be populated with locally relevant logic. I am looking for p4 equivalent of this.<br><div><br></div></div>regs<span class="m_2402702872161692414HOEnZb"><span color="#888888" style="color:#888888"><br></span></span></div><span class="m_2402702872161692414HOEnZb"><span color="#888888" style="color:#888888">Ganesh <br></span></span></div><div class="m_2402702872161692414HOEnZb"><div class="m_2402702872161692414h5"><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></span><div><span style="font-family:georgia,serif">-Hardik</span></div><span></span><br></div><hr id="m_2402702872161692414m_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_2402702872161692414m_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_2402702872161692414m_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_2402702872161692414m_4652078763104620743m_3290089277378536229gmail-m_-6862218484120099254gmail-yj6qo m_2402702872161692414m_4652078763104620743m_3290089277378536229gmail-m_-6862218484120099254gmail-ajU"><div id="m_2402702872161692414m_4652078763104620743m_3290089277378536229gmail-m_-6862218484120099254gmail-:om" class="m_2402702872161692414m_4652078763104620743m_3290089277378536229gmail-m_-6862218484120099254gmail-ajR"><img class="m_2402702872161692414m_4652078763104620743m_3290089277378536229gmail-m_-6862218484120099254gmail-ajT m_2402702872161692414m_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/<wbr>listinfo/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" target="_blank">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>
</div></div></blockquote><div><br></div></div></div></blockquote></div><br></div>