<div dir="ltr"><div dir="ltr">I have not tried, but I wonder whether including all of standard_metadata in your resubmit field list is causing the value of standard_metadata.instance_type to be preserved from the original packet, when it is 0 (NORMAL), and thus preventing the resubmitted packet from having instance_type equal to 6?  You could try taking out standard_metadata from the field list, and adding only the fields within standard_metadata that you know you want to preserve, leaving out instance_type.<div><br></div><div>I have a working P4_16 program that can do resubmit and recirculate options, and use the instance_type field to distinguish in ingress processing between packets from the ingress ports, vs. resubmitted, vs. recirculated, that runs with recent versions of the open source p4c and behavioral-model, so I think they are up to the task.</div><div><br></div><div><a href="https://github.com/jafingerhut/p4-guide/tree/master/v1model-special-ops">https://github.com/jafingerhut/p4-guide/tree/master/v1model-special-ops</a><br></div><div><br></div><div>Andy</div><div><br></div></div></div><br><div class="gmail_quote"><div dir="ltr">On Sat, Aug 18, 2018 at 12:49 PM Yukinari He <<a href="mailto:yukinari.eed03@g2.nctu.edu.tw">yukinari.eed03@g2.nctu.edu.tw</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div lang="ZH-TW" link="blue" vlink="#954F72"><div class="m_-3119124402897749816WordSection1"><p class="MsoNormal"><span lang="EN-US">Him Hermant,</span></p><p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-US">Thanks for the reply, I would give it a try later.</span></p><p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-US">Also, the below is the full program written in p4-14. Is there any logical error in my program?</span></p><p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-US">field_list resubmit_field {</span></p><p class="MsoNormal"><span lang="EN-US">    standard_metadata;</span></p><p class="MsoNormal"><span lang="EN-US">    intrinsic_metadata;</span></p><p class="MsoNormal"><span lang="EN-US">    tmp;</span></p><p class="MsoNormal"><span lang="EN-US">}</span></p><p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-US">action do_resubmit(){</span></p><p class="MsoNormal"><span lang="EN-US">    modify_field(standard_metadata.ingress_port, 1);</span></p><p class="MsoNormal"><span lang="EN-US">    resubmit(resubmit_field);</span></p><p class="MsoNormal"><span lang="EN-US">}</span></p><p class="MsoNormal"><span lang="EN-US">table resubmit_new_pkt{</span></p><p class="MsoNormal"><span lang="EN-US">    actions {</span></p><p class="MsoNormal"><span lang="EN-US">        do_resubmit;</span></p><p class="MsoNormal"><span lang="EN-US">    }</span></p><p class="MsoNormal"><span lang="EN-US">}</span></p><p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-US">action next_iteration(){</span></p><p class="MsoNormal"><span lang="EN-US">    add_to_field(standard_metadata.ingress_port, 1);</span></p><p class="MsoNormal"><span lang="EN-US">    resubmit(resubmit_field);</span></p><p class="MsoNormal"><span lang="EN-US">}</span></p><p class="MsoNormal"><span lang="EN-US">table start_next_iter{</span></p><p class="MsoNormal"><span lang="EN-US">    actions {</span></p><p class="MsoNormal"><span lang="EN-US">        next_iteration;</span></p><p class="MsoNormal"><span lang="EN-US">    }</span></p><p class="MsoNormal"><span lang="EN-US">}</span></p><p class="MsoNormal"><span lang="EN-US">control ingress{</span></p><p class="MsoNormal"><span lang="EN-US">    apply(read_port_num);</span></p><p class="MsoNormal"><span lang="EN-US">    if(standard_metadata.instance_type == 6){</span></p><p class="MsoNormal"><span lang="EN-US">        <span style="color:#548235">// to perform a loop: port 1 to tmp.port_num(writing in registers by RuntimeCmd)</span></span></p><p class="MsoNormal"><span lang="EN-US">        if(standard_metadata.ingress_port <= tmp.port_num){</span></p><p class="MsoNormal"><span lang="EN-US">            apply(get_best_hop_info);  <span style="color:#548235">//read something from registers</span></span></p><p class="MsoNormal"><span lang="EN-US">            if(tmp.traffic >= tmp.best_hop_traffic){</span></p><p class="MsoNormal"><span lang="EN-US">                apply(best_hop_update); <span style="color:#548235">//write something to registers</span></span></p><p class="MsoNormal"><span lang="EN-US">            }</span></p><p class="MsoNormal"><span lang="EN-US">        }</span></p><p class="MsoNormal"><span lang="EN-US">            if(standard_metadata.ingress_port < tmp.port_num)</span></p><p class="MsoNormal"><span lang="EN-US">            apply(start_next_iter);</span></p><p class="MsoNormal"><span lang="EN-US">    }</span></p><p class="MsoNormal"><span lang="EN-US">    else{</span></p><p class="MsoNormal"><span lang="EN-US">        apply(resubmit_new_pkt);  // new pkts, resubmit</span></p><p class="MsoNormal"><span lang="EN-US">    }</span></p><p class="MsoNormal"><span lang="EN-US">}</span></p><p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-US">Thanks,</span></p><p class="MsoNormal"><span lang="EN-US">Yukinari</span></p><p class="MsoNormal"><span lang="EN-US" style="font-family:"\0065b0\007d30\00660e\009ad4",serif"><u></u> <u></u></span></p><div style="border:none;border-top:solid #e1e1e1 1.0pt;padding:3.0pt 0cm 0cm 0cm"><p class="MsoNormal" style="border:none;padding:0cm"><b><span style="font-family:"\0065b0\007d30\00660e\009ad4",serif">寄件者</span><span lang="EN-US">: </span></b><span lang="EN-US"><a href="mailto:hemant@mnkcg.com" target="_blank">hemant@mnkcg.com</a><br></span><b><span style="font-family:"\0065b0\007d30\00660e\009ad4",serif">傳送時間</span><span lang="EN-US">: </span></b><span lang="EN-US">2018</span><span style="font-family:"\0065b0\007d30\00660e\009ad4",serif">年</span><span lang="EN-US">8</span><span style="font-family:"\0065b0\007d30\00660e\009ad4",serif">月</span><span lang="EN-US">19</span><span style="font-family:"\0065b0\007d30\00660e\009ad4",serif">日</span> <span style="font-family:"\0065b0\007d30\00660e\009ad4",serif">上午</span><span lang="EN-US"> 03:21<br></span><b><span style="font-family:"\0065b0\007d30\00660e\009ad4",serif">收件者</span><span lang="EN-US">: </span></b><span lang="EN-US"><a href="mailto:yukinari.eed03@g2.nctu.edu.tw" target="_blank">'Yukinari He'</a>; <a href="mailto:p4-dev@lists.p4.org" target="_blank">p4-dev@lists.p4.org</a><br></span><b><span style="font-family:"\0065b0\007d30\00660e\009ad4",serif">主旨</span><span lang="EN-US">: </span></b><span lang="EN-US">RE: [P4-dev] Resubmit Primitive and Instance_type in bmv2</span></p></div><p class="MsoNormal"><span lang="EN-US" style="font-family:"\0065b0\007d30\00660e\009ad4",serif"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt">You could use gdb and debug what happens to </span><span lang="EN-US" style="font-family:"Times New Roman",serif">standard_metadata.instance_type<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt">Also, if the full P4 program can be shared, we could take a look.<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt">Thanks,<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt">Hemant<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt"><u></u> <u></u></span></p><div><div style="border:none;border-top:solid #e1e1e1 1.0pt;padding:3.0pt 0cm 0cm 0cm"><p class="MsoNormal"><b><span lang="EN-US" style="font-size:11.0pt">From:</span></b><span lang="EN-US" style="font-size:11.0pt"> P4-dev <<a href="mailto:p4-dev-bounces@lists.p4.org" target="_blank">p4-dev-bounces@lists.p4.org</a>> <b>On Behalf Of </b>Yukinari He<br><b>Sent:</b> Saturday, August 18, 2018 12:27 PM<br><b>To:</b> <a href="mailto:p4-dev@lists.p4.org" target="_blank">p4-dev@lists.p4.org</a><br><b>Subject:</b> [P4-dev] Resubmit Primitive and Instance_type in bmv2<u></u><u></u></span></p></div></div><p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-US" style="font-family:"Times New Roman",serif">Hi,<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US" style="font-family:"Times New Roman",serif"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-US" style="font-family:"Times New Roman",serif">I just complete a program with resubmit() as I’d like to deal with a loop-like behavior. I make <i>standatd_metadata.instance_type</i> as a field to check if a packet is resubmitted. However, I find that the condition which aims to check if the packet is resubmitted is never satisfied, so I’m not sure if the resubmit() is executed. <u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US" style="font-family:"Times New Roman",serif"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-US" style="font-family:"Times New Roman",serif">Below is the pseudo-code of my program:<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US" style="font-family:"Times New Roman",serif">Ingress{<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US" style="font-family:"Times New Roman",serif">        // do something, Part A<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US" style="font-family:"Times New Roman",serif">        If standard_metadata.instance_type == 6<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US" style="font-family:"Times New Roman",serif">            If indicator < limit<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US" style="font-family:"Times New Roman",serif">              // do something and resubmit again, Part B<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US" style="font-family:"Times New Roman",serif">       Else if standard_metadata.instance_type != 6<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US" style="font-family:"Times New Roman",serif">                Resubmit()<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US" style="font-family:"Times New Roman",serif">}<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US" style="font-family:"Times New Roman",serif"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-US" style="font-family:"Times New Roman",serif">I expect that when a packet comes, the switch should do something and resubmit it. The switch will then do Part A again and execute Part B as well for resubmitted packets until the termination condition comes true, but I find that the condition “<i>standard_metadata.instance_type == 6</i>” is never satisfied and the <i>instance_type</i> is always 0.<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US" style="font-family:"Times New Roman",serif"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-US" style="font-family:"Times New Roman",serif">Are there any mistakes I made?<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US" style="font-family:"Times New Roman",serif"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-US" style="font-family:"Times New Roman",serif">Thanks,<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US" style="font-family:"Times New Roman",serif">Yukinari<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p></div></div>_______________________________________________<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/listinfo/p4-dev_lists.p4.org</a><br>
</blockquote></div>