I encountered the following error when compiling my P4 program:
main.p4(214): [--Werror=type-error] error: Field miss is not a member of structure struct local_route
if (local_route.apply().miss){
^^^^
Compilation Error`Preformatted text`
My code is as follows:
if (local_route.apply().miss){
packet_route.apply();
}
Is it because my p4 version too old?
p4test --version
p4test
Version 1.1.0-rc1 (SHA: 8742052)
How do I upgrade the p4 version without affecting the execution of the p4run command?
First of all, you really have an extremely old version of the compiler. .miss attribute was added in the P4 language specification v. 1.2.0 in October 2019 and the current version is 1.2.3 (July 2022).
Alternatively, simply replace your code with the equivalent:
if (!local_route.apply().hit){
packet_route.apply();
}
But staying on latest version of the tools is the right thing to do nevertheless (assuming that you want to receive meaningful help and support in the future).
That page also explains how to run a bash script that on a freshly installed Ubuntu 18.04, 20.04, or 22.04 Linux system, that will download and compile p4c and several other open source P4 development tools.
Neither of those options includes a command called p4run that I am aware of. I am not familiar with it. Thus if you followed either of the options above, you would need to figure out where you got p4run from and install it on the new system created by the steps above.
Thank you for your answer, p4run is a command in p4-utils. P4-Utils is an extension to Mininet that makes P4 networks easier to build, run and debug. P4-utils is strongly inspired by p4app.And here is the link to this tool https://github.com/nsg-ethz/p4-utils