<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:Helvetica;
        panose-1:2 11 6 4 2 2 2 2 2 4;}
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.msonormal0, li.msonormal0, div.msonormal0
        {mso-style-name:msonormal;
        mso-margin-top-alt:auto;
        margin-right:0in;
        mso-margin-bottom-alt:auto;
        margin-left:0in;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
span.apple-converted-space
        {mso-style-name:apple-converted-space;}
span.EmailStyle19
        {mso-style-type:personal;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
span.EmailStyle21
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.25in 1.0in 1.25in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-US link=blue vlink=purple><div class=WordSection1><p class=MsoNormal>Hi Omer,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Thanks much for the clarification.  Also, congratulations on the backend SAI API generation work!<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Best,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Hemant<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><div><div style='border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in'><p class=MsoNormal><b>From:</b> P4-dev <p4-dev-bounces@lists.p4.org> <b>On Behalf Of </b>Omer Shabtai<br><b>Sent:</b> Wednesday, September 12, 2018 3:55 PM<br><b>To:</b> Calin Cascaval <cascaval@barefootnetworks.com>; Mihai Budiu <mbudiu@vmware.com>; p4-dev@lists.p4.org<br><b>Subject:</b> Re: [P4-dev] control-plane API generation<o:p></o:p></p></div></div><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Hi Hemant,<o:p></o:p></p><p class=MsoNormal>Regarding the June 18 P4 to SAI demo, We have shown how SAI (fixed API) can be <u>extended</u> via P4, as a hybrid-programmable approach.<o:p></o:p></p><p class=MsoNormal>Currently the SAI API extensions (flexSAI) headers are auto generated at the backend layer.<o:p></o:p></p><p class=MsoNormal>SAI is indeed ASIC independent, but the SAI community is aiming for a specific target architecture to be supported by all vendors with a well-defined pipeline, known as SAI behavioral model, and can be found here: <o:p></o:p></p><p class=MsoNormal><a href="https://github.com/opencomputeproject/SAI/tree/master/doc/behavioral%20model">https://github.com/opencomputeproject/SAI/tree/master/doc/behavioral%20model</a><o:p></o:p></p><p class=MsoNormal>flexSAI output will be generated by compiling against the SAI p4 target, so having the flexSAI API implemented at the backend layer seemed like a good option.<o:p></o:p></p><p class=MsoNormal>For more details, please refer to <a href="https://github.com/opencomputeproject/SAI/tree/master/flexsai/p4">https://github.com/opencomputeproject/SAI/tree/master/flexsai/p4</a><o:p></o:p></p><p class=MsoNormal>I hope this will clarify the flexSAI API implementation. <o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Thanks,<o:p></o:p></p><p class=MsoNormal>Omer Shabtai<o:p></o:p></p><p class=MsoNormal>Mellanox<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p><div><div style='border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in'><p class=MsoNormal><b>From:</b> P4-dev <<a href="mailto:p4-dev-bounces@lists.p4.org">p4-dev-bounces@lists.p4.org</a>> <b>On Behalf Of </b>Calin Cascaval via P4-dev<br><b>Sent:</b> Tuesday, September 11, 2018 8:42 AM<br><b>To:</b> Mihai Budiu <<a href="mailto:mbudiu@vmware.com">mbudiu@vmware.com</a>><br><b>Cc:</b> p4-dev <<a href="mailto:p4-dev@lists.p4.org">p4-dev@lists.p4.org</a>><br><b>Subject:</b> Re: [P4-dev] control-plane API generation<o:p></o:p></p></div></div><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Forking the compiler is not ideal since it will be hard to get back contributions from other developers. I would rather make an effort to agree on where these APIs should be generated in a uniform manner across all backends. As Antonin explained, the current point has been agreed upon after quite a bit of discussion and I haven't yet seen an instance where the point needs to be moved.<o:p></o:p></p><div><div><p class=MsoNormal><span style='font-size:9.0pt;font-family:"Helvetica",sans-serif;color:black'><br>--<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:9.0pt;font-family:"Helvetica",sans-serif;color:black'>Thanks, Calin<o:p></o:p></span></p></div></div><div><p class=MsoNormal style='margin-bottom:12.0pt'><o:p> </o:p></p><blockquote style='margin-top:5.0pt;margin-bottom:5.0pt'><div><p class=MsoNormal>On Sep 10, 2018, at 22:31, Mihai Budiu <<a href="mailto:mbudiu@vmware.com">mbudiu@vmware.com</a>> wrote:<o:p></o:p></p></div><p class=MsoNormal><o:p> </o:p></p><div><div><p class=MsoNormal>The compiler is open-source and nothing prevents you from forking it and moving the API generation to another place. Of course, then you will have to keep the fork updated, which is not easy long term. It is a good idea to have the API match the program that the user wrote, and not a transformed version of that program. If the API matches a modified program then you have to write down the rules by which the program is modified so people will know how to implement the API. It is much simpler to have no special rules whatsoever.<o:p></o:p></p></div><div><p class=MsoNormal> <o:p></o:p></p></div><div><p class=MsoNormal>Mihai<o:p></o:p></p></div><div><p class=MsoNormal> <o:p></o:p></p></div><div><div style='border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in'><div><p class=MsoNormal><b>From:</b><span class=apple-converted-space> </span>P4-dev <<a href="mailto:p4-dev-bounces@lists.p4.org"><span style='color:purple'>p4-dev-bounces@lists.p4.org</span></a>><span class=apple-converted-space> </span><b>On Behalf Of<span class=apple-converted-space> </span></b><a href="mailto:hemant@mnkcg.com"><span style='color:purple'>hemant@mnkcg.com</span></a><br><b>Sent:</b><span class=apple-converted-space> </span>Monday, September 10, 2018 7:55 AM<br><b>To:</b><span class=apple-converted-space> </span>'Antonin Bas' <<a href="mailto:antonin@barefootnetworks.com"><span style='color:purple'>antonin@barefootnetworks.com</span></a>><br><b>Cc:</b><span class=apple-converted-space> </span>'p4-dev' <<a href="mailto:p4-dev@lists.p4.org"><span style='color:purple'>p4-dev@lists.p4.org</span></a>><br><b>Subject:</b><span class=apple-converted-space> </span>Re: [P4-dev] control-plane API generation<o:p></o:p></p></div></div></div><div><p class=MsoNormal> <o:p></o:p></p></div><div><p class=MsoNormal>Got it.  At the June 2018 P4 Workshop, in the Mellanox P4 to SAI demo, I asked where is the SAI API generated from in p4c?  I thought I heard, “by the midend”.   Since SAI is also independent of any asic, SAI API generation should also be invoked after the frontend.  Maybe, someone from Mellanox can confirm since I don’t see details in their slide nor the abstract.  I would like to what, if SAI API generation is done after the frontend processing, before any midend processing is run?<o:p></o:p></p></div><div><p class=MsoNormal> <o:p></o:p></p></div><div><p class=MsoNormal>Thanks,<o:p></o:p></p></div><div><p class=MsoNormal> <o:p></o:p></p></div><div><p class=MsoNormal>Hemant<o:p></o:p></p></div><div><p class=MsoNormal> <o:p></o:p></p></div><div><p class=MsoNormal><b>From:</b><span class=apple-converted-space> </span>Antonin Bas <<a href="mailto:antonin@barefootnetworks.com"><span style='color:purple'>antonin@barefootnetworks.com</span></a>><span class=apple-converted-space> </span><br><b>Sent:</b><span class=apple-converted-space> </span>Monday, September 10, 2018 10:09 AM<br><b>To:</b><span class=apple-converted-space> </span><a href="mailto:hemant@mnkcg.com"><span style='color:purple'>hemant@mnkcg.com</span></a><br><b>Cc:</b><span class=apple-converted-space> </span>p4-dev <<a href="mailto:p4-dev@lists.p4.org"><span style='color:purple'>p4-dev@lists.p4.org</span></a>><br><b>Subject:</b><span class=apple-converted-space> </span>Re: [P4-dev] control-plane API generation<o:p></o:p></p></div><div><p class=MsoNormal> <o:p></o:p></p></div><div><div><div><p class=MsoNormal>This is a hard rule as far as I'm concerned. We actually worked hard to ensure that API generation happens right after the frontend and does not depend on the backend (or the midend passes that this backend chooses to use). The generated P4Info message should be exactly the same independently of which backend you are using.<o:p></o:p></p></div><div><div><p class=MsoNormal>What we can do though is invoke midend passes independently of the backend in the P4Info generation code (<a href="https://emea01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fp4lang%2Fp4c%2Fblob%2Fmaster%2Fcontrol-plane%2Fp4RuntimeSerializer.cpp%23L1328&data=02%7C01%7Comers%40mellanox.com%7C060624c4bfc9438037b108d617a9612f%7Ca652971c7d2e4d9ba6a4d149256f461b%7C0%7C0%7C636722413593875904&sdata=0ARGBgkG%2FxEFV1BDLlQ7YGsRQixfll9rDhF3Nn6QtX0%3D&reserved=0" target="_blank"><span style='color:purple'>https://github.com/p4lang/p4c/blob/master/control-plane/p4RuntimeSerializer.cpp#L1328</span></a>). I believe that usually it is best avoided: you want the P4Info message / the runtime APIs to match exactly the contents of the P4 program.<o:p></o:p></p></div></div></div></div><div><div><p class=MsoNormal> <o:p></o:p></p></div><div><div><p class=MsoNormal>On Wed, Sep 5, 2018 at 1:33 PM, <<a href="mailto:hemant@mnkcg.com" target="_blank"><span style='color:purple'>hemant@mnkcg.com</span></a>> wrote:<o:p></o:p></p></div><blockquote style='border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0in;margin-bottom:5.0pt'><div><div><div><p class=MsoNormal><span style='font-size:12.0pt'>In the bmv2 backend, I see that P4Runtime/control-plane API generation is called in p4c/backends/bmv2/simple_switch/main.cpp after frontend.run().   Is this a hard rule or can one move the API generation, for example, to be after midend.process()?   </span><o:p></o:p></p></div><div><p class=MsoNormal><span style='font-size:12.0pt'> </span><o:p></o:p></p></div><div><p class=MsoNormal><span style='font-size:12.0pt'>Thanks in advance.</span><o:p></o:p></p></div><div><p class=MsoNormal><span style='font-size:12.0pt'> </span><o:p></o:p></p></div><div><p class=MsoNormal><span style='font-size:12.0pt'>Hemant</span><o:p></o:p></p></div><div><p class=MsoNormal> <o:p></o:p></p></div><div><p class=MsoNormal>MNK Consulting<o:p></o:p></p></div><div><p class=MsoNormal><a href="https://emea01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fmnkcg.com%2F&data=02%7C01%7Comers%40mellanox.com%7C060624c4bfc9438037b108d617a9612f%7Ca652971c7d2e4d9ba6a4d149256f461b%7C0%7C0%7C636722413593875904&sdata=CrmrIbDwCNaJR2t1FMIihfVBNy%2BtA3YrAJoKSs9cL1Y%3D&reserved=0" target="_blank"><span style='color:purple'>http://mnkcg.com</span></a><o:p></o:p></p></div><div><p class=MsoNormal> <o:p></o:p></p></div></div></div><p class=MsoNormal style='margin-bottom:12.0pt'><br>_______________________________________________<br>P4-dev mailing list<br><a href="mailto:P4-dev@lists.p4.org"><span style='color:purple'>P4-dev@lists.p4.org</span></a><br><a href="https://emea01.safelinks.protection.outlook.com/?url=http%3A%2F%2Flists.p4.org%2Fmailman%2Flistinfo%2Fp4-dev_lists.p4.org&data=02%7C01%7Comers%40mellanox.com%7C060624c4bfc9438037b108d617a9612f%7Ca652971c7d2e4d9ba6a4d149256f461b%7C0%7C0%7C636722413593875904&sdata=zyYR%2FnIc7Pu7U%2Bmm7RcHn0J3JrzPUofy1lXJiUASLPk%3D&reserved=0" target="_blank"><span style='color:purple'>http://lists.p4.org/mailman/listinfo/p4-dev_lists.p4.org</span></a><o:p></o:p></p></blockquote></div><div><p class=MsoNormal><br><br clear=all><o:p></o:p></p></div><div><div><p class=MsoNormal> <o:p></o:p></p></div></div><div><p class=MsoNormal>--<span class=apple-converted-space> </span><o:p></o:p></p></div><div><div><div><p class=MsoNormal>Antonin<o:p></o:p></p></div></div></div></div><p class=MsoNormal><span style='font-size:9.0pt;font-family:"Helvetica",sans-serif'>_______________________________________________<br>P4-dev mailing list<br></span><a href="mailto:P4-dev@lists.p4.org"><span style='font-size:9.0pt;font-family:"Helvetica",sans-serif;color:purple'>P4-dev@lists.p4.org</span></a><span style='font-size:9.0pt;font-family:"Helvetica",sans-serif'><br></span><a href="https://emea01.safelinks.protection.outlook.com/?url=http%3A%2F%2Flists.p4.org%2Fmailman%2Flistinfo%2Fp4-dev_lists.p4.org&data=02%7C01%7Comers%40mellanox.com%7C060624c4bfc9438037b108d617a9612f%7Ca652971c7d2e4d9ba6a4d149256f461b%7C0%7C0%7C636722413593875904&sdata=zyYR%2FnIc7Pu7U%2Bmm7RcHn0J3JrzPUofy1lXJiUASLPk%3D&reserved=0"><span style='font-size:9.0pt;font-family:"Helvetica",sans-serif;color:purple'>http://lists.p4.org/mailman/listinfo/p4-dev_lists.p4.org</span></a><o:p></o:p></p></div></blockquote></div><p class=MsoNormal><o:p> </o:p></p></div></body></html>