<div dir="ltr"><div><div><div><div><div><div>Hi Zhilong,<br><br></div>As of today we do not support periodic / triggered push notifications from the switch to the controller, except for learning notifications (e.g. for L2 learning) and ageing (table entry expiring). It would be a significant amount of work to modify bmv2 (you mention simple_switch.cpp, but in this case most of the changes would be in the bmv2 core library, which is a key part of simple_switch) to actively generate push notifications for stats / meters / register updates on the switch.<br>However we are actively working on the P4 runtime APIs and enabling the switch to generate push notifications is definitely part of our roadmap.<br><br></div></div>After thinking some more about this, you may be able to use the learning notification mechanism to proactively send the content of stateful memories to the controller. For example, let's say you define a register array in P4, with 1024 32-bit entries. Let's assume that you use these registers as counters. Based on packet data (e.g. IPv4 src address), you increment one of the register entries. Now maybe you want the controller to be notified when the register entry reaches a certain threshold. You could do the following:<br></div><div>- copy the register entry to a metadata field<br></div><div>- match on this metadata field in a table (e.g. to compare the value to a threshold) or use a control flow condition<br></div><div>- if your condition is met perform learning (using generate_digest()) in an action to send a learning notification to the drivers, including the new register entry value<br><br></div><div>For an example of a learning P4 program, please refer to <a href="https://github.com/p4lang/behavioral-model/blob/master/targets/l2_switch/l2_switch.p4">https://github.com/p4lang/behavioral-model/blob/master/targets/l2_switch/l2_switch.p4</a>. We also have some example code which retrieves learning notifications and processes them: <a href="https://github.com/p4lang/behavioral-model/blob/master/targets/l2_switch/learn_client/learn_client.cpp">https://github.com/p4lang/behavioral-model/blob/master/targets/l2_switch/learn_client/learn_client.cpp</a><br><br></div><div>Thanks,<br><br></div><div>Antonin<br></div></div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Sep 8, 2016 at 7:52 AM, zhilong zheng <span dir="ltr"><<a href="mailto:zhengzl0715@gmail.com" target="_blank">zhengzl0715@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"><span style="font-size:14px">Hi guys,</span><div style="font-size:14px">I am trying to do a research about collecting states of the network(eg. states of switches). And I want to present another method for some special collecting tasks.¬†</div><div style="font-size:14px"><br></div><div style="font-size:14px">For example, when collecting the counter state of a switch, I think it's better that the switch reports its state¬†<font style="font-weight:bold" size="4">proactively¬†</font>to the upper application like a controller.</div><div style="font-size:14px"><br></div><div style="font-size:14px">So, I'd like to know whether it's possible to do such a thing on P4. If it's ok, I should do that coding in the .P4 files(p4src) or .cpp files(eg. simple_switch.cpp)??</div><div style="font-size:14px"><br></div><div style="font-size:14px">regards,</div><div style="font-size:14px">Zhilong.</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><br clear="all"><br>-- <br><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr">Antonin<br></div></div>
</div>