<div dir="ltr">Hi,<div><br></div><div>There is no mechanism in the P4 v1model to query port status. This is the architecture (to use the P4_16 terminology) which bmv2 simple_switch tries to support, so the short answer to your question is no. There is however a mechanism to send port status updates to the control plane.</div><div>AFAIK, the Portable Switch Architecture (PSA), which aims to replace v1model as the de facto architecture to write portable P4 programs, will not include such a mechanism either.</div><div><br></div><div>That being said, bmv2 itself is supposed to be a framework for implementing various P4_16 architectures. So were you inclined to define your own architecture and include an extern type that enables you to query the status of a port, it should not be too hard to implement your architecture using the bmv2 C++ library. The major issue I see here is that the p4c compiler bmv2 backend is still a work in progress and doesn't support arbitrary architectures with arbitrary externs at this stage. So you would not be able to compile your programs easily. Once the backend is more stable (which IMO means once the backend supports PSA), you should be able to do what you are trying to do with some amount of work.</div><div><br></div><div>If you are using P4_14 and the legacy compiler for bmv2 (<a href="https://github.com/p4lang/p4c-bm">https://github.com/p4lang/p4c-bm</a>), it may be much easier to achieve support for this. You would simply need to define your own primitive action and implement it in C++ in bmv2 simple_switch. Your primitive action could look like this: query_port_status(<dest field>, <port number>). Now the C++ implementation may not be trivial, as you would need to get a handler on the bmv2 PortMonitor object, but that wouldn't be too hard either. If you are interested in trying this, there should be quite a few email threads on the mailing list that cover how to add a custom primitive action to the P4_14 compiler and implement it in bmv2.</div><div><br></div><div>Thanks,</div><div><br></div><div>Antonin</div></div>