This is a back-end which generates code for the Behavioral Model version 2 (BMv2). https://github.com/p4lang/behavioral-model.git
It can accept either P4_14 programs, or P4_16 programs written for the
v1model.p4
switch model.
To run and test this back-end you need some additional tools:
-
the BMv2 behavioral model itself. Installation instructions are available at https://github.com/p4lang/behavioral-model.git. You may need to update your dynamic libraries after installing bmv2:
sudo ldconfig
-
the Python scapy library for manipulating network packets
sudo pip install scapy
-
the Python ipaddr library
sudo pip install ipaddr
Here are some unsupported features we are aware of. We will update this list as more features get supported in the bmv2 compiler backend and as we discover more issues.
- nested structs in structs used as block constructor parameters
struct s0_t {
bit<8> f1;
bit<8> f2;
};
struct s1_t {
s0_t s01;
s0_t s02;
};
parser parse(packet_in pkt, out parsed_packet_t hdr,
inout s1_t my_metadata,
inout standard_metadata_t standard_metadata) {
// ...
}
-
explicit transition to reject in parse state
-
compound action parameters (can only be
bit<>
orint<>
) -
functions or methods with a compound return type
struct s_t {
bit<8> f0;
bit<8> f1;
};
extern s_t my_extern_function();
controlc c() {
apply { s_t s1 = my_extern_function(); }
}
-
user-defined extern types / methods which are not defined in
v1model.p4
-
stacks of headers containing varbit fields
-
stacks of header unions